Skip to content

Commit

Permalink
sprite: add move frequency
Browse files Browse the repository at this point in the history
  • Loading branch information
newagebegins committed Jun 20, 2012
1 parent 854acb7 commit 223ffe4
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 11 deletions.
39 changes: 31 additions & 8 deletions spec/SpriteSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,42 @@ describe("Sprite", function () {
});

describe("#move", function () {
it("should fire event when moved", function () {
spyOn(eventManager, 'fireEvent');
it("speed not zero", function () {
sprite.setSpeed(1);
spyOn(sprite, 'doMove');
sprite.move();
expect(eventManager.fireEvent).toHaveBeenCalledWith({
'name': Sprite.Event.MOVED,
'sprite': sprite});
expect(sprite.doMove).toHaveBeenCalled();
});

it("shouldn't fire event if not moved", function () {
spyOn(eventManager, 'fireEvent');
it("speed is zero", function () {
spyOn(sprite, 'doMove');
sprite.move();
expect(sprite.doMove).not.toHaveBeenCalled();
});

it("frequency - 2", function () {
sprite.setMoveFrequency(2);
sprite.setSpeed(1);
spyOn(sprite, 'doMove');
sprite.move();
expect(sprite.doMove).not.toHaveBeenCalled();
sprite.move();
expect(eventManager.fireEvent).not.toHaveBeenCalled();
expect(sprite.doMove).toHaveBeenCalled();
sprite.doMove.reset();
sprite.move();
expect(sprite.doMove).not.toHaveBeenCalled();
sprite.move();
expect(sprite.doMove).toHaveBeenCalled();
});
});

describe("#doMove", function () {
it("should fire event", function () {
spyOn(eventManager, 'fireEvent');
sprite.doMove();
expect(eventManager.fireEvent).toHaveBeenCalledWith({
'name': Sprite.Event.MOVED,
'sprite': sprite});
});
});

Expand Down
4 changes: 2 additions & 2 deletions src/EnemyFactory.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,14 @@ EnemyFactory.prototype.createEnemy = function (enemy, position) {
tank.setState(new TankStateAppearing(tank));

if (enemy.type == Tank.Type.BASIC) {
tank.setNormalSpeed(1);
tank.setMoveFrequency(2);
tank.setTrackAnimationDuration(4);
}
else if (enemy.type == Tank.Type.FAST) {
tank.setNormalSpeed(3);
}
else if (enemy.type == Tank.Type.ARMOR) {
tank.setNormalSpeed(1);
tank.setMoveFrequency(2);
tank.setTrackAnimationDuration(4);
tank.setHitLimit(4);
tank.setColorValues([[0,1],[0,2],[1,2],[0,0]])
Expand Down
14 changes: 13 additions & 1 deletion src/Sprite.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ function Sprite(eventManager) {
this._turn = false;
this._zIndex = 0;
this._pauseListener = new PauseListener(this._eventManager);
this._moveFrequency = 1;
this._moveTimer = 0;

this._eventManager.fireEvent({'name': Sprite.Event.CREATED, 'sprite': this});
}
Expand Down Expand Up @@ -69,14 +71,24 @@ Sprite.prototype.toNormalSpeed = function () {
this._speed = this._normalSpeed;
};

Sprite.prototype.setMoveFrequency = function (moveFrequencty) {
this._moveFrequency = moveFrequencty;
};

Sprite.prototype.stop = function () {
this._speed = 0;
};

Sprite.prototype.move = function () {
if (this._speed == 0) {
this._moveTimer++;
if (this._moveTimer < this._moveFrequency || this._speed == 0) {
return;
}
this._moveTimer = 0;
this.doMove();
};

Sprite.prototype.doMove = function () {
this._x = this._getNewX();
this._y = this._getNewY();
this._turn = false;
Expand Down

0 comments on commit 223ffe4

Please sign in to comment.