2017-09-24 22:23:22 +00:00
|
|
|
module TK.SpaceTac {
|
2017-04-20 21:20:50 +00:00
|
|
|
/**
|
|
|
|
* Result of an ended battle
|
|
|
|
*
|
|
|
|
* This stores the winner, and the retrievable loot
|
|
|
|
*/
|
2017-02-07 18:54:53 +00:00
|
|
|
export class BattleOutcome {
|
2015-02-13 00:00:00 +00:00
|
|
|
// Indicates if the battle is a draw (no winner)
|
2018-02-08 15:16:03 +00:00
|
|
|
draw: boolean
|
2015-02-13 00:00:00 +00:00
|
|
|
|
|
|
|
// Victorious fleet
|
2018-06-13 21:52:36 +00:00
|
|
|
winner: RObjectId | null
|
2015-02-13 00:00:00 +00:00
|
|
|
|
2017-03-09 17:11:00 +00:00
|
|
|
constructor(winner: Fleet | null) {
|
2018-06-13 21:52:36 +00:00
|
|
|
this.winner = winner ? winner.id : null;
|
2015-02-13 00:00:00 +00:00
|
|
|
this.draw = winner ? false : true;
|
|
|
|
}
|
2015-02-13 00:00:00 +00:00
|
|
|
|
2017-05-09 17:19:26 +00:00
|
|
|
/**
|
|
|
|
* Grant experience to participating fleets
|
|
|
|
*/
|
|
|
|
grantExperience(fleets: Fleet[]) {
|
|
|
|
fleets.forEach(fleet => {
|
2018-06-13 21:52:36 +00:00
|
|
|
let winfactor = (fleet.is(this.winner)) ? 0.03 : (this.draw ? 0.01 : 0.005);
|
2017-05-09 17:19:26 +00:00
|
|
|
let enemies = flatten(fleets.filter(f => f !== fleet).map(f => f.ships));
|
|
|
|
let difficulty = sum(enemies.map(enemy => 100 + enemy.level.getExperience()));
|
|
|
|
fleet.ships.forEach(ship => {
|
|
|
|
ship.level.addExperience(Math.floor(difficulty * winfactor));
|
|
|
|
ship.level.checkLevelUp();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
2015-02-13 00:00:00 +00:00
|
|
|
}
|
|
|
|
}
|