1
0
Fork 0

Fixed battle stats always adding to defender fleet

This commit is contained in:
Michaël Lemaire 2018-03-29 00:17:24 +02:00
parent 37bb85e773
commit eec499dbd5
6 changed files with 29 additions and 11 deletions

View File

@ -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

View File

@ -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 => {

View File

@ -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) {

View File

@ -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);

View File

@ -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();

View File

@ -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
*/