Skip to content

Commit b0888d2

Browse files
committed
Added renderOrder property, setRenderOrder and apply them during layer creation.
1 parent a7847e9 commit b0888d2

1 file changed

Lines changed: 75 additions & 2 deletions

File tree

src/tilemaps/Tilemap.js

Lines changed: 75 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,24 @@ var Tilemap = new Class({
122122
*/
123123
this.orientation = mapData.orientation;
124124

125+
/**
126+
* The render (draw) order of the map data (as specified in Tiled), usually 'right-down'.
127+
*
128+
* The draw orders are:
129+
*
130+
* right-down
131+
* left-down
132+
* right-up
133+
* left-up
134+
*
135+
* This can be changed via the `setRenderOrder` method.
136+
*
137+
* @name Phaser.Tilemaps.Tilemap#renderOrder
138+
* @type {string}
139+
* @since 3.12.0
140+
*/
141+
this.renderOrder = mapData.renderOrder;
142+
125143
/**
126144
* The format of the map data.
127145
*
@@ -221,6 +239,52 @@ var Tilemap = new Class({
221239
this.currentLayerIndex = 0;
222240
},
223241

242+
/**
243+
* Sets the rendering (draw) order of the tiles in this map.
244+
*
245+
* The default is 'right-down', meaning it will order the tiles starting from the top-left,
246+
* drawing to the right and then moving down to the next row.
247+
*
248+
* The draw orders are:
249+
*
250+
* 0 = right-down
251+
* 1 = left-down
252+
* 2 = right-up
253+
* 3 = left-up
254+
*
255+
* Setting the render order does not change the tiles or how they are stored in the layer,
256+
* it purely impacts the order in which they are rendered.
257+
*
258+
* You can provide either an integer (0 to 3), or the string version of the order.
259+
*
260+
* Calling this method _after_ creating Static or Dynamic Tilemap Layers will **not** automatically
261+
* update them to use the new render order. If you call this method after creating layers, use their
262+
* own `setRenderOrder` methods to change them as needed.
263+
*
264+
* @method Phaser.Tilemaps.Tilemap#setRenderOrder
265+
* @since 3.12.0
266+
*
267+
* @param {(integer|string)} renderOrder - The render (draw) order value. Either an integer between 0 and 3, or a string: 'right-down', 'left-down', 'right-up' or 'left-up'.
268+
*
269+
* @return {this} This Tilemap object.
270+
*/
271+
setRenderOrder: function (renderOrder)
272+
{
273+
var orders = [ 'right-down', 'left-down', 'right-up', 'left-up' ];
274+
275+
if (typeof renderOrder === 'number')
276+
{
277+
renderOrder = orders[renderOrder];
278+
}
279+
280+
if (orders.indexOf(renderOrder) > -1)
281+
{
282+
this.renderOrder = renderOrder;
283+
}
284+
285+
return this;
286+
},
287+
224288
/**
225289
* Adds an image to the map to be used as a tileset. A single map may use multiple tilesets.
226290
* Note that the tileset name can be found in the JSON file exported from Tiled, or in the Tiled
@@ -427,6 +491,9 @@ var Tilemap = new Class({
427491
this.currentLayerIndex = this.layers.length - 1;
428492

429493
var dynamicLayer = new DynamicTilemapLayer(this.scene, this, this.currentLayerIndex, tileset, x, y);
494+
495+
dynamicLayer.setRenderOrder(this.renderOrder);
496+
430497
this.scene.sys.displayList.add(dynamicLayer);
431498

432499
return dynamicLayer;
@@ -462,7 +529,7 @@ var Tilemap = new Class({
462529

463530
if (index === null)
464531
{
465-
console.warn('Cannot create tilemap layer, invalid layer ID given: ' + layerID);
532+
console.warn('Cannot create Tilemap Layer, invalid ID: ' + layerID);
466533
return null;
467534
}
468535

@@ -471,7 +538,7 @@ var Tilemap = new Class({
471538
// Check for an associated static or dynamic tilemap layer
472539
if (layerData.tilemapLayer)
473540
{
474-
console.warn('Cannot create dynamic tilemap layer since a static or dynamic tilemap layer exists for layer ID:' + layerID);
541+
console.warn('Cannot create Tilemap Layer. ID: ' + layerID + ' already in use');
475542
return null;
476543
}
477544

@@ -490,6 +557,9 @@ var Tilemap = new Class({
490557
if (y === undefined && this.layers[index].y) { y = this.layers[index].y; }
491558

492559
var layer = new DynamicTilemapLayer(this.scene, this, index, tileset, x, y);
560+
561+
layer.setRenderOrder(this.renderOrder);
562+
493563
this.scene.sys.displayList.add(layer);
494564

495565
return layer;
@@ -687,6 +757,9 @@ var Tilemap = new Class({
687757
if (y === undefined && this.layers[index].y) { y = this.layers[index].y; }
688758

689759
var layer = new StaticTilemapLayer(this.scene, this, index, tileset, x, y);
760+
761+
layer.setRenderOrder(this.renderOrder);
762+
690763
this.scene.sys.displayList.add(layer);
691764

692765
return layer;

0 commit comments

Comments
 (0)