From 3a5af058ef59f19e6759c7fc0aecfbf38c94d5d7 Mon Sep 17 00:00:00 2001 From: logsol Date: Sat, 1 Oct 2016 19:12:52 +0200 Subject: [PATCH] Prevents adding damage after round has ended Because it created double round endings, which led to crashes. Also moved inBetweenRound state from PlayerController to GameController. --- app/Game/Channel/GameController.js | 10 +++++++++- app/Game/Channel/Player.js | 11 ++++++++--- app/Game/Client/Player.js | 4 ++-- app/Game/Core/Control/PlayerController.js | 15 +++++---------- app/Game/Core/GameController.js | 7 ++----- app/Game/Core/GameObjects/Items/RubeDoll.js | 5 ++--- app/Game/Core/Player.js | 10 ++++++++-- 7 files changed, 36 insertions(+), 26 deletions(-) diff --git a/app/Game/Channel/GameController.js b/app/Game/Channel/GameController.js index c41897a..69f04dd 100755 --- a/app/Game/Channel/GameController.js +++ b/app/Game/Channel/GameController.js @@ -60,7 +60,11 @@ function (Parent, PhysicsEngine, Settings, requestAnimFrame, Nc, Box2D, Player, } GameController.prototype.createPlayer = function(user) { - var player = Parent.prototype.createPlayer.call(this, user); + + var revealedGameController = { + isInBetweenRounds: this.isInBetweenRounds.bind(this) + }; + var player = Parent.prototype.createPlayer.call(this, user, revealedGameController); user.setPlayer(player); }; @@ -232,6 +236,10 @@ function (Parent, PhysicsEngine, Settings, requestAnimFrame, Nc, Box2D, Player, } }; + GameController.prototype.isInBetweenRounds = function() { + return this.roundHasEnded; + }; + // FIXME: remove this method GameController.prototype.onResetLevel = function(userId) { diff --git a/app/Game/Channel/Player.js b/app/Game/Channel/Player.js index 6f3771c..e4f5846 100755 --- a/app/Game/Channel/Player.js +++ b/app/Game/Channel/Player.js @@ -8,8 +8,8 @@ function (Parent, Nc, PlayerController) { "use strict"; - function Player(id, physicsEngine, user) { - Parent.call(this, id, physicsEngine, user); + function Player(id, physicsEngine, user, revealedGameController) { + Parent.call(this, id, physicsEngine, user, revealedGameController); this.playerController = new PlayerController(this); } @@ -64,6 +64,12 @@ function (Parent, Nc, PlayerController) { }; Player.prototype.addDamage = function(damage, enemy, byItem) { + + // Prevent stats change (kills) after round has ended + if (this.revealedGameController.isInBetweenRounds()) { + return; + } + this.stats.health -= damage; if(this.stats.health < 0) this.stats.health = 0; @@ -118,7 +124,6 @@ function (Parent, Nc, PlayerController) { }); } }; - return Player; diff --git a/app/Game/Client/Player.js b/app/Game/Client/Player.js index 0af2d58..25d19c5 100755 --- a/app/Game/Client/Player.js +++ b/app/Game/Client/Player.js @@ -16,9 +16,9 @@ function (Parent, Nc, Settings) { this.healthBarViewVisible = false; this.initHealthBar(); - this.ncTokens = [ + this.ncTokens = (this.ncTokens || []).concat([ Nc.on(Nc.ns.client.game.events.render, this.render, this) - ]; + ]); } Player.prototype = Object.create(Parent.prototype); diff --git a/app/Game/Core/Control/PlayerController.js b/app/Game/Core/Control/PlayerController.js index 9286f4c..62b09db 100755 --- a/app/Game/Core/Control/PlayerController.js +++ b/app/Game/Core/Control/PlayerController.js @@ -10,8 +10,6 @@ function () { this._shift; this._isJumping; this._walkingDirectionStatus = 0; - - this.inBetweenRounds = false; } PlayerController.prototype.moveLeft = function () { @@ -46,20 +44,17 @@ function () { if(options) this.player.lookAt(options.x, options.y); } - PlayerController.prototype.setInBetweenRounds = function(inBetweenRounds) { - this.inBetweenRounds = !!inBetweenRounds; - }; - - PlayerController.prototype.isPlayerInputAllowed = function() { - return !this.inBetweenRounds; - }; - PlayerController.prototype.update = function () { if(this._walkingDirectionStatus != 0) { this.player.move(this._walkingDirectionStatus); } } + // Default behaviour - may be needed later? + PlayerController.prototype.isPlayerInputAllowed = function() { + return true; + }; + PlayerController.prototype.destroy = function() { // extend if necessary }; diff --git a/app/Game/Core/GameController.js b/app/Game/Core/GameController.js index 6210320..0450c42 100755 --- a/app/Game/Core/GameController.js +++ b/app/Game/Core/GameController.js @@ -111,8 +111,8 @@ function (PhysicsEngine, TiledLevel, Player, Nc, Doll, GameObject, Item, Assert) delete this.players[userId]; }; - GameController.prototype.createPlayer = function(user) { - var player = new Player(user.id, this.physicsEngine, user); + GameController.prototype.createPlayer = function(user, revealedGameController) { + var player = new Player(user.id, this.physicsEngine, user, revealedGameController); this.players[user.id] = player; return player; }; @@ -132,8 +132,6 @@ function (PhysicsEngine, TiledLevel, Player, Nc, Doll, GameObject, Item, Assert) }; GameController.prototype.destroy = function () { - var i = 0; - for(var player in this.players) { this.players[player].destroy(); } @@ -150,7 +148,6 @@ function (PhysicsEngine, TiledLevel, Player, Nc, Doll, GameObject, Item, Assert) this.worldUpdateObjects = null; Nc.off(this.ncTokens); - }; return GameController; diff --git a/app/Game/Core/GameObjects/Items/RubeDoll.js b/app/Game/Core/GameObjects/Items/RubeDoll.js index 33a54ab..ba1f9cf 100644 --- a/app/Game/Core/GameObjects/Items/RubeDoll.js +++ b/app/Game/Core/GameObjects/Items/RubeDoll.js @@ -23,13 +23,12 @@ function (Parent, RubeLoader, Box2D, Settings, Assert, Nc, Matrix, RubeDollJson) this.limits = []; var chest = null; - var world = physicsEngine.getWorld(); - this.rubeLoader = new RubeLoader(RubeDollJson, world); + this.rubeLoader = new RubeLoader(RubeDollJson, physicsEngine.getWorldForRubeLoader()); this.loadRubeDollFromScene(options); Parent.call(this, physicsEngine, uid, options); - world.DestroyBody(this.body); + physicsEngine.destroyBody(this.body); this.body = this.limbs.chest; delete this.limbs.chest; diff --git a/app/Game/Core/Player.js b/app/Game/Core/Player.js index 49f3d28..9e73e4d 100755 --- a/app/Game/Core/Player.js +++ b/app/Game/Core/Player.js @@ -13,7 +13,7 @@ function (Doll, PlayerController, Settings, Nc, Exception, ColorConverter, Spect "use strict"; - function Player (id, physicsEngine, user) { + function Player (id, physicsEngine, user, revealedGameController) { this.stats = { health: 100, deaths: 0, @@ -27,7 +27,9 @@ function (Doll, PlayerController, Settings, Nc, Exception, ColorConverter, Spect this.id = id; this.spawned = false; this.holdingItem = null; + this.inBetweenRounds = true; this.spectatorDoll = new SpectatorDoll(this.physicsEngine, "spectatorDoll-" + this.id, this); + this.revealedGameController = revealedGameController; } Player.prototype.getNickname = function() { @@ -185,7 +187,11 @@ function (Doll, PlayerController, Settings, Nc, Exception, ColorConverter, Spect } Player.prototype.setInBetweenRounds = function(inBetweenRounds) { - return this.playerController.setInBetweenRounds(inBetweenRounds); + this.inBetweenRounds = inBetweenRounds; + }; + + Player.prototype.isInBetweenRounds = function() { + return this.inBetweenRounds; }; return Player;