diff --git a/app/Game/Client/Control/PlayerController.js b/app/Game/Client/Control/PlayerController.js index 51a149f..6b86e15 100755 --- a/app/Game/Client/Control/PlayerController.js +++ b/app/Game/Client/Control/PlayerController.js @@ -14,8 +14,10 @@ function (Parent, KeyboardInput, MouseInput, Nc) { this.keyboardInput = new KeyboardInput(this); this.xyInput = new MouseInput(this); - Nc.on(Nc.ns.client.input.xy.change, this.setXY, this); - Nc.on(Nc.ns.client.input.handAction.request, this.handActionRequest, this); + this.ncTokens = [ + Nc.on(Nc.ns.client.input.xy.change, this.setXY, this), + Nc.on(Nc.ns.client.input.handAction.request, this.handActionRequest, this) + ]; var keys = { w:87, @@ -118,6 +120,11 @@ function (Parent, KeyboardInput, MouseInput, Nc) { Nc.trigger(Nc.ns.client.game.gameInfo.toggle, false); }; + PlayerController.prototype.destroy = function() { + Nc.offAll(this.ncTokens); + Parent.prototype.destroy.call(this); + }; + return PlayerController; }); \ No newline at end of file diff --git a/app/Game/Client/GameController.js b/app/Game/Client/GameController.js index c762350..ee89f89 100755 --- a/app/Game/Client/GameController.js +++ b/app/Game/Client/GameController.js @@ -265,8 +265,7 @@ function (Parent, Box2D, PhysicsEngine, ViewManager, PlayerController, Nc, reque Parent.prototype.destroy.call(this); - this.view.render(); - this.view.test(); + this.view.destroy(); }; return GameController; diff --git a/app/Game/Client/View/Views/AbstractView.js b/app/Game/Client/View/Views/AbstractView.js index a8327d1..e031c43 100755 --- a/app/Game/Client/View/Views/AbstractView.js +++ b/app/Game/Client/View/Views/AbstractView.js @@ -12,21 +12,24 @@ function (DomController, Settings, Exception, Nc) { this.canvas = null; this.debugMode = false; - Nc.on(Nc.ns.client.view.mesh.create, this.createMesh, this); - Nc.on(Nc.ns.client.view.animatedMesh.create, this.createAnimatedMesh, this); - Nc.on(Nc.ns.client.view.mesh.add, this.addMesh, this); - Nc.on(Nc.ns.client.view.mesh.remove, this.removeMesh, this); - Nc.on(Nc.ns.client.view.mesh.update, this.updateMesh, this); + this.ncTokens = [ + Nc.on(Nc.ns.client.view.mesh.create, this.createMesh, this), + Nc.on(Nc.ns.client.view.animatedMesh.create, this.createAnimatedMesh, this), + Nc.on(Nc.ns.client.view.mesh.add, this.addMesh, this), + Nc.on(Nc.ns.client.view.mesh.remove, this.removeMesh, this), + Nc.on(Nc.ns.client.view.mesh.update, this.updateMesh, this), - Nc.on(Nc.ns.client.view.fullscreen.change, this.onFullscreenChange, this); - Nc.on(Nc.ns.client.view.debugMode.toggle, this.onToggleDebugMode, this); + Nc.on(Nc.ns.client.view.fullscreen.change, this.onFullscreenChange, this), + Nc.on(Nc.ns.client.view.debugMode.toggle, this.onToggleDebugMode, this), - Nc.on(Nc.ns.client.view.playerInfo.createAndAdd, this.onCreateAndAddPlayerInfo, this); - Nc.on(Nc.ns.client.view.playerInfo.update, this.onUpdatePlayerInfo, this); - Nc.on(Nc.ns.client.view.playerInfo.remove, this.onRemovePlayerInfo, this); + Nc.on(Nc.ns.client.view.playerInfo.createAndAdd, this.onCreateAndAddPlayerInfo, this), + Nc.on(Nc.ns.client.view.playerInfo.update, this.onUpdatePlayerInfo, this), + Nc.on(Nc.ns.client.view.playerInfo.remove, this.onRemovePlayerInfo, this), + Nc.on(Nc.ns.client.view.preloadBar.update, this.onUpdateLoader, this), + ]; - Nc.on(Nc.ns.client.view.preloadBar.update, this.onUpdateLoader, this); + } AbstractView.prototype.isWebGlEnabled = function () { @@ -152,5 +155,11 @@ function (DomController, Settings, Exception, Nc) { throw new Exception('Abstract Function onUpdateLoader not overwritten'); }; + AbstractView.prototype.destroy = function() { + for (var i = 0; i < this.ncTokens.length; i++) { + Nc.off(this.ncTokens[i]); + }; + }; + return AbstractView; }); \ No newline at end of file diff --git a/app/Game/Client/View/Views/PixiView.js b/app/Game/Client/View/Views/PixiView.js index 27439f0..4cd8765 100755 --- a/app/Game/Client/View/Views/PixiView.js +++ b/app/Game/Client/View/Views/PixiView.js @@ -42,7 +42,7 @@ function (Parent, DomController, PIXI, Settings, Nc) { console.log('CanvasRenderer - not using WebGL!') } - this.stage = new PIXI.Stage(/*0x333333*/); + this.stage = new PIXI.Stage(0x333333); this.initCamera(); this.initInfo(); @@ -305,8 +305,15 @@ function (Parent, DomController, PIXI, Settings, Nc) { this.loader.visible = progress < 100; }; - PixiView.prototype.test = function() { - console.log(this.stage.children) + PixiView.prototype.destroy = function() { + + for (var i = 0; i < this.stage.children.length; i++) { + this.stage.removeChild(this.stage.children[i]); + } + + this.renderer.render(this.stage); + + Parent.prototype.destroy.call(this); }; return PixiView; diff --git a/app/Game/Core/Control/PlayerController.js b/app/Game/Core/Control/PlayerController.js index 9f3d208..97189cb 100755 --- a/app/Game/Core/Control/PlayerController.js +++ b/app/Game/Core/Control/PlayerController.js @@ -43,5 +43,9 @@ define(function () { } } + PlayerController.prototype.destroy = function() { + // extend if necessary + }; + return PlayerController; }); \ No newline at end of file diff --git a/app/Game/Core/Physics/Engine.js b/app/Game/Core/Physics/Engine.js index 911fc1b..8eeb92c 100755 --- a/app/Game/Core/Physics/Engine.js +++ b/app/Game/Core/Physics/Engine.js @@ -17,7 +17,9 @@ function (Settings, Box2D, CollisionDetector, Nc) { this.lastStep = Date.now(); this.worldQueue = []; - Nc.on(Nc.ns.channel.engine.worldQueue.add, this.addToWorldQueue, this); + this.ncTokens = [ + Nc.on(Nc.ns.channel.engine.worldQueue.add, this.addToWorldQueue, this) + ]; } Engine.prototype.getWorld = function () { @@ -62,6 +64,7 @@ function (Settings, Box2D, CollisionDetector, Nc) { Engine.prototype.destroy = function() { delete this.world; + Nc.offAll(this.ncTokens); }; diff --git a/app/Game/Core/Player.js b/app/Game/Core/Player.js index 6e52474..f16c644 100755 --- a/app/Game/Core/Player.js +++ b/app/Game/Core/Player.js @@ -146,6 +146,8 @@ function (Doll, Settings, Nc, Exception, SpectatorDoll, RagDoll) { this.spectatorDoll.destroy(); if(this.doll) this.doll.destroy(); + + this.playerController.destroy(); } Player.prototype.setPlayerController = function(playerController) { diff --git a/app/Lib/Utilities/NotificationCenter.js b/app/Lib/Utilities/NotificationCenter.js index 343321b..e6edd6d 100755 --- a/app/Lib/Utilities/NotificationCenter.js +++ b/app/Lib/Utilities/NotificationCenter.js @@ -224,5 +224,12 @@ function (Exception) { } } + NotificationCenter.prototype.offAll = function (tokens) { + for (var i = 0; i < tokens.length; i++) { + this.off(tokens[i]); + }; + } + + return new NotificationCenter(); // making it singletone }); \ No newline at end of file