Skip to content

Commit

Permalink
bug fix: fix EnemyFactory
Browse files Browse the repository at this point in the history
  • Loading branch information
newagebegins committed Jun 24, 2012
1 parent b1761dc commit 65faf22
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 21 deletions.
47 changes: 30 additions & 17 deletions spec/EnemyFactorySpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -197,23 +197,21 @@ describe("EnemyFactory", function () {
});

describe("#notify", function () {
it("Points.Event.DESTROYED", function () {
var eventManager = new EventManager();
var factory = new EnemyFactory(eventManager);
var enemy = Tank.Type.BASIC;
var position = new Point(1, 2);
var tank = factory.createEnemy(enemy, position);

expect(factory.getEnemyCount()).toEqual(1);

var points = new Points(eventManager);
points.setType(Points.Type.TANK);
factory.notify({'name': Points.Event.DESTROYED, 'points': points});

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

describe("TankExplosion.Event.DESTROYED", function () {
it("enemy count should decrease", function () {
var eventManager = new EventManager();
var factory = new EnemyFactory(eventManager);
var tank = factory.createEnemy(Tank.Type.BASIC, new Point(1, 2));
tank.makeEnemy();

expect(factory.getEnemyCount()).toEqual(1);

var explosion = new TankExplosion(eventManager, tank);
factory.notify({'name': TankExplosion.Event.DESTROYED, 'explosion': explosion});

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

it("no tanks left", function () {
var eventManager = new EventManager();
spyOn(eventManager, 'fireEvent')
Expand All @@ -225,7 +223,7 @@ describe("EnemyFactory", function () {
expect(eventManager.fireEvent).toHaveBeenCalledWith({'name': EnemyFactory.Event.LAST_ENEMY_DESTROYED});
});

it("more tanks left", function () {
it("tanks to create left", function () {
var eventManager = new EventManager();
spyOn(eventManager, 'fireEvent')
var factory = new EnemyFactory(eventManager);
Expand All @@ -236,6 +234,21 @@ describe("EnemyFactory", function () {
factory.notify({'name': TankExplosion.Event.DESTROYED, 'explosion': explosion});
expect(eventManager.fireEvent).not.toHaveBeenCalledWith({'name': EnemyFactory.Event.LAST_ENEMY_DESTROYED});
});

it("tanks on the field left", function () {
var eventManager = new EventManager();
spyOn(eventManager, 'fireEvent')
var factory = new EnemyFactory(eventManager);
factory.setEnemies([Tank.Type.BASIC, Tank.Type.BASIC]);
factory.setPositions([new Point(0, 0)]);
factory.create();
factory.create();
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
6 changes: 2 additions & 4 deletions src/EnemyFactory.js
Original file line number Diff line number Diff line change
Expand Up @@ -131,11 +131,9 @@ EnemyFactory.prototype.getEnemiesToCreateCount = function () {
};

EnemyFactory.prototype.notify = function (event) {
if (event.name == Points.Event.DESTROYED && event.points.getType() == Points.Type.TANK) {
if (event.name == TankExplosion.Event.DESTROYED) {
this._enemyCount--;
}
else if (event.name == TankExplosion.Event.DESTROYED) {
if (event.explosion.getTank().isEnemy() && this.getEnemiesToCreateCount() == 0) {
if (event.explosion.getTank().isEnemy() && this._enemyCount <= 0 && this.getEnemiesToCreateCount() == 0) {
this._eventManager.fireEvent({'name': EnemyFactory.Event.LAST_ENEMY_DESTROYED});
}
}
Expand Down

0 comments on commit 65faf22

Please sign in to comment.