diff --git a/app/Game/Client/Loader/Level.js b/app/Game/Client/Loader/Level.js index fc4e28a..a17da02 100755 --- a/app/Game/Client/Loader/Level.js +++ b/app/Game/Client/Loader/Level.js @@ -89,19 +89,22 @@ function (Parent, Settings, Nc, PIXI, AbstractLayer) { }; Level.prototype.createItems = function(options) { - - var layerName = AbstractLayer.ID.ITEM; - Nc.trigger(Nc.ns.client.view.layer.createAndAdd, layerName); - options.layer = layerName; + options.layer = AbstractLayer.ID.ITEM; + Nc.trigger(Nc.ns.client.view.layer.createAndInsert, options.layer, 1, AbstractLayer.ID.SPAWN, true); Parent.prototype.createItems.call(this, options); }; Level.prototype.createTiles = function(options) { - - var layerName = AbstractLayer.ID.TILE; - Nc.trigger(Nc.ns.client.view.layer.createAndAdd, layerName); - options.layer = layerName; + options.layerId = AbstractLayer.ID.TILE; + Nc.trigger(Nc.ns.client.view.layer.createAndInsert, options.layerId, 1, AbstractLayer.ID.SPAWN, true); + + Parent.prototype.createTiles.call(this, options); + }; + + Level.prototype.createSpawnPoints = function(options) { + options.layerId = AbstractLayer.ID.SPAWN; + Nc.trigger(Nc.ns.client.view.layer.createAndInsert, options.layerId, 1); Parent.prototype.createTiles.call(this, options); }; diff --git a/app/Game/Client/View/Abstract/View.js b/app/Game/Client/View/Abstract/View.js index cac8550..3e4a2e4 100755 --- a/app/Game/Client/View/Abstract/View.js +++ b/app/Game/Client/View/Abstract/View.js @@ -14,8 +14,6 @@ function (Abstract, DomController, Settings, Exception, Nc) { this.debugMode = false; this.ncTokens = [ - Nc.on(Nc.ns.client.view.layer.createAndAdd, this.createAndAddLayer, this), - Nc.on(Nc.ns.client.view.fullscreen.change, this.onFullscreenChange, this), Nc.on(Nc.ns.client.view.debugMode.toggle, this.onToggleDebugMode, this), diff --git a/app/Game/Client/View/LayerManager.js b/app/Game/Client/View/LayerManager.js index 2fb125c..0e86852 100644 --- a/app/Game/Client/View/LayerManager.js +++ b/app/Game/Client/View/LayerManager.js @@ -1,11 +1,17 @@ define([ - "Lib/Utilities/NotificationCenter" + "Lib/Utilities/NotificationCenter", + "Lib/Utilities/Exception", + "Game/Client/View/Pixi/Layer" ], -function (Nc) { +function (Nc, Exception, Layer) { - function LayerManager() { + function LayerManager(stage) { + this.layers = []; + this.stage = stage; + this.ncTokens = [ + Nc.on(Nc.ns.client.view.layer.createAndInsert, this.createAndInsert, this), 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), @@ -39,7 +45,7 @@ function (Nc) { var layer = new Layer(id, parallaxSpeed); - var layerIndex = behind ? referenceIndex : referenceIndex + 1; + var layerIndex = behind ? referenceIndex -1 : referenceIndex; this.layers.splice(layerIndex, 0, layer); this.stage.addChildAt(layer.getContainer(), layerIndex); @@ -57,37 +63,43 @@ function (Nc) { LayerManager.prototype.delegate = function(methodName, layerId) { var layer = this.getLayerById(layerId); - var args = arguments.splice(0,2); + var args = Array.prototype.splice.call(arguments, 0, 2); layer[methodName].apply(layer, args); }; LayerManager.prototype.createMesh = function() { - this.delegate(arguments.splice(0,0,'createMesh')); + this.delegate(Array.prototype.splice.call(arguments, 0, 0, 'createMesh')); }; LayerManager.prototype.createAnimatedMesh = function() { - this.delegate(arguments.splice(0,0,'createAnimatedMesh')); + this.delegate(Array.prototype.splice.call(arguments, 0, 0, 'createAnimatedMesh')); }; LayerManager.prototype.addMesh = function() { - this.delegate(arguments.splice(0,0,'addMesh')); + this.delegate(Array.prototype.splice.call(arguments, 0, 0, 'addMesh')); }; LayerManager.prototype.removeMesh = function() { - this.delegate(arguments.splice(0,0,'removeMesh')); + this.delegate(Array.prototype.splice.call(arguments, 0, 0, 'removeMesh')); }; LayerManager.prototype.updateMesh = function() { - this.delegate(arguments.splice(0,0,'updateMesh')); + this.delegate(Array.prototype.splice.call(arguments, 0, 0, 'updateMesh')); }; LayerManager.prototype.addFilter = function() { - this.delegate(arguments.splice(0,0,'addFilter')); + this.delegate(Array.prototype.splice.call(arguments, 0, 0, 'addFilter')); }; LayerManager.prototype.removeFilter = function() { - this.delegate(arguments.splice(0,0,'removeFilter')); + this.delegate(Array.prototype.splice.call(arguments, 0, 0, 'removeFilter')); + }; + + LayerManager.prototype.destroy = function() { + for (var i = 0; i < this.ncTokens.length; i++) { + Nc.off(this.ncTokens[i]); + }; }; return LayerManager; diff --git a/app/Game/Client/View/Pixi/Layer.js b/app/Game/Client/View/Pixi/Layer.js index a506356..e416ebb 100644 --- a/app/Game/Client/View/Pixi/Layer.js +++ b/app/Game/Client/View/Pixi/Layer.js @@ -13,15 +13,15 @@ function (Parent, PIXI) { Layer.prototype = Object.create(Parent.prototype); Layer.prototype.getContainer = function() { - return this.contianer; + return this.container; }; Layer.prototype.show = function() { - this.contianer.visible = true; + this.container.visible = true; }; Layer.prototype.hide = function() { - this.contianer.visible = false; + this.container.visible = false; }; Layer.prototype.addMesh = function(mesh) { diff --git a/app/Game/Client/View/Pixi/View.js b/app/Game/Client/View/Pixi/View.js index fffbd62..466db45 100755 --- a/app/Game/Client/View/Pixi/View.js +++ b/app/Game/Client/View/Pixi/View.js @@ -7,10 +7,10 @@ define([ "Lib/Utilities/NotificationCenter", "Lib/Utilities/Exception", "Game/Client/View/Pixi/GameStats", - "Game/Client/View/Pixi/Layer" + "Game/Client/View/LayerManager", ], -function (Parent, DomController, PIXI, ColorRangeReplaceFilter, Settings, Nc, Exception, GameStats, Layer) { +function (Parent, DomController, PIXI, ColorRangeReplaceFilter, Settings, Nc, Exception, GameStats, LayerManager) { var AVAILABLE_MESH_FILTERS = { "blur": PIXI.BlurFilter, @@ -23,6 +23,7 @@ function (Parent, DomController, PIXI, ColorRangeReplaceFilter, Settings, Nc, Ex Parent.call(this); + this.layerManager = null; this.movableObjects = []; this.stage = null; this.container = null; @@ -33,7 +34,6 @@ function (Parent, DomController, PIXI, ColorRangeReplaceFilter, Settings, Nc, Ex this.init(); this.pixi = PIXI; this.currentZoom = Settings.ZOOM_DEFAULT; - this.layers = []; PIXI.scaleModes.DEFAULT = PIXI.scaleModes.NEAREST; } @@ -56,6 +56,8 @@ function (Parent, DomController, PIXI, ColorRangeReplaceFilter, Settings, Nc, Ex this.stage = new PIXI.Stage(0x333333); + this.layerManager = new LayerManager(this.stage); + this.initCamera(); this.initLoader(); @@ -283,6 +285,8 @@ function (Parent, DomController, PIXI, ColorRangeReplaceFilter, Settings, Nc, Ex }; PixiView.prototype.destroy = function() { + + this.layerManager.destroy(); for (var i = 0; i < this.stage.children.length; i++) { this.stage.removeChild(this.stage.children[i]); diff --git a/app/Game/Core/Loader/TiledLevel.js b/app/Game/Core/Loader/TiledLevel.js index 7471f71..3033dab 100755 --- a/app/Game/Core/Loader/TiledLevel.js +++ b/app/Game/Core/Loader/TiledLevel.js @@ -31,8 +31,14 @@ define([ TiledLevel.prototype.setup = function(levelData) { this.levelData = levelData; - for (var i = 0; i < levelData.layers.length; i++) { - var layerOptions = levelData.layers[i]; + + // Make sure spawnpoints layer is created first + var layers = levelData.layers.sort(function(a, b) { + return a.name == "spawnpoints" ? -1 : b.name == "spawnpoints" ? 1 : 0; + }); + + for (var i = 0; i < layers.length; i++) { + var layerOptions = layers[i]; layerOptions.z = i; if(this.layerMapping[layerOptions.name]) { diff --git a/app/Lib/Utilities/NotificationCenter.js b/app/Lib/Utilities/NotificationCenter.js index 8afe2dd..d3d8a6e 100755 --- a/app/Lib/Utilities/NotificationCenter.js +++ b/app/Lib/Utilities/NotificationCenter.js @@ -26,7 +26,7 @@ function (Exception) { client: { view: { layer: { - createAndAdd: null + createAndInsert: null }, mesh: { create: null,