Added removal of defeated encounter from location, allowing the winner to continue its journey
This commit is contained in:
parent
f204bc4321
commit
0650605db9
|
@ -71,5 +71,11 @@ module SpaceTac.Game {
|
||||||
setBattle(battle: Battle): void {
|
setBattle(battle: Battle): void {
|
||||||
this.fleet.setBattle(battle);
|
this.fleet.setBattle(battle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,10 +79,10 @@ module SpaceTac.Game {
|
||||||
// Base level for encounters in this system
|
// Base level for encounters in this system
|
||||||
level: number;
|
level: number;
|
||||||
|
|
||||||
constructor(universe: Universe, x: number, y: number) {
|
constructor(universe: Universe = null, x: number = 0, y: number = 0) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.universe = universe;
|
this.universe = universe || new Universe();
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.radius = 0.1;
|
this.radius = 0.1;
|
||||||
|
|
|
@ -30,10 +30,10 @@ module SpaceTac.Game {
|
||||||
encounter: Fleet;
|
encounter: Fleet;
|
||||||
encounter_gen: boolean;
|
encounter_gen: boolean;
|
||||||
|
|
||||||
constructor(star: Star, type: StarLocationType, x: number, y: number) {
|
constructor(star: Star, type: StarLocationType, x: number = 0, y: number = 0) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.star = star;
|
this.star = star || new Star();
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
|
@ -74,6 +74,15 @@ module SpaceTac.Game {
|
||||||
var encounter = this.tryGenerateEncounter(random);
|
var encounter = this.tryGenerateEncounter(random);
|
||||||
if (encounter) {
|
if (encounter) {
|
||||||
var battle = new Battle(fleet, encounter);
|
var battle = new Battle(fleet, encounter);
|
||||||
|
battle.log.subscribe((event: BaseLogEvent) => {
|
||||||
|
if (event.code === "endbattle") {
|
||||||
|
var endbattle = <EndBattleEvent>event;
|
||||||
|
if (!endbattle.outcome.draw && endbattle.outcome.winner !== encounter) {
|
||||||
|
// The encounter fleet lost, remove it
|
||||||
|
this.encounter = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
battle.start();
|
battle.start();
|
||||||
return battle;
|
return battle;
|
||||||
} else {
|
} else {
|
||||||
|
|
35
src/app/game/specs/StarLocation.spec.ts
Normal file
35
src/app/game/specs/StarLocation.spec.ts
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/// <reference path="../../definitions/jasmine.d.ts"/>
|
||||||
|
|
||||||
|
module SpaceTac.Game.Specs {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
describe("StarLocation", () => {
|
||||||
|
it("removes generated encounters that lose", function () {
|
||||||
|
var location = new StarLocation(null, StarLocationType.PLANET, 0, 0);
|
||||||
|
var fleet = new Fleet();
|
||||||
|
var random = new RandomGenerator(0);
|
||||||
|
var battle = location.enterLocation(fleet, random);
|
||||||
|
|
||||||
|
expect(location.encounter).not.toBeNull();
|
||||||
|
expect(battle).not.toBeNull();
|
||||||
|
|
||||||
|
battle.endBattle(fleet);
|
||||||
|
|
||||||
|
expect(location.encounter).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("leaves generated encounters that win", function () {
|
||||||
|
var location = new StarLocation(null, StarLocationType.PLANET, 0, 0);
|
||||||
|
var fleet = new Fleet();
|
||||||
|
var random = new RandomGenerator(0);
|
||||||
|
var battle = location.enterLocation(fleet, random);
|
||||||
|
|
||||||
|
expect(location.encounter).not.toBeNull();
|
||||||
|
expect(battle).not.toBeNull();
|
||||||
|
|
||||||
|
battle.endBattle(location.encounter);
|
||||||
|
|
||||||
|
expect(location.encounter).not.toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
|
@ -4,7 +4,7 @@ module SpaceTac.View {
|
||||||
// Base class for all game views
|
// Base class for all game views
|
||||||
export class BaseView extends Phaser.State {
|
export class BaseView extends Phaser.State {
|
||||||
// Link to the root UI
|
// Link to the root UI
|
||||||
protected gameui: GameUI;
|
gameui: GameUI;
|
||||||
|
|
||||||
// Message notifications
|
// Message notifications
|
||||||
messages: Messages;
|
messages: Messages;
|
||||||
|
|
|
@ -52,7 +52,7 @@ module SpaceTac.View {
|
||||||
this.processFireEvent(<Game.FireEvent>event);
|
this.processFireEvent(<Game.FireEvent>event);
|
||||||
break;
|
break;
|
||||||
case "endbattle":
|
case "endbattle":
|
||||||
this.view.setInteractionEnabled(false);
|
this.processEndBattleEvent(<Game.EndBattleEvent>event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -127,5 +127,19 @@ module SpaceTac.View {
|
||||||
var effect = new WeaponEffect(this.view.arena, source, destination, event.weapon.code);
|
var effect = new WeaponEffect(this.view.arena, source, destination, event.weapon.code);
|
||||||
effect.start();
|
effect.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Battle ended (victory or defeat)
|
||||||
|
private processEndBattleEvent(event: Game.EndBattleEvent): void {
|
||||||
|
this.view.setInteractionEnabled(false);
|
||||||
|
|
||||||
|
if (event.outcome.winner.player === this.view.player) {
|
||||||
|
// Victory !
|
||||||
|
// TODO Loot screen
|
||||||
|
this.view.player.exitBattle();
|
||||||
|
this.view.game.state.start("router");
|
||||||
|
} else {
|
||||||
|
// TODO Game over ?
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue