Skip to content

Commit dd8bbfa

Browse files
committed
Update SetCollision methods to track which indices have been set to collide
1 parent e3dbf7c commit dd8bbfa

6 files changed

Lines changed: 46 additions & 0 deletions

File tree

v3/src/gameobjects/tilemap/components/PutTileAt.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,16 @@ var PutTileAt = function (tile, tileX, tileY, layer)
3232
}
3333

3434
// TODO: collision & re-calculate faces
35+
// Updating colliding flag on the new tile
36+
var newTile = layer.data[tileY][tileX];
37+
if (layer.collideIndexes.indexOf(newTile.index) !== -1)
38+
{
39+
newTile.setCollision(true);
40+
}
41+
else
42+
{
43+
newTile.resetCollision();
44+
}
3545

3646
return layer.data[tileY][tileX];
3747
};

v3/src/gameobjects/tilemap/components/SetCollision.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
var SetTileCollision = require('./SetTileCollision');
22
var RecalculateFaces = require('./RecalculateFaces');
3+
var SetLayerCollisionIndex = require('./SetLayerCollisionIndex');
34

45
var SetCollision = function (indexes, collides, recalculateFaces, layer)
56
{
67
if (collides === undefined) { collides = true; }
78
if (recalculateFaces === undefined) { recalculateFaces = true; }
89
if (!Array.isArray(indexes)) { indexes = [ indexes ]; }
910

11+
// Update the array of colliding indexes
12+
for (var i = 0; i < indexes.length; i++)
13+
{
14+
SetLayerCollisionIndex(indexes[i], collides, layer);
15+
}
16+
17+
// Update the tiles
1018
for (var ty = 0; ty < layer.height; ty++)
1119
{
1220
for (var tx = 0; tx < layer.width; tx++)

v3/src/gameobjects/tilemap/components/SetCollisionBetween.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var SetTileCollision = require('./SetTileCollision');
22
var RecalculateFaces = require('./RecalculateFaces');
3+
var SetLayerCollisionIndex = require('./SetLayerCollisionIndex');
34

45
var SetCollisionBetween = function (start, stop, collides, recalculateFaces, layer)
56
{
@@ -8,6 +9,13 @@ var SetCollisionBetween = function (start, stop, collides, recalculateFaces, lay
89

910
if (start > stop) { return; }
1011

12+
// Update the array of colliding indexes
13+
for (var index = start; index <= stop; index++)
14+
{
15+
SetLayerCollisionIndex(index, collides, layer);
16+
}
17+
18+
// Update the tiles
1119
for (var ty = 0; ty < layer.height; ty++)
1220
{
1321
for (var tx = 0; tx < layer.width; tx++)

v3/src/gameobjects/tilemap/components/SetCollisionByExclusion.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var SetTileCollision = require('./SetTileCollision');
22
var RecalculateFaces = require('./RecalculateFaces');
3+
var SetLayerCollisionIndex = require('./SetLayerCollisionIndex');
34

45
var SetCollisionByExclusion = function (indexes, collides, recalculateFaces, layer)
56
{
@@ -15,6 +16,7 @@ var SetCollisionByExclusion = function (indexes, collides, recalculateFaces, lay
1516
if (tile && indexes.indexOf(tile.index) === -1)
1617
{
1718
SetTileCollision(tile, collides);
19+
SetLayerCollisionIndex(tile.index, collides, layer);
1820
}
1921
}
2022
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Internal method
2+
// Update layer.collideIndexes to either contain or not contain tileIndex
3+
var SetLayerCollisionIndex = function (tileIndex, collides, layer)
4+
{
5+
var loc = layer.collideIndexes.indexOf(tileIndex);
6+
7+
if (collides && loc === -1)
8+
{
9+
layer.collideIndexes.push(tileIndex);
10+
}
11+
else if (!collides && loc !== -1)
12+
{
13+
layer.collideIndexes.splice(loc, 1);
14+
}
15+
};
16+
17+
module.exports = SetLayerCollisionIndex;

v3/src/gameobjects/tilemap/mapdata/LayerData.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ var LayerData = new Class({
2222
this.visible = GetFastValue(config, 'visible', true);
2323
this.properties = GetFastValue(config, 'properties', {});
2424
this.indexes = GetFastValue(config, 'indexes', []);
25+
this.collideIndexes = GetFastValue(config, 'collideIndexes', []);
2526
this.callbacks = GetFastValue(config, 'callbacks', []);
2627
this.bodies = GetFastValue(config, 'bodies', []);
2728
this.data = GetFastValue(config, 'data', []);

0 commit comments

Comments
 (0)