1
0
Fork 0
spacetac/src/core/actions/EndTurnAction.ts

75 lines
2.5 KiB
TypeScript
Raw Normal View History

/// <reference path="BaseAction.ts" />
2017-09-24 22:23:22 +00:00
module TK.SpaceTac {
/**
* Action to end the ship's turn
*
* This action is always available (through its singleton)
*/
2015-01-06 00:00:00 +00:00
export class EndTurnAction extends BaseAction {
// Singleton that may be used for all ships
static SINGLETON = new EndTurnAction();
2015-01-06 00:00:00 +00:00
constructor() {
super("End turn");
2017-11-29 22:03:58 +00:00
}
getVerb(ship: Ship): string {
return this.name;
}
getTitle(ship: Ship): string {
return this.name;
2015-01-06 00:00:00 +00:00
}
getPowerUsage(ship: Ship, target: Target | null): number {
let toggled_cost = sum(ship.getToggleActions(true).map(action => action.power));
return ship.getValue("power") + toggled_cost - ship.getAttribute("power_capacity");
}
2017-12-04 23:46:48 +00:00
getSpecificDiffs(ship: Ship, battle: Battle, target: Target): BaseBattleDiff[] {
if (ship.is(battle.playing_ship)) {
let result: BaseBattleDiff[] = [];
let new_ship = battle.getNextShip();
// Cool down actions
ship.actions.listAll().forEach(action => {
if (ship.actions.getCooldown(action).heat > 0) {
result.push(new ShipCooldownDiff(ship, action, 1));
}
})
2017-11-29 22:03:58 +00:00
// "On turn end" effects
2017-11-28 18:01:56 +00:00
iforeach(ship.active_effects.iterator(), effect => {
2017-11-29 22:03:58 +00:00
result = result.concat(effect.getTurnEndDiffs(ship));
2017-11-28 18:01:56 +00:00
});
2017-11-28 18:01:56 +00:00
// Change the active ship
let cycle_diff = (battle.play_order.indexOf(new_ship) == 0) ? 1 : 0;
result.push(new ShipChangeDiff(ship, new_ship, cycle_diff));
2017-11-29 22:03:58 +00:00
// "On turn start" effects
iforeach(new_ship.active_effects.iterator(), effect => {
result = result.concat(effect.getTurnStartDiffs(ship));
});
return result;
} else {
return [];
}
2015-01-06 00:00:00 +00:00
}
2017-05-22 16:29:04 +00:00
2017-09-19 15:09:06 +00:00
protected checkShipTarget(ship: Ship, target: Target): Target | null {
return ship.is(target.ship_id) ? target : null;
2017-09-19 15:09:06 +00:00
}
getTargettingMode(ship: Ship): ActionTargettingMode {
return ship.getValue("power") ? ActionTargettingMode.SELF_CONFIRM : ActionTargettingMode.SELF;
}
2017-05-22 16:29:04 +00:00
getEffectsDescription(): string {
return "End the current ship's turn.\nWill also generate power and cool down equipments.";
}
2015-01-06 00:00:00 +00:00
}
2015-01-07 00:00:00 +00:00
}