Skip to content

Commit f4a6888

Browse files
committed
Tilemap: add method for converting layer from dynamic to static
1 parent 0b4a087 commit f4a6888

3 files changed

Lines changed: 26 additions & 3 deletions

File tree

v3/src/gameobjects/tilemap/Tilemap.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,27 @@ var Tilemap = new Class({
276276
return layer;
277277
},
278278

279+
convertLayerToStatic: function (layer)
280+
{
281+
layer = this.getLayer(layer);
282+
if (layer === null) { return null; }
283+
284+
var dynamicLayer = layer.tilemapLayer;
285+
286+
if (!dynamicLayer || !(dynamicLayer instanceof DynamicTilemapLayer))
287+
{
288+
return null;
289+
}
290+
291+
var staticLayer = new StaticTilemapLayer(dynamicLayer.scene, dynamicLayer.map,
292+
dynamicLayer.layerIndex, dynamicLayer.tileset, dynamicLayer.x, dynamicLayer.y);
293+
this.scene.sys.displayList.add(staticLayer);
294+
295+
dynamicLayer.destroy();
296+
297+
return staticLayer;
298+
},
299+
279300
copy: function (srcTileX, srcTileY, width, height, destTileX, destTileY, recalculateFaces, layer)
280301
{
281302
layer = this.getLayer(layer);

v3/src/gameobjects/tilemap/dynamiclayer/DynamicTilemapLayer.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ var DynamicTilemapLayer = new Class({
7373

7474
destroy: function ()
7575
{
76-
this.layer.tilemapLayer = undefined;
76+
// Uninstall this layer only if it is still installed on the LayerData object
77+
if (this.layer.tilemapLayer === this) { this.layer.tilemapLayer = undefined; }
7778
this.map = undefined;
7879
this.layer = undefined;
7980
this.tileset = undefined;

v3/src/gameobjects/tilemap/staticlayer/StaticTilemapLayer.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ var StaticTilemapLayer = new Class({
3636
this.layer = tilemap.layers[layerIndex];
3737
this.tileset = tileset;
3838

39-
// Link the layer data with this dynamic tilemap layer
39+
// Link the layer data with this static tilemap layer
4040
this.layer.tilemapLayer = this;
4141

4242
this.vbo = null;
@@ -221,7 +221,8 @@ var StaticTilemapLayer = new Class({
221221

222222
destroy: function ()
223223
{
224-
this.layer.tilemapLayer = undefined;
224+
// Uninstall this layer only if it is still installed on the LayerData object
225+
if (this.layer.tilemapLayer === this) { this.layer.tilemapLayer = undefined; }
225226
this.map = undefined;
226227
this.layer = undefined;
227228
this.tileset = undefined;

0 commit comments

Comments
 (0)