2017-11-14 00:07:06 +00:00
|
|
|
module TK.SpaceTac.Specs {
|
|
|
|
testing("BattleChecks", test => {
|
|
|
|
test.case("detects victory conditions", check => {
|
|
|
|
let battle = new Battle();
|
|
|
|
let ship1 = battle.fleets[0].addShip();
|
|
|
|
let ship2 = battle.fleets[1].addShip();
|
|
|
|
let checks = new BattleChecks(battle);
|
|
|
|
check.equals(checks.checkVictory(), [], "no victory");
|
|
|
|
|
2019-05-20 16:35:59 +00:00
|
|
|
battle.turncount = 5;
|
2017-11-14 00:07:06 +00:00
|
|
|
ship1.setDead();
|
|
|
|
check.equals(checks.checkVictory(), [new EndBattleDiff(battle.fleets[1], 5)], "victory");
|
|
|
|
})
|
|
|
|
|
|
|
|
test.case("fixes ship values", check => {
|
|
|
|
let battle = new Battle();
|
|
|
|
let ship1 = battle.fleets[0].addShip();
|
|
|
|
let ship2 = battle.fleets[1].addShip();
|
|
|
|
let checks = new BattleChecks(battle);
|
|
|
|
check.equals(checks.checkShipValues(), [], "no value to fix");
|
|
|
|
|
|
|
|
ship1.setValue("hull", -4);
|
|
|
|
TestTools.setAttribute(ship2, "shield_capacity", 48);
|
|
|
|
ship2.setValue("shield", 60);
|
|
|
|
check.equals(checks.checkShipValues(), [
|
|
|
|
new ShipValueDiff(ship1, "hull", 4),
|
|
|
|
new ShipValueDiff(ship2, "shield", -12),
|
|
|
|
], "fixed values");
|
|
|
|
})
|
|
|
|
|
2019-05-19 22:32:15 +00:00
|
|
|
test.case("marks ships as dead", check => {
|
2017-12-04 23:46:48 +00:00
|
|
|
let battle = TestTools.createBattle(1, 2);
|
2019-05-19 22:32:15 +00:00
|
|
|
const ship1 = battle.fleets[0].ships[0];
|
|
|
|
const ship2 = battle.fleets[1].ships[0];
|
2017-11-14 00:07:06 +00:00
|
|
|
let checks = new BattleChecks(battle);
|
|
|
|
check.equals(checks.checkDeadShips(), [], "no ship to mark as dead");
|
|
|
|
|
2019-05-19 22:32:15 +00:00
|
|
|
ship2.setValue("hull", 0);
|
2017-12-04 23:46:48 +00:00
|
|
|
|
|
|
|
let result = checks.checkDeadShips();
|
|
|
|
check.equals(result, [new ShipDeathDiff(battle, ship2)], "ship2 marked as dead");
|
|
|
|
battle.applyDiffs(result);
|
|
|
|
|
2019-05-19 22:32:15 +00:00
|
|
|
ship1.setValue("hull", 0);
|
|
|
|
|
2017-12-04 23:46:48 +00:00
|
|
|
result = checks.checkDeadShips();
|
2019-05-19 22:32:15 +00:00
|
|
|
check.equals(result, [new ShipDeathDiff(battle, ship1)], "ship1 marked as dead");
|
2017-12-04 23:46:48 +00:00
|
|
|
battle.applyDiffs(result);
|
|
|
|
|
|
|
|
result = checks.checkDeadShips();
|
2019-05-19 22:32:15 +00:00
|
|
|
check.equals(result, [], "no ship left");
|
2017-11-14 00:07:06 +00:00
|
|
|
})
|
2017-11-29 00:36:07 +00:00
|
|
|
|
|
|
|
test.case("fixes area effects", check => {
|
|
|
|
let battle = new Battle();
|
|
|
|
let ship1 = battle.fleets[0].addShip();
|
|
|
|
let ship2 = battle.fleets[1].addShip();
|
|
|
|
let checks = new BattleChecks(battle);
|
|
|
|
|
|
|
|
check.in("initial state", check => {
|
|
|
|
check.equals(checks.checkAreaEffects(), [], "effects diff");
|
|
|
|
});
|
|
|
|
|
|
|
|
let effect1 = ship1.active_effects.add(new StickyEffect(new BaseEffect("e1")));
|
|
|
|
let effect2 = ship1.active_effects.add(new BaseEffect("e2"));
|
|
|
|
let effect3 = ship1.active_effects.add(new BaseEffect("e3"));
|
2018-03-29 22:57:53 +00:00
|
|
|
check.patch(battle, "getAreaEffects", (): [Ship, BaseEffect][] => [[ship1, effect3]]);
|
2017-11-29 00:36:07 +00:00
|
|
|
check.in("sticky+obsolete+missing", check => {
|
|
|
|
check.equals(checks.checkAreaEffects(), [
|
|
|
|
new ShipEffectRemovedDiff(ship1, effect2),
|
|
|
|
new ShipEffectAddedDiff(ship2, effect3)
|
|
|
|
], "effects diff");
|
|
|
|
});
|
|
|
|
})
|
2018-03-29 22:57:53 +00:00
|
|
|
|
|
|
|
test.case("applies vigilance actions", check => {
|
|
|
|
let battle = new Battle();
|
|
|
|
let ship1 = battle.fleets[0].addShip();
|
|
|
|
ship1.setArenaPosition(100, 100);
|
|
|
|
TestTools.setShipModel(ship1, 10, 0, 5);
|
|
|
|
let ship2 = battle.fleets[1].addShip();
|
|
|
|
ship2.setArenaPosition(1000, 1000);
|
|
|
|
TestTools.setShipModel(ship2, 10);
|
|
|
|
|
2019-11-22 10:02:53 +00:00
|
|
|
let vig1 = ship1.actions.addCustom(new VigilanceAction("Vig1", { radius: 100, filter: ActionImpactFilter.ENEMIES }, { intruder_effects: [new DamageEffect(1)] }));
|
|
|
|
let vig2 = ship1.actions.addCustom(new VigilanceAction("Vig2", { radius: 50, filter: ActionImpactFilter.ENEMIES }, { intruder_effects: [new DamageEffect(2)] }));
|
|
|
|
let vig3 = ship1.actions.addCustom(new VigilanceAction("Vig3", { radius: 100, filter: ActionImpactFilter.ALLIES }, { intruder_effects: [new DamageEffect(3)] }));
|
2018-03-29 22:57:53 +00:00
|
|
|
battle.applyOneAction(vig1.id);
|
|
|
|
battle.applyOneAction(vig2.id);
|
|
|
|
battle.applyOneAction(vig3.id);
|
|
|
|
|
|
|
|
let checks = new BattleChecks(battle);
|
|
|
|
check.in("initial state", check => {
|
|
|
|
check.equals(checks.checkAreaEffects(), [], "effects diff");
|
|
|
|
});
|
|
|
|
|
|
|
|
ship2.setArenaPosition(100, 160);
|
|
|
|
check.in("ship2 moved in range", check => {
|
|
|
|
check.equals(checks.checkAreaEffects(), [
|
|
|
|
new ShipEffectAddedDiff(ship2, vig1.effects[0]),
|
|
|
|
new VigilanceAppliedDiff(ship1, vig1, ship2),
|
|
|
|
new ShipDamageDiff(ship2, 1, 0),
|
|
|
|
new ShipValueDiff(ship2, "hull", -1),
|
|
|
|
], "effects diff");
|
|
|
|
});
|
|
|
|
})
|
2017-11-14 00:07:06 +00:00
|
|
|
})
|
|
|
|
}
|