From fdb805cfe9b0cbeea1ded7b06dc84ddbd2bc42c9 Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Sat, 27 Sep 2014 09:58:27 +0200 Subject: Cleaned up play.js --- game/entities/player.js | 1 + game/states/play.js | 187 ++++++++++++++++++++++-------------------------- 2 files changed, 86 insertions(+), 102 deletions(-) diff --git a/game/entities/player.js b/game/entities/player.js index f8c7a8b..b2214ff 100644 --- a/game/entities/player.js +++ b/game/entities/player.js @@ -29,6 +29,7 @@ var Player = function(game, x, y, key, soundKey) { this.hasPoisonPill = true; this.poisonPillActive = false; this.gamepadPoisonLastPressed = Number.NEGATIVE_INFINITY; + this.keyboardPoisonLastPressed = Number.NEGATIVE_INFINITY; this.lastTween = null; this.scoreSound = game.sound.add(soundKey); diff --git a/game/states/play.js b/game/states/play.js index 4134173..cb1edf7 100644 --- a/game/states/play.js +++ b/game/states/play.js @@ -54,6 +54,13 @@ Play.prototype = { var levelText = this.game.cache.getText('level'); var splitRows = levelText.split('\n'); + this.gameHeight = splitRows.length; + this.gameWidth = splitRows.reduce(function(currentMax, nextRow) { + return Math.max(currentMax, nextRow.trim().length); + }, 0); + + + for (var y=0; y= this.gameWidth) { - this.gameWidth = wall.x+1; - } - if (wall.y >= this.gameHeight) { - this.gameHeight = wall.y+1; - } - }, this); this.respawnX = Math.ceil(this.gameWidth/2)-1; this.respawnY = Math.ceil(this.gameHeight/2)-1; @@ -142,9 +140,6 @@ Play.prototype = { this.game.input.gamepad.start(); - this.game.input.keyboard.addKey(this.playerBControls.poison).onDown.add(this.togglePoisonPill.bind(this, this.playerB), this); - this.game.input.keyboard.addKey(this.playerAControls.poison).onDown.add(this.togglePoisonPill.bind(this, this.playerA), this); - this.game.input.keyboard.addKey(this.controls.reset).onDown.add(function() { this.game.state.start('play'); },this); @@ -179,40 +174,46 @@ Play.prototype = { this.playerPoisonPillCollision(pillCollisions[i].player, pillCollisions[i].pill); } }, - pollPlayerInput: function() { - if (this.game.input.gamepad.pad2.connected) { - this.pollAnalogStickForPlayer(this.game.input.gamepad.pad2, this.playerA); + playerPillCollision: function(player, pill) { + player.score += pill.score; + pill.destroy(); + player.scoreSound.play(); + }, + playerPoisonPillCollision: function(player, poisonPill) { + if (player.lastTween) { + player.lastTween.onComplete.add(player.teleport.bind(player, this.respawnX, this.respawnY), player); } - if (this.game.input.gamepad.pad1.connected) { - this.pollAnalogStickForPlayer(this.game.input.gamepad.pad1, this.playerB); + else { + player.teleport(this.respawnX, this.respawnY); } - if (this.game.input.keyboard.isDown(this.playerAControls.up)) { - this.movePlayer(this.playerA, 0, -1); - } - if (this.game.input.keyboard.isDown(this.playerAControls.down)) { - this.movePlayer(this.playerA, 0, 1); - } - if (this.game.input.keyboard.isDown(this.playerAControls.left)) { - this.movePlayer(this.playerA, -1, 0); - } - if (this.game.input.keyboard.isDown(this.playerAControls.right)) { - this.movePlayer(this.playerA, 1, 0); - } - if (this.game.input.keyboard.isDown(this.playerBControls.up)) { - this.movePlayer(this.playerB, 0, -1); + poisonPill.destroy(); + player.respawnSound.play(); + }, + playerPlayerCollision: function(playerA, playerB) { + var eatenPlayer = playerA.isMyTurn ? playerB : playerA; + + if (eatenPlayer.lastTween) { + eatenPlayer.lastTween.onComplete.add(eatenPlayer.teleport.bind(eatenPlayer, this.respawnX, this.respawnY), eatenPlayer); } - if (this.game.input.keyboard.isDown(this.playerBControls.down)) { - this.movePlayer(this.playerB, 0, 1); + else { + eatenPlayer.teleport(this.respawnX, this.respawnY); } - if (this.game.input.keyboard.isDown(this.playerBControls.left)) { - this.movePlayer(this.playerB, -1, 0); + eatenPlayer.canBeEaten = false; + eatenPlayer.respawnSound.play(); + }, + pollPlayerInput: function() { + if (this.game.input.gamepad.pad2.connected) { + this.pollGamepadForPlayer(this.game.input.gamepad.pad2, this.playerA); } - if (this.game.input.keyboard.isDown(this.playerBControls.right)) { - this.movePlayer(this.playerB, 1, 0); + if (this.game.input.gamepad.pad1.connected) { + this.pollGamepadForPlayer(this.game.input.gamepad.pad1, this.playerB); } + + this.pollKeyboardForPlayer(this.playerAControls, this.playerA); + this.pollKeyboardForPlayer(this.playerBControls, this.playerB); }, - pollAnalogStickForPlayer: function(pad, player) { + pollGamepadForPlayer: function(pad, player) { if (pad.isDown(Phaser.Gamepad.XBOX360_DPAD_LEFT) || pad.axis(Phaser.Gamepad.XBOX360_STICK_LEFT_X) < -0.2) { this.movePlayer(player, -1, 0); } @@ -232,35 +233,46 @@ Play.prototype = { this.togglePoisonPill(player); } }, - + pollKeyboardForPlayer: function(controls, player) { + if (this.game.input.keyboard.isDown(controls.up)) { + this.movePlayer(player, 0, -1); + } + if (this.game.input.keyboard.isDown(controls.down)) { + this.movePlayer(player, 0, 1); + } + if (this.game.input.keyboard.isDown(controls.left)) { + this.movePlayer(player, -1, 0); + } + if (this.game.input.keyboard.isDown(controls.right)) { + this.movePlayer(player, 1, 0); + } + + var poisonKey = this.game.input.keyboard.addKey(controls.poison); + if (poisonKey.isDown && player.keyboardPoisonLastPressed < poisonKey.timeDown) { + player.keyboardPoisonLastPressed = poisonKey.timeDown; + this.togglePoisonPill(player); + } + }, togglePoisonPill: function(player) { if (player.hasPoisonPill) { player.poisonPillActive = !player.poisonPillActive; } }, - moveActivePlayer: function(deltaX, deltaY) { - var activePlayer = null; - for (var i=0; i1.1 || Math.abs(this.respawnY-player.y)>1.1); + var placePoisonPill = player.hasPoisonPill && player.poisonPillActive && + (Math.abs(this.respawnX-player.x)>1.1 || Math.abs(this.respawnY-player.y)>1.1); //cannot move into walls, when it isn't your turn, or when you're already moving if (this.map.checkMap(newX, newY) || !player.isMyTurn || player.moving) { return; } + //special rules about moving around respawn area if (Math.abs(newX-this.respawnX)<=1 && Math.abs(newY-this.respawnY)<=1) { - //cannot move into respawn area + //cannot move into respawn area (only outwards) if (Math.abs(newX-this.respawnX) this.playerB.score) { - this.setVictoryText('RED WINS', 'a'); + this.createVictoryText('RED WINS', 'a'); } else if (this.playerA.score < this.playerB.score) { - this.setVictoryText('YELLOW WINS', 'b'); + this.createVictoryText('YELLOW WINS', 'b'); } else { var victoryColor = this.playerA.isMyTurn ? 'b' : 'a'; - this.setVictoryText('DRAW', victoryColor); + this.createVictoryText('DRAW', victoryColor); } }, - setVictoryText: function(newText, winnerLetter) { + createVictoryText: function(newText, winnerLetter) { this.victoryText = this.game.add.bitmapText(this.world.width/2/this.world.scale.x, 2, 'scorefont-'+winnerLetter, newText, 2); this.victoryText.position.x = (this.world.width/this.world.scale.x)/2 - 8 - this.victoryText.textWidth/2 - 0.5; }, shutdown: function() { - this.game.input.keyboard.removeKey(this.playerAControls.up); - this.game.input.keyboard.removeKey(this.playerAControls.down); - this.game.input.keyboard.removeKey(this.playerAControls.left); - this.game.input.keyboard.removeKey(this.playerAControls.right); - this.game.input.keyboard.removeKey(this.playerAControls.poison); - - this.game.input.keyboard.removeKey(this.playerBControls.up); - this.game.input.keyboard.removeKey(this.playerBControls.down); - this.game.input.keyboard.removeKey(this.playerBControls.left); - this.game.input.keyboard.removeKey(this.playerBControls.right); - this.game.input.keyboard.removeKey(this.playerBControls.poison); - - this.game.input.keyboard.removeKey(this.controls.reset); + function removeKeyCaptures(controls, keyboard) { + for (var index in controls) { + if (controls.hasOwnProperty(index)) { + keyboard.removeKey(controls[index]); + } + } + } + removeKeyCaptures(this.playerAControls, this.game.input.keyboard); + removeKeyCaptures(this.playerBControls, this.game.input.keyboard); + removeKeyCaptures(this.controls, this.game.input.keyboard); } }; -- cgit v1.2.3