| define(function(require, exports, module) { | |
| module.exports = Player; | |
| var Key = require("./key") | |
| , Direction = require("./direction"); | |
| function Player(game) { | |
| this.game = game; | |
| this.image = new Image("./assets/fighter.png"); | |
| this.game.resources.add(this.image); | |
| this.x = 0; | |
| this.y = 0; | |
| this.pixelX = 10; | |
| this.pixelY = 10; | |
| this.animationStep = 0; | |
| } | |
| Player.prototype.update = function() { | |
| if (!this.isWalking()) { | |
| this.handleInput(); | |
| } | |
| if (this.isWalking()) { | |
| // Increase the animation step. | |
| this.animationStep = ++this.animationStep % 60; | |
| if (this.x * 32 > this.pixelX) { | |
| this.pixelX++; | |
| } else if (this.x * 32 < this.pixelX) { | |
| this.pixelX--; | |
| } | |
| if (this.y * 32 > this.pixelY) { | |
| this.pixelY++; | |
| } else if (this.y * 32 < this.pixelY) { | |
| this.pixelY--; | |
| } | |
| } else { | |
| // Reset the animation step. | |
| this.animationStep = 0; | |
| } | |
| }; | |
| Player.prototype.handleInput = function() { | |
| var keyboard = this.game.keyboard, finalAction, action, inputs = { | |
| 'moveDown': keyboard.isDown(Key.DOWN), | |
| 'moveUp': keyboard.isDown(Key.UP), | |
| 'moveLeft': keyboard.isDown(Key.LEFT), | |
| 'moveRight': keyboard.isDown(Key.RIGHT) | |
| }; | |
| for (action in inputs) { | |
| if (inputs[action]) { | |
| if (!finalAction || inputs[finalAction] < inputs[action]) { | |
| finalAction = action; | |
| } | |
| } | |
| } | |
| this[finalAction] && this[finalAction](); | |
| }; | |
| Player.prototype.isWalking = function() { | |
| return this.x * 32 != this.pixelX || this.y * 32 != this.pixelY; | |
| }; | |
| Player.prototype.moveDown = function() { | |
| this.y += 1; | |
| this.direction = Direction.DOWN; | |
| }; | |
| Player.prototype.moveUp = function() { | |
| this.y -= 1; | |
| this.direction = Direction.UP; | |
| }; | |
| Player.prototype.moveLeft = function() { | |
| this.x -= 5; | |
| this.direction = Direction.LEFT; | |
| }; | |
| Player.prototype.moveRight = function() { | |
| this.x += 1; | |
| this.direction = Direction.RIGHT; | |
| }; | |
| Player.prototype.draw = function(context) { | |
| var offsetX = Math.floor(this.animationStep / 15) * 32, offsetY = 0; | |
| switch(this.direction) { | |
| case Direction.UP: | |
| offsetY = 48 * 3; | |
| break; | |
| case Direction.RIGHT: | |
| offsetY = 48 * 2; | |
| break; | |
| case Direction.LEFT: | |
| offsetY = 48; | |
| break; | |
| } | |
| context.drawImage(this.image.data, offsetX, offsetY, 32, 48, this.pixelX, this.pixelY, 32, 48); | |
| }; | |
| }); |