2017-02-09 00:00:35 +00:00
|
|
|
module TS.SpaceTac {
|
2014-12-29 00:00:00 +00:00
|
|
|
// One player (human or IA)
|
2017-02-07 18:54:53 +00:00
|
|
|
export class Player {
|
2015-04-07 00:00:00 +00:00
|
|
|
// Universe in which we are playing
|
|
|
|
universe: Universe;
|
|
|
|
|
2014-12-29 00:00:00 +00:00
|
|
|
// Current fleet
|
|
|
|
fleet: Fleet;
|
|
|
|
|
2015-03-19 00:00:00 +00:00
|
|
|
// List of visited star systems
|
2017-01-29 18:34:38 +00:00
|
|
|
visited: StarLocation[] = [];
|
2015-03-19 00:00:00 +00:00
|
|
|
|
2014-12-29 00:00:00 +00:00
|
|
|
// Create a player, with an empty fleet
|
2015-04-07 00:00:00 +00:00
|
|
|
constructor(universe: Universe = new Universe()) {
|
|
|
|
this.universe = universe;
|
2014-12-29 00:00:00 +00:00
|
|
|
this.fleet = new Fleet(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create a quick random player, with a fleet, for testing purposes
|
2014-12-30 00:00:00 +00:00
|
|
|
static newQuickRandom(name: String): Player {
|
2015-04-07 00:00:00 +00:00
|
|
|
var player = new Player(new Universe());
|
2015-01-14 00:00:00 +00:00
|
|
|
var ship: Ship;
|
|
|
|
var ship_generator = new ShipGenerator();
|
2014-12-30 00:00:00 +00:00
|
|
|
|
2015-01-14 00:00:00 +00:00
|
|
|
ship = ship_generator.generate(1);
|
|
|
|
ship.name = name + "'s First";
|
|
|
|
player.fleet.addShip(ship);
|
|
|
|
|
|
|
|
ship = ship_generator.generate(1);
|
|
|
|
ship.name = name + "'s Second";
|
|
|
|
player.fleet.addShip(ship);
|
|
|
|
|
|
|
|
ship = ship_generator.generate(1);
|
|
|
|
ship.name = name + "'s Third";
|
|
|
|
player.fleet.addShip(ship);
|
|
|
|
|
|
|
|
ship = ship_generator.generate(1);
|
|
|
|
ship.name = name + "'s Fourth";
|
|
|
|
player.fleet.addShip(ship);
|
2014-12-30 00:00:00 +00:00
|
|
|
|
2014-12-29 00:00:00 +00:00
|
|
|
return player;
|
|
|
|
}
|
2015-03-19 00:00:00 +00:00
|
|
|
|
2017-01-29 18:34:38 +00:00
|
|
|
/**
|
|
|
|
* Return true if the player has visited at least one location in a given system.
|
|
|
|
*/
|
|
|
|
hasVisitedSystem(system: Star): boolean {
|
|
|
|
return any(this.visited, location => location.star == system);
|
2015-03-19 00:00:00 +00:00
|
|
|
}
|
|
|
|
|
2017-01-29 18:34:38 +00:00
|
|
|
/**
|
|
|
|
* Return true if the player has visited a given star location.
|
|
|
|
*/
|
|
|
|
hasVisitedLocation(location: StarLocation): boolean {
|
|
|
|
return contains(this.visited, location);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set a star location as visited.
|
|
|
|
*/
|
|
|
|
setVisited(location: StarLocation): void {
|
|
|
|
add(this.visited, location);
|
2015-03-19 00:00:00 +00:00
|
|
|
}
|
2015-04-07 00:00:00 +00:00
|
|
|
|
|
|
|
// Get currently played battle, null when none is in progress
|
2017-03-09 17:11:00 +00:00
|
|
|
getBattle(): Battle | null {
|
2015-04-07 00:00:00 +00:00
|
|
|
return this.fleet.battle;
|
|
|
|
}
|
2017-03-09 17:11:00 +00:00
|
|
|
setBattle(battle: Battle | null): void {
|
2015-04-07 00:00:00 +00:00
|
|
|
this.fleet.setBattle(battle);
|
|
|
|
}
|
2015-04-21 22:17:00 +00:00
|
|
|
|
|
|
|
// Exit the current battle unconditionally, if any
|
|
|
|
// This does not apply retreat penalties, or battle outcome, only unbind the battle from current session
|
|
|
|
exitBattle(): void {
|
|
|
|
this.setBattle(null);
|
|
|
|
}
|
2014-12-29 00:00:00 +00:00
|
|
|
}
|
2015-01-07 00:00:00 +00:00
|
|
|
}
|