Skip to content

Commit 84a86ae

Browse files
committed
Share GetTileAt across tilemap layers and tilemap
1 parent c3b31d7 commit 84a86ae

5 files changed

Lines changed: 89 additions & 14 deletions

File tree

v3/src/gameobjects/tilemap/Tilemap.js

Lines changed: 49 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var StaticTilemapLayer = require('./staticlayer/StaticTilemapLayer.js');
44
var DynamicTilemapLayer = require('./dynamiclayer/DynamicTilemapLayer.js');
55
var Tileset = require('./Tileset');
66
var Formats = require('./Formats');
7+
var TilemapComponents = require('./components');
78

89
var Tilemap = new Class({
910

@@ -34,11 +35,47 @@ var Tilemap = new Class({
3435
this.tilesets = mapData.tilesets;
3536
this.tiles = mapData.tiles;
3637
this.objects = mapData.objects;
38+
this.currentLayer = 0;
3739

3840
// TODO: collision, collideIndexes, imagecollections, images
3941
// TODO: debugging methods
4042
},
4143

44+
getLayer: function (layer)
45+
{
46+
var index = this.getLayerIndex(layer);
47+
return index !== null ? this.layers[index] : null;
48+
},
49+
50+
getLayerIndex: function (layer)
51+
{
52+
if (layer === undefined)
53+
{
54+
return this.currentLayer;
55+
}
56+
else if (typeof layer === 'string')
57+
{
58+
return this.getLayerIndexByName(layer);
59+
}
60+
else if (typeof layer === 'number' && layer < this.layers.length)
61+
{
62+
return layer;
63+
}
64+
else if (layer instanceof StaticTilemapLayer || layer instanceof DynamicTilemapLayer)
65+
{
66+
return layer.layerIndex;
67+
}
68+
else
69+
{
70+
return null;
71+
}
72+
},
73+
74+
getLayerIndexByName: function (name)
75+
{
76+
return this.getIndex(this.layers, name);
77+
},
78+
4279
getTilesetIndex: function (name)
4380
{
4481
return this.getIndex(this.tilesets, name);
@@ -108,14 +145,9 @@ var Tilemap = new Class({
108145

109146
createStaticLayer: function (layerID, tileset, x, y)
110147
{
111-
var index = layerID;
112-
113-
if (typeof layerID === 'string')
114-
{
115-
index = this.getLayerIndex(layer);
116-
}
148+
var index = this.getLayerIndex(layerID);
117149

118-
if (index === null || index > this.layers.length)
150+
if (index === null)
119151
{
120152
console.warn('Cannot create tilemap layer: invalid layer ID given: ' + index);
121153
return;
@@ -131,14 +163,9 @@ var Tilemap = new Class({
131163

132164
createDynamicLayer: function (layerID, tileset, x, y)
133165
{
134-
var index = layerID;
166+
var index = this.getLayerIndex(layerID);
135167

136-
if (typeof layer === 'string')
137-
{
138-
index = this.getLayerIndex(layer);
139-
}
140-
141-
if (index === null || index > this.layers.length)
168+
if (index === null)
142169
{
143170
console.warn('Cannot create tilemap layer: invalid layer ID given: ' + index);
144171
return;
@@ -150,6 +177,14 @@ var Tilemap = new Class({
150177
var layer = new DynamicTilemapLayer(this.scene, this, index, tileset, x, y);
151178
this.scene.sys.displayList.add(layer);
152179
return layer;
180+
},
181+
182+
getTileAt: function (x, y, layer, nonNull)
183+
{
184+
layer = this.getLayer(layer);
185+
if (layer === null) { return null; }
186+
187+
return TilemapComponents.GetTileAt(x, y, layer, nonNull);
153188
}
154189
});
155190

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var GetTileAt = function (x, y, layer, nonNull)
2+
{
3+
if (nonNull === undefined) { nonNull = false; }
4+
5+
if (x >= 0 && x < layer.width && y >= 0 && y < layer.height)
6+
{
7+
var tile = layer.data[y][x];
8+
if (tile.index === -1)
9+
{
10+
return nonNull ? tile : null;
11+
}
12+
else
13+
{
14+
return tile;
15+
}
16+
}
17+
else
18+
{
19+
return null;
20+
}
21+
};
22+
23+
module.exports = GetTileAt;
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = {
2+
3+
GetTileAt: require('./GetTileAt')
4+
5+
};

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var Class = require('../../../utils/Class');
22
var GameObject = require('../../GameObject');
33
var Components = require('../../components');
44
var DynamicTilemapLayerRender = require('./DynamicTilemapLayerRender');
5+
var TileComponents = require('../components');
56

67
var DynamicTilemapLayer = new Class({
78

@@ -93,6 +94,11 @@ var DynamicTilemapLayer = new Class({
9394
}
9495

9596
return culledTiles;
97+
},
98+
99+
getTileAt: function (x, y, nonNull)
100+
{
101+
return TileComponents.GetTileAt(x, y, this.layer, nonNull);
96102
}
97103

98104
// forEach: function (callback)

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ var GameObject = require('../../GameObject');
33
var Components = require('../../components');
44
var CONST = require('../../../renderer/webgl/renderers/tilemaprenderer/const');
55
var StaticTilemapLayerRender = require('./StaticTilemapLayerRender');
6+
var TileComponents = require('../components');
67

78
var StaticTilemapLayer = new Class({
89

@@ -266,6 +267,11 @@ var StaticTilemapLayer = new Class({
266267
this.cullStart = (interY * this.layer.width + interX) * 6;
267268
this.cullEnd = ((interY + interHeight) * this.layer.height + interX) * 6;
268269
}
270+
},
271+
272+
getTileAt: function (x, y, nonNull)
273+
{
274+
return TileComponents.GetTileAt(x, y, this.layer, nonNull);
269275
}
270276

271277
});

0 commit comments

Comments
 (0)