1
0
Fork 0
spacetac/src/core/GameSession.ts

84 lines
2.6 KiB
TypeScript
Raw Normal View History

2017-02-09 00:00:35 +00:00
module TS.SpaceTac {
// A game session, binding a universe and a player
export class GameSession {
// Game universe
universe: Universe;
// Current connected player
player: Player;
constructor() {
this.universe = new Universe();
this.player = new Player(this.universe);
}
// Load a game state from a string
static loadFromString(serialized: string): GameSession {
2017-02-09 00:00:35 +00:00
var serializer = new Serializer(TS.SpaceTac);
return <GameSession>serializer.unserialize(serialized);
}
// Serializes the game state to a string
saveToString(): string {
2017-02-09 00:00:35 +00:00
var serializer = new Serializer(TS.SpaceTac);
return serializer.serialize(this);
}
2017-03-23 18:58:09 +00:00
// Generate a real single player game (campaign)
startNewGame(): void {
var fleet_generator = new FleetGenerator();
this.universe = new Universe();
this.universe.generate();
var start_location = this.universe.getStartLocation();
2017-03-23 18:58:09 +00:00
start_location.clearEncounter();
start_location.addShop(50);
2017-02-09 00:00:35 +00:00
this.player = new Player(this.universe);
this.player.fleet = fleet_generator.generate(1, this.player);
this.player.fleet.setLocation(start_location);
2017-03-23 18:58:09 +00:00
this.player.fleet.credits = 500;
}
// Start a new "quick battle" game
startQuickBattle(with_ai: boolean = false): void {
2017-02-16 22:59:41 +00:00
var battle = Battle.newQuickRandom();
this.player = battle.fleets[0].player;
this.player.setBattle(battle);
}
// Get currently played battle, null when none is in progress
2017-03-09 17:11:00 +00:00
getBattle(): Battle | null {
return this.player.getBattle();
}
/**
* Set the end of current battle
*/
setBattleEnded() {
let battle = this.getBattle();
if (battle && battle.ended) {
if (battle.outcome.winner == this.player.fleet) {
// In case of victory, generate loot
battle.outcome.createLoot(battle);
// In case of victorious encounter, clear the encouter
let location = this.player.fleet.location;
if (location) {
location.clearEncounter();
}
}
}
}
/**
* Return true if the session has a universe to explore
*/
hasUniverse(): boolean {
return this.universe.stars.length > 0;
}
}
}