Skip to content

Commit

Permalink
add transition to statistics scene when last enemy is destroyed
Browse files Browse the repository at this point in the history
  • Loading branch information
newagebegins committed Jun 22, 2012
1 parent cefbc10 commit c827103
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 3 deletions.
24 changes: 23 additions & 1 deletion spec/EnemyFactorySpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ describe("EnemyFactory", function () {
var eventManager = new EventManager();
spyOn(eventManager, 'addSubscriber');
var factory = new EnemyFactory(eventManager);
expect(eventManager.addSubscriber).toHaveBeenCalledWith(factory, [Points.Event.DESTROYED]);
expect(eventManager.addSubscriber).toHaveBeenCalledWith(factory,
[Points.Event.DESTROYED, TankExplosion.Event.DESTROYED]);
});

it("#nextPosition", function () {
Expand Down Expand Up @@ -195,6 +196,27 @@ describe("EnemyFactory", function () {

expect(factory.getEnemyCount()).toEqual(0);
});

describe("TankExplosion.Event.DESTROYED", function () {
it("no tanks left", function () {
var eventManager = new EventManager();
spyOn(eventManager, 'fireEvent')
var factory = new EnemyFactory(eventManager);
var explosion = new TankExplosion(eventManager, new Tank(eventManager));
factory.notify({'name': TankExplosion.Event.DESTROYED, 'explosion': explosion});
expect(eventManager.fireEvent).toHaveBeenCalledWith({'name': EnemyFactory.Event.LAST_ENEMY_DESTROYED});
});

it("more tanks left", function () {
var eventManager = new EventManager();
spyOn(eventManager, 'fireEvent')
var factory = new EnemyFactory(eventManager);
factory.setEnemies([new Tank(eventManager)]);
var explosion = new TankExplosion(eventManager, new Tank(eventManager));
factory.notify({'name': TankExplosion.Event.DESTROYED, 'explosion': explosion});
expect(eventManager.fireEvent).not.toHaveBeenCalledWith({'name': EnemyFactory.Event.LAST_ENEMY_DESTROYED});
});
});
});

it("#getEnemiesToCreateCount", function () {
Expand Down
8 changes: 7 additions & 1 deletion src/EnemyFactory.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
function EnemyFactory(eventManager) {
this._eventManager = eventManager;
this._eventManager.addSubscriber(this, [Points.Event.DESTROYED]);
this._eventManager.addSubscriber(this, [Points.Event.DESTROYED, TankExplosion.Event.DESTROYED]);

this._pauseListener = new PauseListener(this._eventManager);

Expand All @@ -18,6 +18,7 @@ function EnemyFactory(eventManager) {

EnemyFactory.Event = {};
EnemyFactory.Event.ENEMY_CREATED = 'EnemyFactory.Event.ENEMY_CREATED';
EnemyFactory.Event.LAST_ENEMY_DESTROYED = 'EnemyFactory.Event.LAST_ENEMY_DESTROYED';

EnemyFactory.prototype.setEnemies = function (enemies) {
this._enemies = enemies;
Expand Down Expand Up @@ -122,6 +123,11 @@ EnemyFactory.prototype.notify = function (event) {
if (event.name == Points.Event.DESTROYED) {
this._enemyCount--;
}
else if (event.name == TankExplosion.Event.DESTROYED) {
if (this.getEnemiesToCreateCount() == 0) {
this._eventManager.fireEvent({'name': EnemyFactory.Event.LAST_ENEMY_DESTROYED});
}
}
};

EnemyFactory.prototype.setEnemyCountLimit = function (limit) {
Expand Down
11 changes: 10 additions & 1 deletion src/Level.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ function Level(sceneManager, stageNumber) {

var self = this;

this._eventManager.addSubscriber(this, [BaseExplosion.Event.DESTROYED]);
this._eventManager.addSubscriber(this, [BaseExplosion.Event.DESTROYED, EnemyFactory.Event.LAST_ENEMY_DESTROYED]);

this._visible = false;
this._stage = stageNumber;
Expand Down Expand Up @@ -70,6 +70,11 @@ function Level(sceneManager, stageNumber) {
this._gameOverScript.enqueue(new Delay(this._gameOverScript, 50));
this._gameOverScript.enqueue({execute: function () { sceneManager.toStageStatisticsScene(stageNumber, self._player); }});

this._levelTransitionScript = new Script();
this._levelTransitionScript.setActive(false);
this._levelTransitionScript.enqueue(new Delay(this._levelTransitionScript, 200));
this._levelTransitionScript.enqueue({execute: function () { sceneManager.toStageStatisticsScene(stageNumber, self._player); }});

this._loadStage(this._stage);
}

Expand All @@ -83,6 +88,7 @@ Level.prototype.update = function () {
this._shovelHandler.update();
this._pause.update();
this._gameOverScript.update();
this._levelTransitionScript.update();
};

Level.prototype.draw = function (ctx) {
Expand All @@ -106,6 +112,9 @@ Level.prototype.notify = function (event) {
this._gameOverScript.setActive(true);
this._pause.setActive(false);
}
else if (event.name == EnemyFactory.Event.LAST_ENEMY_DESTROYED) {
this._levelTransitionScript.setActive(true);
}
};

Level.prototype._loadStage = function (stageNumber) {
Expand Down

0 comments on commit c827103

Please sign in to comment.