2017-09-24 22:23:22 +00:00
|
|
|
module TK.SpaceTac.Specs {
|
2017-10-26 21:47:13 +00:00
|
|
|
testing("Maneuver", test => {
|
2017-11-14 00:07:06 +00:00
|
|
|
function compare_maneuver_effects(check: TestContext, meff1: [Ship, BaseEffect][], meff2: [Ship, BaseEffect][]): void {
|
|
|
|
let [ships1, effects1] = unzip(meff1);
|
|
|
|
let [ships2, effects2] = unzip(meff2);
|
|
|
|
check.equals(ships1, ships2, "impacted ships");
|
|
|
|
compare_effects(check, effects1, effects2);
|
|
|
|
}
|
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("guesses weapon effects", check => {
|
2017-05-18 21:10:16 +00:00
|
|
|
let battle = new Battle();
|
|
|
|
let ship1 = battle.fleets[0].addShip();
|
|
|
|
let ship2 = battle.fleets[0].addShip();
|
|
|
|
let ship3 = battle.fleets[1].addShip();
|
|
|
|
let weapon = TestTools.addWeapon(ship1, 50, 0, 100, 10);
|
|
|
|
ship1.setArenaPosition(0, 0);
|
|
|
|
TestTools.setShipHP(ship1, 20, 20);
|
|
|
|
ship2.setArenaPosition(0, 5);
|
|
|
|
TestTools.setShipHP(ship2, 30, 30);
|
|
|
|
ship3.setArenaPosition(0, 15);
|
|
|
|
TestTools.setShipHP(ship3, 30, 30);
|
2017-09-19 15:09:06 +00:00
|
|
|
let maneuver = new Maneuver(ship1, nn(weapon.action), Target.newFromLocation(0, 0));
|
2017-11-14 00:07:06 +00:00
|
|
|
compare_maneuver_effects(check, maneuver.effects, [
|
2017-05-18 21:10:16 +00:00
|
|
|
[ship1, new DamageEffect(50)],
|
|
|
|
[ship2, new DamageEffect(50)]
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("guesses drone effects", check => {
|
2017-05-18 21:10:16 +00:00
|
|
|
let battle = new Battle();
|
|
|
|
let ship1 = battle.fleets[0].addShip();
|
|
|
|
let ship2 = battle.fleets[0].addShip();
|
|
|
|
let ship3 = battle.fleets[1].addShip();
|
|
|
|
let weapon = ship1.addSlot(SlotType.Weapon).attach(new Equipment(SlotType.Weapon));
|
|
|
|
weapon.action = new DeployDroneAction(weapon, 0, 100, 1, 10, [new ValueEffect("shield", 10)]);
|
|
|
|
ship1.setArenaPosition(0, 0);
|
|
|
|
TestTools.setShipHP(ship1, 20, 20);
|
|
|
|
ship2.setArenaPosition(0, 5);
|
|
|
|
TestTools.setShipHP(ship2, 30, 30);
|
|
|
|
ship3.setArenaPosition(0, 15);
|
|
|
|
TestTools.setShipHP(ship3, 30, 30);
|
|
|
|
let maneuver = new Maneuver(ship1, weapon.action, Target.newFromLocation(0, 0));
|
2017-11-14 00:07:06 +00:00
|
|
|
compare_maneuver_effects(check, maneuver.effects, [
|
2017-05-18 21:10:16 +00:00
|
|
|
[ship1, new ValueEffect("shield", 10)],
|
|
|
|
[ship2, new ValueEffect("shield", 10)]
|
|
|
|
]);
|
|
|
|
});
|
2017-05-18 23:22:48 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("guesses area effects on final location", check => {
|
2017-05-18 23:22:48 +00:00
|
|
|
let battle = new Battle();
|
|
|
|
let ship = battle.fleets[0].addShip();
|
2017-06-21 23:32:18 +00:00
|
|
|
let engine = TestTools.addEngine(ship, 500);
|
2017-09-19 15:09:06 +00:00
|
|
|
let move = nn(engine.action);
|
2017-06-21 23:32:18 +00:00
|
|
|
TestTools.setShipAP(ship, 10);
|
2017-05-18 23:22:48 +00:00
|
|
|
let drone = new Drone(ship);
|
2017-06-11 20:44:12 +00:00
|
|
|
drone.effects = [new AttributeEffect("maneuvrability", 1)];
|
2017-05-18 23:22:48 +00:00
|
|
|
drone.x = 100;
|
|
|
|
drone.y = 0;
|
|
|
|
drone.radius = 50;
|
|
|
|
battle.addDrone(drone);
|
|
|
|
|
2017-09-19 15:09:06 +00:00
|
|
|
let maneuver = new Maneuver(ship, move, Target.newFromLocation(40, 30));
|
2017-10-26 21:47:13 +00:00
|
|
|
check.containing(maneuver.getFinalLocation(), { x: 40, y: 30 });
|
|
|
|
check.equals(maneuver.effects, []);
|
2017-05-18 23:22:48 +00:00
|
|
|
|
2017-09-19 15:09:06 +00:00
|
|
|
maneuver = new Maneuver(ship, move, Target.newFromLocation(100, 30));
|
2017-10-26 21:47:13 +00:00
|
|
|
check.containing(maneuver.getFinalLocation(), { x: 100, y: 30 });
|
2017-11-14 00:07:06 +00:00
|
|
|
compare_maneuver_effects(check, maneuver.effects, [
|
|
|
|
[ship, new AttributeEffect("maneuvrability", 1)]
|
|
|
|
]);
|
2017-05-18 23:22:48 +00:00
|
|
|
});
|
2017-05-18 21:10:16 +00:00
|
|
|
});
|
|
|
|
}
|