Skip to content

Commit 4c85ed6

Browse files
Merge remote-tracking branch 'origin/master'
2 parents 25bd381 + efae7f5 commit 4c85ed6

18 files changed

Lines changed: 422 additions & 66 deletions

v3/src/display/mask/BitmapMask.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,13 +122,15 @@ var BitmapMask = new Class({
122122

123123
// Inject main render target & reset it at post rendering.
124124
gameObject.renderTarget = this.mainRenderTarget;
125+
renderer.setBlendMode(0);
125126
}
126127

127128
},
128129

129130
postRenderWebGL: function (renderer, gameObject)
130131
{
131132
var maskRenderer = renderer.maskRenderer;
133+
var gl = renderer.gl;
132134

133135
// flush and reset
134136
renderer.currentRenderer.flush(null, this.mainRenderTarget);

v3/src/display/mask/GeometryMask.js

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,36 @@ var GeometryMask = new Class({
44

55
initialize:
66

7-
function GeometryMask(scene, geometry)
7+
function GeometryMask(scene, graphicsGeometry)
88
{
9-
this.geometry = geometry;
10-
this.shape = scene.create.graphics();
9+
this.geometryMask = graphicsGeometry;
1110
},
1211

13-
setShape: function (geometry)
12+
setShape: function (graphicsGeometry)
1413
{
15-
this.geometry = geometry;
14+
this.geometryMask = graphicsGeometry;
1615
},
1716

1817
preRenderWebGL: function (renderer, mask, camera)
1918
{
2019
var gl = renderer.gl;
20+
var geometryMask = this.geometryMask;
2121

22+
// Force flushing before drawing to stencil buffer
23+
renderer.currentRenderer.flush();
24+
25+
// Enable and setup GL state to write to stencil buffer
2226
gl.enable(gl.STENCIL_TEST);
2327
gl.clear(gl.STENCIL_BUFFER_BIT);
2428
gl.colorMask(false, false, false, false);
2529
gl.stencilFunc(gl.NOTEQUAL, 1, 1);
2630
gl.stencilOp(gl.REPLACE, gl.REPLACE, gl.REPLACE);
2731

32+
// Write stencil buffer
33+
geometryMask.renderWebGL(renderer, geometryMask, 0.0, camera);
34+
renderer.currentRenderer.flush();
2835

36+
// Use stencil buffer to affect next rendering object
2937
gl.colorMask(true, true, true, true);
3038
gl.stencilFunc(gl.EQUAL, 1, 1);
3139
gl.stencilOp(gl.INVERT, gl.INVERT, gl.INVERT);
@@ -35,6 +43,8 @@ var GeometryMask = new Class({
3543
{
3644
var gl = renderer.gl;
3745

46+
// Force flush before disabling stencil test
47+
renderer.currentRenderer.flush();
3848
gl.disable(gl.STENCIL_TEST);
3949
}
4050

v3/src/display/mask/webgl/StencilBufferRenderer.js

Lines changed: 0 additions & 26 deletions
This file was deleted.

v3/src/gameobjects/tilemap/Tilemap.js

Lines changed: 152 additions & 31 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,28 +35,12 @@ var Tilemap = new Class({
3435
this.tilesets = mapData.tilesets;
3536
this.tiles = mapData.tiles;
3637
this.objects = mapData.objects;
38+
this.currentLayerIndex = 0;
3739

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

42-
getTilesetIndex: function (name)
43-
{
44-
return this.getIndex(this.tilesets, name);
45-
},
46-
47-
getIndex: function (location, name)
48-
{
49-
for (var i = 0; i < location.length; i++)
50-
{
51-
if (location[i].name === name)
52-
{
53-
return i;
54-
}
55-
}
56-
return null;
57-
},
58-
5944
addTilesetImage: function (tilesetName, key, tileWidth, tileHeight, tileMargin, tileSpacing, gid)
6045
{
6146
if (tilesetName === undefined) { return null; }
@@ -108,14 +93,9 @@ var Tilemap = new Class({
10893

10994
createStaticLayer: function (layerID, tileset, x, y)
11095
{
111-
var index = layerID;
96+
var index = this.getLayerIndex(layerID);
11297

113-
if (typeof layerID === 'string')
114-
{
115-
index = this.getLayerIndex(layer);
116-
}
117-
118-
if (index === null || index > this.layers.length)
98+
if (index === null)
11999
{
120100
console.warn('Cannot create tilemap layer: invalid layer ID given: ' + index);
121101
return;
@@ -131,14 +111,9 @@ var Tilemap = new Class({
131111

132112
createDynamicLayer: function (layerID, tileset, x, y)
133113
{
134-
var index = layerID;
114+
var index = this.getLayerIndex(layerID);
135115

136-
if (typeof layer === 'string')
137-
{
138-
index = this.getLayerIndex(layer);
139-
}
140-
141-
if (index === null || index > this.layers.length)
116+
if (index === null)
142117
{
143118
console.warn('Cannot create tilemap layer: invalid layer ID given: ' + index);
144119
return;
@@ -150,7 +125,153 @@ var Tilemap = new Class({
150125
var layer = new DynamicTilemapLayer(this.scene, this, index, tileset, x, y);
151126
this.scene.sys.displayList.add(layer);
152127
return layer;
128+
},
129+
130+
copy: function (srcTileX, srcTileY, width, height, destTileX, destTileY, layer)
131+
{
132+
layer = this.getLayer(layer);
133+
if (layer !== null)
134+
{
135+
TilemapComponents.Copy(srcTileX, srcTileY, width, height, destTileX, destTileY, layer);
136+
}
137+
return this;
138+
},
139+
140+
fill: function (index, tileX, tileY, width, height, layer)
141+
{
142+
layer = this.getLayer(layer);
143+
if (layer !== null)
144+
{
145+
TilemapComponents.Fill(index, tileX, tileY, width, height, layer);
146+
}
147+
return this;
148+
},
149+
150+
forEachTile: function (callback, context, tileX, tileY, width, height, layer)
151+
{
152+
layer = this.getLayer(layer);
153+
if (layer !== null)
154+
{
155+
TilemapComponents.ForEachTile(callback, context, tileX, tileY, width, height, layer);
156+
}
157+
return this;
158+
},
159+
160+
getIndex: function (location, name)
161+
{
162+
for (var i = 0; i < location.length; i++)
163+
{
164+
if (location[i].name === name)
165+
{
166+
return i;
167+
}
168+
}
169+
return null;
170+
},
171+
172+
getLayer: function (layer)
173+
{
174+
var index = this.getLayerIndex(layer);
175+
return index !== null ? this.layers[index] : null;
176+
},
177+
178+
getLayerIndex: function (layer)
179+
{
180+
if (layer === undefined)
181+
{
182+
return this.currentLayerIndex;
183+
}
184+
else if (typeof layer === 'string')
185+
{
186+
return this.getLayerIndexByName(layer);
187+
}
188+
else if (typeof layer === 'number' && layer < this.layers.length)
189+
{
190+
return layer;
191+
}
192+
else if (layer instanceof StaticTilemapLayer || layer instanceof DynamicTilemapLayer)
193+
{
194+
return layer.layerIndex;
195+
}
196+
else
197+
{
198+
return null;
199+
}
200+
},
201+
202+
getLayerIndexByName: function (name)
203+
{
204+
return this.getIndex(this.layers, name);
205+
},
206+
207+
getTileAt: function (tileX, tileY, layer, nonNull)
208+
{
209+
layer = this.getLayer(layer);
210+
if (layer === null) { return null; }
211+
return TilemapComponents.GetTileAt(tileX, tileY, layer, nonNull);
212+
},
213+
214+
getTilesWithin: function (tileX, tileY, width, height, layer)
215+
{
216+
layer = this.getLayer(layer);
217+
if (layer === null) { return null; }
218+
return TilemapComponents.GetTilesWithin(tileX, tileY, width, height, layer);
219+
},
220+
221+
getTilesetIndex: function (name)
222+
{
223+
return this.getIndex(this.tilesets, name);
224+
},
225+
226+
hasTileAt: function (tileX, tileY, layer)
227+
{
228+
layer = this.getLayer(layer);
229+
if (layer === null) { return null; }
230+
return TilemapComponents.HasTileAt(tileX, tileY, layer);
231+
},
232+
233+
layer: {
234+
get: function ()
235+
{
236+
return this.layers[this.currentLayerIndex];
237+
},
238+
239+
set: function (layer)
240+
{
241+
this.setLayer(layer);
242+
}
243+
},
244+
245+
randomize: function (tileX, tileY, width, height, indices, layer)
246+
{
247+
layer = this.getLayer(layer);
248+
if (layer !== null)
249+
{
250+
TilemapComponents.Randomize(tileX, tileY, width, height, indices, layer);;
251+
}
252+
return this;
253+
},
254+
255+
setLayer: function (layer)
256+
{
257+
var index = this.getLayerIndex(layer);
258+
if (index !== null)
259+
{
260+
this.currentLayerIndex = index;
261+
}
262+
return this;
263+
},
264+
265+
shuffle: function (tileX, tileY, width, height, layer)
266+
{
267+
layer = this.getLayer(layer);
268+
if (layer !== null)
269+
{
270+
TilemapComponents.Shuffle(tileX, tileY, width, height, layer);
271+
}
272+
return this;
153273
}
274+
154275
});
155276

156277
module.exports = Tilemap;
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
var GetTilesWithin = require('./GetTilesWithin');
2+
3+
var Fill = function (srcTileX, srcTileY, width, height, destTileX, destTileY, layer)
4+
{
5+
if (srcTileX === undefined || srcTileX < 0) { srcTileX = 0; }
6+
if (srcTileY === undefined || srcTileY < 0) { srcTileY = 0; }
7+
8+
var srcTiles = GetTilesWithin(srcTileX, srcTileY, width, height, layer);
9+
10+
var offsetX = destTileX - srcTileX;
11+
var offsetY = destTileY - srcTileY;
12+
13+
for (var i = 0; i < srcTiles.length; i++)
14+
{
15+
var tileX = srcTiles[i].x + offsetX;
16+
var tileY = srcTiles[i].y + offsetY;
17+
if (tileX >= 0 && tileX < layer.width && tileY >= 0 && tileY < layer.height)
18+
{
19+
layer.data[tileY][tileX].index = srcTiles[i].index;
20+
}
21+
}
22+
};
23+
24+
module.exports = Fill;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
var GetTilesWithin = require('./GetTilesWithin');
2+
3+
var Fill = function (index, tileX, tileY, width, height, layer)
4+
{
5+
var tiles = GetTilesWithin(tileX, tileY, width, height, layer);
6+
for (var i = 0; i < tiles.length; i++)
7+
{
8+
tiles[i].index = index;
9+
}
10+
};
11+
12+
module.exports = Fill;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
var GetTilesWithin = require("./GetTilesWithin");
2+
3+
var ForEachTile = function (callback, context, tileX, tileY, width, height, layer)
4+
{
5+
var tiles = GetTilesWithin(tileX, tileY, width, height, layer);
6+
tiles.forEach(callback, context);
7+
};
8+
9+
module.exports = ForEachTile;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var GetTileAt = function (tileX, tileY, layer, nonNull)
2+
{
3+
if (nonNull === undefined) { nonNull = false; }
4+
5+
if (tileX >= 0 && tileX < layer.width && tileY >= 0 && tileY < layer.height)
6+
{
7+
var tile = layer.data[tileY][tileX];
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;

0 commit comments

Comments
 (0)