diff --git a/TODO.md b/TODO.md index 4645eb3..c616750 100644 --- a/TODO.md +++ b/TODO.md @@ -31,7 +31,6 @@ Character sheet Battle ------ -* Fix stats only filling for one fleet * Display shield (and its (dis)appearance) * Display estimated damage and displacement in targetting mode * Add a voluntary retreat option diff --git a/src/core/BattleStats.spec.ts b/src/core/BattleStats.spec.ts index b0137f6..c4d128b 100644 --- a/src/core/BattleStats.spec.ts +++ b/src/core/BattleStats.spec.ts @@ -25,17 +25,17 @@ module TK.SpaceTac.Specs { stats.processLog(battle.log, battle.fleets[0]); check.equals(stats.stats, {}); - battle.log.add(new ShipDamageDiff(attacker, 10, 12)); + battle.log.add(new ShipDamageDiff(attacker, 1, 3, 2)); stats.processLog(battle.log, battle.fleets[0], true); - check.equals(stats.stats, { "Damage dealt": [0, 22] }); + check.equals(stats.stats, { "Damage to hull": [0, 1], "Damage shielded": [0, 3], "Damage evaded": [0, 2] }); - battle.log.add(new ShipDamageDiff(defender, 40, 0)); + battle.log.add(new ShipDamageDiff(defender, 2, 1, 3)); stats.processLog(battle.log, battle.fleets[0], true); - check.equals(stats.stats, { "Damage dealt": [40, 22] }); + check.equals(stats.stats, { "Damage to hull": [2, 1], "Damage shielded": [1, 3], "Damage evaded": [3, 2] }); - battle.log.add(new ShipDamageDiff(attacker, 5, 4)); + battle.log.add(new ShipDamageDiff(attacker, 1, 1, 1)); stats.processLog(battle.log, battle.fleets[0], true); - check.equals(stats.stats, { "Damage dealt": [40, 31] }); + check.equals(stats.stats, { "Damage to hull": [2, 2], "Damage shielded": [1, 4], "Damage evaded": [3, 3] }); }) test.case("collects distance moved", check => { diff --git a/src/core/BattleStats.ts b/src/core/BattleStats.ts index d61c1a0..b8cabc2 100644 --- a/src/core/BattleStats.ts +++ b/src/core/BattleStats.ts @@ -49,7 +49,9 @@ module TK.SpaceTac { let diff_ship = diff.ship_id; let attacker_ship = any(attacker.ships, ship => ship.is(diff_ship)); if (diff instanceof ShipDamageDiff) { - this.addStat("Damage dealt", diff.hull + diff.shield, !attacker_ship); + this.addStat("Damage evaded", diff.evaded, !attacker_ship); + this.addStat("Damage shielded", diff.shield, !attacker_ship); + this.addStat("Damage to hull", diff.hull, !attacker_ship); } else if (diff instanceof ShipMoveDiff) { this.addStat("Move distance (km)", diff.getDistance(), attacker_ship); } else if (diff instanceof DroneDeployedDiff) { diff --git a/src/core/GameSession.spec.ts b/src/core/GameSession.spec.ts index 32cf2ec..ab52e1b 100644 --- a/src/core/GameSession.spec.ts +++ b/src/core/GameSession.spec.ts @@ -36,6 +36,15 @@ module TK.SpaceTac.Specs { compare(loaded_session, session); }); + test.case("generates a quick battle", check => { + var session = new GameSession(); + session.startQuickBattle(); + + check.same(session.getBattle(), session.player.fleet.battle, "battle"); + check.same(session.player.fleet, session.fleet, "fleet"); + check.same(nn(session.getBattle()).fleets[0], session.fleet, "attacker fleet"); + }); + test.case("applies battle outcome to bound player", check => { let session = new GameSession(); check.equals(session.getBattle(), null); diff --git a/src/core/GameSession.ts b/src/core/GameSession.ts index 4ac96d6..2e44241 100644 --- a/src/core/GameSession.ts +++ b/src/core/GameSession.ts @@ -94,8 +94,7 @@ module TK.SpaceTac { */ setCampaignFleet(fleet: Fleet | null = null, story = true) { if (fleet) { - this.player.fleet = fleet; - fleet.setPlayer(this.player); + this.player.setFleet(fleet); } else { let fleet_generator = new FleetGenerator(); this.player.fleet = fleet_generator.generate(1, this.player, 2); @@ -112,10 +111,11 @@ module TK.SpaceTac { * Start a new "quick battle" game */ startQuickBattle(with_ai: boolean = false): void { + this.player = new Player(); this.universe = new Universe(); let battle = Battle.newQuickRandom(true, RandomGenerator.global.randInt(1, 10)); - battle.fleets[0].setPlayer(this.player); + this.player.setFleet(battle.fleets[0]); this.player.setBattle(battle); this.reactions = new PersonalityReactions(); diff --git a/src/core/Player.ts b/src/core/Player.ts index ba3906b..821e107 100644 --- a/src/core/Player.ts +++ b/src/core/Player.ts @@ -32,6 +32,14 @@ module TK.SpaceTac { return player; } + /** + * Set the fleet for this player + */ + setFleet(fleet: Fleet): void { + this.fleet = fleet; + fleet.setPlayer(this); + } + /** * Get a cheats object */