2017-09-24 22:23:22 +00:00
|
|
|
module TK.SpaceTac {
|
2017-10-26 21:47:13 +00:00
|
|
|
testing("Battle", test => {
|
|
|
|
test.case("defines play order by initiative throws", check => {
|
2017-03-09 17:11:00 +00:00
|
|
|
var fleet1 = new Fleet();
|
|
|
|
var fleet2 = new Fleet();
|
2014-12-30 00:00:00 +00:00
|
|
|
|
2014-12-31 00:00:00 +00:00
|
|
|
var ship1 = new Ship(fleet1, "F1S1");
|
2017-11-14 00:07:06 +00:00
|
|
|
TestTools.setAttribute(ship1, "maneuvrability", 2);
|
2014-12-31 00:00:00 +00:00
|
|
|
var ship2 = new Ship(fleet1, "F1S2");
|
2017-11-14 00:07:06 +00:00
|
|
|
TestTools.setAttribute(ship2, "maneuvrability", 4);
|
2014-12-31 00:00:00 +00:00
|
|
|
var ship3 = new Ship(fleet1, "F1S3");
|
2017-11-14 00:07:06 +00:00
|
|
|
TestTools.setAttribute(ship3, "maneuvrability", 1);
|
2014-12-31 00:00:00 +00:00
|
|
|
var ship4 = new Ship(fleet2, "F2S1");
|
2017-11-14 00:07:06 +00:00
|
|
|
TestTools.setAttribute(ship4, "maneuvrability", 8);
|
2014-12-31 00:00:00 +00:00
|
|
|
var ship5 = new Ship(fleet2, "F2S2");
|
2017-11-14 00:07:06 +00:00
|
|
|
TestTools.setAttribute(ship5, "maneuvrability", 2);
|
2014-12-30 00:00:00 +00:00
|
|
|
|
2014-12-31 00:00:00 +00:00
|
|
|
var battle = new Battle(fleet1, fleet2);
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(battle.play_order.length, 0);
|
2014-12-30 00:00:00 +00:00
|
|
|
|
2017-02-26 17:44:15 +00:00
|
|
|
var gen = new SkewedRandomGenerator([1.0, 0.1, 1.0, 0.2, 0.6]);
|
2014-12-30 00:00:00 +00:00
|
|
|
battle.throwInitiative(gen);
|
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(battle.play_order.length, 5);
|
|
|
|
check.equals(battle.play_order, [ship1, ship4, ship5, ship3, ship2]);
|
2014-12-30 00:00:00 +00:00
|
|
|
});
|
2014-12-30 00:00:00 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("places ships on lines, facing the arena center", check => {
|
2017-03-09 17:11:00 +00:00
|
|
|
var fleet1 = new Fleet();
|
|
|
|
var fleet2 = new Fleet();
|
2014-12-30 00:00:00 +00:00
|
|
|
|
2014-12-31 00:00:00 +00:00
|
|
|
var ship1 = new Ship(fleet1, "F1S1");
|
|
|
|
var ship2 = new Ship(fleet1, "F1S2");
|
|
|
|
var ship3 = new Ship(fleet1, "F1S3");
|
|
|
|
var ship4 = new Ship(fleet2, "F2S1");
|
|
|
|
var ship5 = new Ship(fleet2, "F2S2");
|
2014-12-30 00:00:00 +00:00
|
|
|
|
2017-02-19 16:54:19 +00:00
|
|
|
var battle = new Battle(fleet1, fleet2, 1000, 500);
|
2014-12-30 00:00:00 +00:00
|
|
|
battle.placeShips();
|
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
check.nears(ship1.arena_x, 250);
|
|
|
|
check.nears(ship1.arena_y, 150);
|
|
|
|
check.nears(ship1.arena_angle, 0);
|
2014-12-30 00:00:00 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
check.nears(ship2.arena_x, 250);
|
|
|
|
check.nears(ship2.arena_y, 250);
|
|
|
|
check.nears(ship2.arena_angle, 0);
|
2014-12-30 00:00:00 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
check.nears(ship3.arena_x, 250);
|
|
|
|
check.nears(ship3.arena_y, 350);
|
|
|
|
check.nears(ship3.arena_angle, 0);
|
2014-12-30 00:00:00 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
check.nears(ship4.arena_x, 750);
|
|
|
|
check.nears(ship4.arena_y, 300);
|
|
|
|
check.nears(ship4.arena_angle, Math.PI);
|
2014-12-30 00:00:00 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
check.nears(ship5.arena_x, 750);
|
|
|
|
check.nears(ship5.arena_y, 200);
|
|
|
|
check.nears(ship5.arena_angle, Math.PI);
|
2014-12-30 00:00:00 +00:00
|
|
|
});
|
2014-12-31 00:00:00 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("advances to next ship in play order", check => {
|
2017-03-09 17:11:00 +00:00
|
|
|
var fleet1 = new Fleet();
|
|
|
|
var fleet2 = new Fleet();
|
2014-12-31 00:00:00 +00:00
|
|
|
|
2017-10-25 22:45:53 +00:00
|
|
|
var ship1 = new Ship(fleet1, "ship1");
|
|
|
|
var ship2 = new Ship(fleet1, "ship2");
|
|
|
|
var ship3 = new Ship(fleet2, "ship3");
|
2014-12-31 00:00:00 +00:00
|
|
|
|
2014-12-31 00:00:00 +00:00
|
|
|
var battle = new Battle(fleet1, fleet2);
|
2018-02-08 15:16:03 +00:00
|
|
|
battle.ships.list().forEach(ship => TestTools.setShipModel(ship, 10, 0));
|
2014-12-31 00:00:00 +00:00
|
|
|
|
|
|
|
// Check empty play_order case
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(battle.playing_ship, null);
|
2014-12-31 00:00:00 +00:00
|
|
|
battle.advanceToNextShip();
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(battle.playing_ship, null);
|
2014-12-31 00:00:00 +00:00
|
|
|
|
|
|
|
// Force play order
|
2017-11-14 00:07:06 +00:00
|
|
|
iforeach(battle.iships(), ship => TestTools.setAttribute(ship, "maneuvrability", 1));
|
2017-02-26 17:44:15 +00:00
|
|
|
var gen = new SkewedRandomGenerator([0.1, 0.2, 0.0]);
|
2014-12-31 00:00:00 +00:00
|
|
|
battle.throwInitiative(gen);
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(battle.playing_ship, null);
|
2014-12-31 00:00:00 +00:00
|
|
|
|
|
|
|
battle.advanceToNextShip();
|
2017-10-26 21:47:13 +00:00
|
|
|
check.same(battle.playing_ship, ship2);
|
2014-12-31 00:00:00 +00:00
|
|
|
|
|
|
|
battle.advanceToNextShip();
|
2017-10-26 21:47:13 +00:00
|
|
|
check.same(battle.playing_ship, ship1);
|
2014-12-31 00:00:00 +00:00
|
|
|
|
|
|
|
battle.advanceToNextShip();
|
2017-10-26 21:47:13 +00:00
|
|
|
check.same(battle.playing_ship, ship3);
|
2014-12-31 00:00:00 +00:00
|
|
|
|
|
|
|
battle.advanceToNextShip();
|
2017-10-26 21:47:13 +00:00
|
|
|
check.same(battle.playing_ship, ship2);
|
2015-02-09 00:00:00 +00:00
|
|
|
|
2017-10-25 22:45:53 +00:00
|
|
|
// A dead ship is skipped
|
2017-02-16 22:59:41 +00:00
|
|
|
ship1.setDead();
|
2015-02-09 00:00:00 +00:00
|
|
|
battle.advanceToNextShip();
|
2017-10-26 21:47:13 +00:00
|
|
|
check.same(battle.playing_ship, ship3);
|
2015-02-09 00:00:00 +00:00
|
|
|
|
2017-10-25 22:45:53 +00:00
|
|
|
// Playing ship dies
|
|
|
|
ship3.setDead();
|
|
|
|
battle.advanceToNextShip();
|
2017-10-26 21:47:13 +00:00
|
|
|
check.same(battle.playing_ship, ship2);
|
2014-12-31 00:00:00 +00:00
|
|
|
});
|
2015-01-22 00:00:00 +00:00
|
|
|
|
2017-12-04 23:46:48 +00:00
|
|
|
test.case("handles the suicide case (playing ship dies because of its action)", check => {
|
|
|
|
let battle = TestTools.createBattle(3, 1);
|
|
|
|
let [ship1, ship2, ship3, ship4] = battle.play_order;
|
|
|
|
ship1.setArenaPosition(0, 0);
|
|
|
|
ship2.setArenaPosition(0, 0);
|
|
|
|
ship3.setArenaPosition(1000, 1000);
|
|
|
|
ship4.setArenaPosition(1000, 1000);
|
|
|
|
let weapon = TestTools.addWeapon(ship1, 8000, 0, 50, 100);
|
|
|
|
|
|
|
|
check.in("initially", check => {
|
|
|
|
check.same(battle.playing_ship, ship1, "playing ship");
|
|
|
|
check.equals(battle.ships.list().filter(ship => ship.alive), [ship1, ship2, ship3, ship4], "alive ships");
|
|
|
|
});
|
|
|
|
|
2018-02-08 15:16:03 +00:00
|
|
|
let result = battle.applyOneAction(weapon.id, Target.newFromLocation(0, 0));
|
2017-12-04 23:46:48 +00:00
|
|
|
check.equals(result, true, "action applied successfully");
|
|
|
|
check.in("after weapon", check => {
|
|
|
|
check.same(battle.playing_ship, ship3, "playing ship");
|
|
|
|
check.equals(battle.ships.list().filter(ship => ship.alive), [ship3, ship4], "alive ships");
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("detects victory condition and logs a final EndBattleEvent", check => {
|
2015-02-09 00:00:00 +00:00
|
|
|
var fleet1 = new Fleet();
|
|
|
|
var fleet2 = new Fleet();
|
|
|
|
|
|
|
|
var ship1 = new Ship(fleet1, "F1S1");
|
|
|
|
var ship2 = new Ship(fleet1, "F1S2");
|
2017-11-14 00:07:06 +00:00
|
|
|
let ship3 = new Ship(fleet2, "F2S1");
|
2015-02-09 00:00:00 +00:00
|
|
|
|
|
|
|
var battle = new Battle(fleet1, fleet2);
|
2018-02-08 15:16:03 +00:00
|
|
|
battle.ships.list().forEach(ship => TestTools.setShipModel(ship, 10, 0));
|
2015-02-09 00:00:00 +00:00
|
|
|
battle.start();
|
2017-11-14 00:07:06 +00:00
|
|
|
battle.play_order = [ship3, ship2, ship1];
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(battle.ended, false);
|
2015-02-09 00:00:00 +00:00
|
|
|
|
|
|
|
ship1.setDead();
|
|
|
|
ship2.setDead();
|
|
|
|
battle.advanceToNextShip();
|
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(battle.ended, true);
|
2017-11-14 00:07:06 +00:00
|
|
|
let diff = battle.log.get(battle.log.count() - 1);
|
|
|
|
if (diff instanceof EndBattleDiff) {
|
|
|
|
check.notequals(diff.outcome.winner, null);
|
|
|
|
check.same(diff.outcome.winner, fleet2);
|
|
|
|
} else {
|
|
|
|
check.fail("Not an EndBattleDiff");
|
|
|
|
}
|
2015-02-09 00:00:00 +00:00
|
|
|
});
|
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("handles a draw in end battle", check => {
|
2015-02-09 00:00:00 +00:00
|
|
|
var fleet1 = new Fleet();
|
|
|
|
var fleet2 = new Fleet();
|
|
|
|
|
|
|
|
var ship1 = new Ship(fleet1, "F1S1");
|
|
|
|
var ship2 = new Ship(fleet1, "F1S2");
|
|
|
|
var ship3 = new Ship(fleet2, "F2S1");
|
|
|
|
|
|
|
|
var battle = new Battle(fleet1, fleet2);
|
|
|
|
|
|
|
|
battle.start();
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(battle.ended, false);
|
2015-02-09 00:00:00 +00:00
|
|
|
|
|
|
|
ship1.setDead();
|
|
|
|
ship2.setDead();
|
|
|
|
ship3.setDead();
|
|
|
|
|
|
|
|
battle.log.clear();
|
2017-11-14 00:07:06 +00:00
|
|
|
check.equals(battle.ended, false);
|
|
|
|
battle.performChecks();
|
2015-02-09 00:00:00 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(battle.ended, true);
|
2017-11-14 00:07:06 +00:00
|
|
|
check.equals(battle.log.count(), 1);
|
|
|
|
let diff = battle.log.get(0);
|
|
|
|
if (diff instanceof EndBattleDiff) {
|
|
|
|
check.equals(diff.outcome.winner, null);
|
|
|
|
} else {
|
|
|
|
check.fail("Not an EndBattleDiff");
|
|
|
|
}
|
2015-02-09 00:00:00 +00:00
|
|
|
});
|
2015-03-11 00:00:00 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("collects ships present in a circle", check => {
|
2015-03-11 00:00:00 +00:00
|
|
|
var fleet1 = new Fleet();
|
|
|
|
var ship1 = new Ship(fleet1, "F1S1");
|
|
|
|
ship1.setArenaPosition(0, 0);
|
|
|
|
var ship2 = new Ship(fleet1, "F1S2");
|
|
|
|
ship2.setArenaPosition(5, 8);
|
|
|
|
var ship3 = new Ship(fleet1, "F1S3");
|
|
|
|
ship3.setArenaPosition(6.5, 9.5);
|
|
|
|
var ship4 = new Ship(fleet1, "F1S4");
|
|
|
|
ship4.setArenaPosition(12, 12);
|
|
|
|
|
|
|
|
var battle = new Battle(fleet1);
|
2017-02-26 17:44:15 +00:00
|
|
|
battle.throwInitiative(new SkewedRandomGenerator([5, 4, 3, 2]));
|
2015-03-11 00:00:00 +00:00
|
|
|
|
|
|
|
var result = battle.collectShipsInCircle(Target.newFromLocation(5, 8), 3);
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(result, [ship2, ship3]);
|
2015-03-11 00:00:00 +00:00
|
|
|
});
|
2017-02-06 21:46:55 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("adds and remove drones", check => {
|
2017-02-06 21:46:55 +00:00
|
|
|
let battle = new Battle();
|
|
|
|
let ship = new Ship();
|
|
|
|
let drone = new Drone(ship);
|
2017-11-14 00:07:06 +00:00
|
|
|
check.equals(battle.drones.count(), 0);
|
2017-02-06 21:46:55 +00:00
|
|
|
|
|
|
|
battle.addDrone(drone);
|
2017-11-14 00:07:06 +00:00
|
|
|
check.equals(battle.drones.count(), 1);
|
|
|
|
check.same(battle.drones.get(drone.id), drone);
|
2017-02-06 21:46:55 +00:00
|
|
|
|
|
|
|
battle.addDrone(drone);
|
2017-11-14 00:07:06 +00:00
|
|
|
check.equals(battle.drones.count(), 1);
|
2017-02-06 21:46:55 +00:00
|
|
|
|
|
|
|
battle.removeDrone(drone);
|
2017-11-14 00:07:06 +00:00
|
|
|
check.equals(battle.drones.count(), 0);
|
2017-02-06 21:46:55 +00:00
|
|
|
|
|
|
|
battle.removeDrone(drone);
|
2017-11-14 00:07:06 +00:00
|
|
|
check.equals(battle.drones.count(), 0);
|
2017-02-06 21:46:55 +00:00
|
|
|
});
|
2017-02-16 18:24:21 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("checks if a player is able to play", check => {
|
2017-02-16 18:24:21 +00:00
|
|
|
let battle = new Battle();
|
|
|
|
let player = new Player();
|
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(battle.canPlay(player), false);
|
2017-02-16 18:24:21 +00:00
|
|
|
|
|
|
|
let ship = new Ship();
|
2017-10-25 22:45:53 +00:00
|
|
|
TestTools.setShipPlaying(battle, ship);
|
2017-02-16 18:24:21 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(battle.canPlay(player), false);
|
2017-02-16 18:24:21 +00:00
|
|
|
|
2018-01-16 00:08:24 +00:00
|
|
|
ship.fleet.setPlayer(player);
|
2017-02-16 18:24:21 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(battle.canPlay(player), true);
|
2017-02-16 18:24:21 +00:00
|
|
|
});
|
2017-05-14 23:00:36 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("gets the number of turns before a specific ship plays", check => {
|
2017-11-14 00:07:06 +00:00
|
|
|
let battle = TestTools.createBattle(2, 1);
|
2017-05-14 23:00:36 +00:00
|
|
|
|
2017-11-14 00:07:06 +00:00
|
|
|
check.in("initial", check => {
|
|
|
|
check.same(battle.playing_ship, battle.play_order[0], "first ship playing");
|
|
|
|
check.equals(battle.getPlayOrder(battle.play_order[0]), 0);
|
|
|
|
check.equals(battle.getPlayOrder(battle.play_order[1]), 1);
|
|
|
|
check.equals(battle.getPlayOrder(battle.play_order[2]), 2);
|
|
|
|
});
|
2017-05-14 23:00:36 +00:00
|
|
|
|
|
|
|
battle.advanceToNextShip();
|
|
|
|
|
2017-11-14 00:07:06 +00:00
|
|
|
check.in("1 step", check => {
|
|
|
|
check.same(battle.playing_ship, battle.play_order[1], "second ship playing");
|
|
|
|
check.equals(battle.getPlayOrder(battle.play_order[0]), 2);
|
|
|
|
check.equals(battle.getPlayOrder(battle.play_order[1]), 0);
|
|
|
|
check.equals(battle.getPlayOrder(battle.play_order[2]), 1);
|
|
|
|
});
|
2017-05-14 23:00:36 +00:00
|
|
|
|
|
|
|
battle.advanceToNextShip();
|
|
|
|
|
2017-11-14 00:07:06 +00:00
|
|
|
check.in("2 steps", check => {
|
|
|
|
check.same(battle.playing_ship, battle.play_order[2], "third ship playing");
|
|
|
|
check.equals(battle.getPlayOrder(battle.play_order[0]), 1);
|
|
|
|
check.equals(battle.getPlayOrder(battle.play_order[1]), 2);
|
|
|
|
check.equals(battle.getPlayOrder(battle.play_order[2]), 0);
|
|
|
|
});
|
2017-05-14 23:00:36 +00:00
|
|
|
|
|
|
|
battle.advanceToNextShip();
|
|
|
|
|
2017-11-14 00:07:06 +00:00
|
|
|
check.in("3 steps", check => {
|
|
|
|
check.same(battle.playing_ship, battle.play_order[0], "first ship playing");
|
|
|
|
check.equals(battle.getPlayOrder(battle.play_order[0]), 0);
|
|
|
|
check.equals(battle.getPlayOrder(battle.play_order[1]), 1);
|
|
|
|
check.equals(battle.getPlayOrder(battle.play_order[2]), 2);
|
|
|
|
});
|
2017-05-14 23:00:36 +00:00
|
|
|
});
|
2017-06-12 22:28:54 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("lists area effects", check => {
|
2017-06-12 22:28:54 +00:00
|
|
|
let battle = new Battle();
|
|
|
|
let ship = battle.fleets[0].addShip();
|
|
|
|
|
2018-02-08 15:16:03 +00:00
|
|
|
check.equals(imaterialize(battle.iAreaEffects(100, 50)), [], "initial");
|
2017-06-12 22:28:54 +00:00
|
|
|
|
|
|
|
let drone1 = new Drone(ship);
|
|
|
|
drone1.x = 120;
|
|
|
|
drone1.y = 60;
|
|
|
|
drone1.radius = 40;
|
|
|
|
drone1.effects = [new DamageEffect(12)];
|
|
|
|
battle.addDrone(drone1);
|
|
|
|
let drone2 = new Drone(ship);
|
|
|
|
drone2.x = 130;
|
|
|
|
drone2.y = 70;
|
|
|
|
drone2.radius = 20;
|
|
|
|
drone2.effects = [new DamageEffect(14)];
|
|
|
|
battle.addDrone(drone2);
|
|
|
|
|
2018-02-08 15:16:03 +00:00
|
|
|
check.equals(imaterialize(battle.iAreaEffects(100, 50)), [drone1.effects[0]], "drone effects");
|
2017-06-12 22:28:54 +00:00
|
|
|
|
2018-02-08 15:16:03 +00:00
|
|
|
let eq1 = new ToggleAction("eq1", { power: 0, radius: 500, effects: [new AttributeEffect("maneuvrability", 1)] });
|
|
|
|
ship.actions.addCustom(eq1);
|
|
|
|
ship.actions.toggle(eq1, true);
|
|
|
|
let eq2 = new ToggleAction("eq2", { power: 0, radius: 500, effects: [new AttributeEffect("maneuvrability", 2)] });
|
|
|
|
ship.actions.addCustom(eq2);
|
|
|
|
ship.actions.toggle(eq2, false);
|
|
|
|
let eq3 = new ToggleAction("eq3", { power: 0, radius: 100, effects: [new AttributeEffect("maneuvrability", 3)] });
|
|
|
|
ship.actions.addCustom(eq3);
|
|
|
|
ship.actions.toggle(eq3, true);
|
2017-06-12 22:28:54 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
check.equals(imaterialize(battle.iAreaEffects(100, 50)), [
|
2017-11-14 00:07:06 +00:00
|
|
|
drone1.effects[0],
|
2018-02-08 15:16:03 +00:00
|
|
|
eq1.effects[0],
|
|
|
|
], "drone and toggle effects");
|
2017-06-12 22:28:54 +00:00
|
|
|
});
|
2017-07-20 15:49:47 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("is serializable", check => {
|
2017-07-20 15:49:47 +00:00
|
|
|
let battle = Battle.newQuickRandom();
|
|
|
|
battle.ai_playing = true;
|
|
|
|
|
2017-09-24 22:23:22 +00:00
|
|
|
let serializer = new Serializer(TK.SpaceTac);
|
2017-07-20 15:49:47 +00:00
|
|
|
let data = serializer.serialize(battle);
|
|
|
|
|
|
|
|
let loaded = serializer.unserialize(data);
|
|
|
|
|
2018-01-16 00:08:24 +00:00
|
|
|
check.equals(loaded.ai_playing, false, "ai playing is reset");
|
2017-07-20 15:49:47 +00:00
|
|
|
battle.ai_playing = false;
|
2018-01-16 00:08:24 +00:00
|
|
|
check.equals(loaded, battle, "unserialized == initial");
|
|
|
|
|
|
|
|
let session = new GameSession();
|
|
|
|
session.startNewGame();
|
|
|
|
session.start_location.setupEncounter();
|
|
|
|
session.start_location.enterLocation(session.player.fleet);
|
|
|
|
let battle1 = nn(session.getBattle());
|
|
|
|
let data1 = serializer.serialize(battle1);
|
|
|
|
|
|
|
|
let ratio = data.length / data1.length;
|
|
|
|
check.greaterorequal(ratio, 1.2, `quick battle serialized size (${data.length}) should be larger than campaign's (${data1.length})`);
|
2017-07-20 15:49:47 +00:00
|
|
|
});
|
2017-11-14 00:07:06 +00:00
|
|
|
|
|
|
|
test.case("can revert the last action", check => {
|
|
|
|
let battle = new Battle();
|
|
|
|
let ship = battle.fleets[0].addShip();
|
|
|
|
ship.setValue("hull", 13);
|
|
|
|
battle.log.clear();
|
|
|
|
battle.log.add(new ShipValueDiff(ship, "hull", 4));
|
|
|
|
battle.log.add(new ShipActionUsedDiff(ship, EndTurnAction.SINGLETON, Target.newFromShip(ship)));
|
|
|
|
battle.log.add(new ShipValueDiff(ship, "hull", 7));
|
|
|
|
battle.log.add(new ShipActionUsedDiff(ship, EndTurnAction.SINGLETON, Target.newFromShip(ship)));
|
|
|
|
battle.log.add(new ShipValueDiff(ship, "hull", 2));
|
|
|
|
|
|
|
|
check.in("initial state", check => {
|
|
|
|
check.equals(ship.getValue("hull"), 13, "hull=13");
|
|
|
|
check.equals(battle.log.count(), 5, "log count=5");
|
|
|
|
});
|
|
|
|
|
|
|
|
battle.revertOneAction();
|
|
|
|
|
|
|
|
check.in("revert 1 action", check => {
|
|
|
|
check.equals(ship.getValue("hull"), 11, "hull=11");
|
|
|
|
check.equals(battle.log.count(), 3, "log count=3");
|
|
|
|
});
|
|
|
|
|
|
|
|
battle.revertOneAction();
|
|
|
|
|
|
|
|
check.in("revert 2 actions", check => {
|
|
|
|
check.equals(ship.getValue("hull"), 4, "hull=4");
|
|
|
|
check.equals(battle.log.count(), 1, "log count=1");
|
|
|
|
});
|
|
|
|
|
|
|
|
battle.revertOneAction();
|
|
|
|
|
|
|
|
check.in("revert 3 actions", check => {
|
|
|
|
check.equals(ship.getValue("hull"), 0, "hull=0");
|
|
|
|
check.equals(battle.log.count(), 0, "log count=0");
|
|
|
|
});
|
|
|
|
})
|
2014-12-30 00:00:00 +00:00
|
|
|
});
|
|
|
|
}
|