Skip to content

Commit

Permalink
add transition between levels
Browse files Browse the repository at this point in the history
  • Loading branch information
newagebegins committed Jun 22, 2012
1 parent c827103 commit ae47c7d
Show file tree
Hide file tree
Showing 8 changed files with 46 additions and 21 deletions.
8 changes: 6 additions & 2 deletions spec/EnemyFactorySpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,9 @@ describe("EnemyFactory", function () {
var eventManager = new EventManager();
spyOn(eventManager, 'fireEvent')
var factory = new EnemyFactory(eventManager);
var explosion = new TankExplosion(eventManager, new Tank(eventManager));
var tank = new Tank(eventManager);
tank.makeEnemy();
var explosion = new TankExplosion(eventManager, tank);
factory.notify({'name': TankExplosion.Event.DESTROYED, 'explosion': explosion});
expect(eventManager.fireEvent).toHaveBeenCalledWith({'name': EnemyFactory.Event.LAST_ENEMY_DESTROYED});
});
Expand All @@ -212,7 +214,9 @@ describe("EnemyFactory", function () {
spyOn(eventManager, 'fireEvent')
var factory = new EnemyFactory(eventManager);
factory.setEnemies([new Tank(eventManager)]);
var explosion = new TankExplosion(eventManager, new Tank(eventManager));
var tank = new Tank(eventManager);
tank.makeEnemy();
var explosion = new TankExplosion(eventManager, tank);
factory.notify({'name': TankExplosion.Event.DESTROYED, 'explosion': explosion});
expect(eventManager.fireEvent).not.toHaveBeenCalledWith({'name': EnemyFactory.Event.LAST_ENEMY_DESTROYED});
});
Expand Down
2 changes: 1 addition & 1 deletion src/EnemyFactory.js
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ EnemyFactory.prototype.notify = function (event) {
this._enemyCount--;
}
else if (event.name == TankExplosion.Event.DESTROYED) {
if (this.getEnemiesToCreateCount() == 0) {
if (event.explosion.getTank().isEnemy() && this.getEnemiesToCreateCount() == 0) {
this._eventManager.fireEvent({'name': EnemyFactory.Event.LAST_ENEMY_DESTROYED});
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/GameScene.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
function GameScene(sceneManager) {
function GameScene(sceneManager, stage, player) {
var self = this;
this._sceneManager = sceneManager;
this._curtain = new Curtain();
this._stage = 1;
this._stage = stage === undefined ? 1 : stage;
this._stageMessage = new StageMessage(this._stage);
this._level = new Level(sceneManager, this._stage);
this._level = new Level(sceneManager, this._stage, player);

this._script = new Script();
this._script.enqueue({update: function () {
Expand Down
22 changes: 14 additions & 8 deletions src/Level.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
function Level(sceneManager, stageNumber) {
function Level(sceneManager, stageNumber, player) {
Gamefield.call(this, sceneManager);

var self = this;
Expand Down Expand Up @@ -56,24 +56,30 @@ function Level(sceneManager, stageNumber) {

this._pause = new Pause(this._eventManager);

var lives = new Lives(this._eventManager);
this._livesView = new LivesView(lives);
var score = new Score(this._eventManager);

this._player = new Player(this._eventManager, lives, score);
if (player !== undefined) {
this._player = player;
this._livesView = new LivesView(this._player.getLives());
}
else {
var lives = new Lives(this._eventManager);
this._livesView = new LivesView(lives);
var score = new Score(this._eventManager);

this._player = new Player(this._eventManager, lives, score);
}

this._gameOverMessage = new GameOverMessage();

this._gameOverScript = new Script();
this._gameOverScript.setActive(false);
this._gameOverScript.enqueue(new MoveFn(this._gameOverMessage, 'y', 213, 100, this._gameOverScript));
this._gameOverScript.enqueue(new Delay(this._gameOverScript, 50));
this._gameOverScript.enqueue({execute: function () { sceneManager.toStageStatisticsScene(stageNumber, self._player); }});
this._gameOverScript.enqueue({execute: function () { sceneManager.toStageStatisticsScene(stageNumber, self._player, true); }});

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._levelTransitionScript.enqueue({execute: function () { sceneManager.toStageStatisticsScene(stageNumber, self._player, false); }});

this._loadStage(this._stage);
}
Expand Down
4 changes: 4 additions & 0 deletions src/Player.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,7 @@ Player.prototype.getTanks = function (type) {
Player.prototype.getTanksCount = function () {
return this._tanksCount;
};

Player.prototype.getLives = function () {
return this._lives;
};
8 changes: 4 additions & 4 deletions src/SceneManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,19 @@ SceneManager.prototype.toMainMenuScene = function (arrived) {
}
};

SceneManager.prototype.toGameScene = function () {
SceneManager.prototype.toGameScene = function (stage, player) {
this._eventManager.removeAllSubscribers();
this._scene = new GameScene(this);
this._scene = new GameScene(this, stage, player);
};

SceneManager.prototype.toConstructionScene = function () {
this._eventManager.removeAllSubscribers();
this._scene = new Construction(this);
};

SceneManager.prototype.toStageStatisticsScene = function (stage, player) {
SceneManager.prototype.toStageStatisticsScene = function (stage, player, gameOver) {
this._eventManager.removeAllSubscribers();
this._scene = new StageStatisticsScene(this, stage, player);
this._scene = new StageStatisticsScene(this, stage, player, gameOver);
};

SceneManager.prototype.toGameOverScene = function () {
Expand Down
14 changes: 11 additions & 3 deletions src/StageStatisticsScene.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
function StageStatisticsScene(sceneManager, stage, player) {
function StageStatisticsScene(sceneManager, stage, player, gameOver) {
var self = this;

this._sceneManager = sceneManager;
this._stage = stage;
this._player = player;
this._gameOver = gameOver;

this._script = new Script();

Expand All @@ -23,8 +24,15 @@ function StageStatisticsScene(sceneManager, stage, player) {
this._script.enqueue({execute: function () { self._armorTankPoints.show(); }});
this._script.enqueue(this._armorTankPoints);
this._script.enqueue({execute: function () { self._drawTotal = true; }});
this._script.enqueue(new Delay(this._script, 30));
this._script.enqueue({execute: function () { sceneManager.toGameOverScene(); }});
this._script.enqueue(new Delay(this._script, 60));
this._script.enqueue({execute: function () {
if (gameOver) {
sceneManager.toGameOverScene();
}
else {
sceneManager.toGameScene(stage + 1, player);
}
}});
};

StageStatisticsScene.prototype.update = function () {
Expand Down
3 changes: 3 additions & 0 deletions src/Tank.js
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,9 @@ Tank.prototype.setBulletType = function (type) {
};

Tank.prototype.shoot = function () {
if (this.isDestroyed()) {
return;
}
if (!this._state.canShoot()) {
return;
}
Expand Down

0 comments on commit ae47c7d

Please sign in to comment.