Tilemap collision is now working but all Camera following seems to be broken as a result. Awesome.

This commit is contained in:
Richard Davey
2013-04-28 12:25:02 +01:00
parent 2087b2d76e
commit c09cff336d
15 changed files with 12407 additions and 4729 deletions
+27 -10
View File
@@ -49,6 +49,7 @@ module Phaser {
public tiles : Tile[];
public layers : TilemapLayer[];
public currentLayer: TilemapLayer;
public collisionLayer: TilemapLayer;
public mapFormat: number;
public update() {
@@ -90,11 +91,14 @@ module Phaser {
var tileQuantity = layer.parseTileOffsets();
this.currentLayer = layer;
this.collisionLayer = layer;
this.layers.push(layer);
this.generateTiles(tileQuantity);
console.log('generate layer csv');
}
private parseTiledJSON(data: string, key: string) {
@@ -132,6 +136,7 @@ module Phaser {
layer.addColumn(row);
c = 0;
}
console.log('generate layer json');
}
layer.updateBounds();
@@ -139,6 +144,7 @@ module Phaser {
var tileQuantity = layer.parseTileOffsets();
this.currentLayer = layer;
this.collisionLayer = layer;
this.layers.push(layer);
@@ -167,20 +173,20 @@ module Phaser {
// Tile Collision
public setCollisionRange(start: number, end: number, collision?:number = Collision.ANY) {
public setCollisionRange(start: number, end: number, collision?:number = Collision.ANY, resetCollisions: bool = false) {
for (var i = start; i < end; i++)
{
this.tiles[i].allowCollisions = collision;
this.tiles[i].setCollision(collision, resetCollisions);
}
}
public setCollisionByIndex(values:number[], collision?:number = Collision.ANY) {
public setCollisionByIndex(values:number[], collision?:number = Collision.ANY, resetCollisions: bool = false) {
for (var i = 0; i < values.length; i++)
{
this.tiles[values[i]].allowCollisions = collision;
this.tiles[values[i]].setCollision(collision, resetCollisions);
}
}
@@ -222,21 +228,32 @@ module Phaser {
// Group?
if (objectOrGroup.isGroup == false)
{
if (objectOrGroup.exists && objectOrGroup.allowCollisions != Collision.NONE)
{
this.currentLayer.getTileOverlaps(objectOrGroup);
}
return this.collideGameObject(objectOrGroup);
}
else
{
// todo
objectOrGroup.forEachAlive(this.currentLayer.getTileOverlaps);
objectOrGroup.forEachAlive(this, this.collideGameObject, true);
}
return true;
}
public collideGameObject(object: GameObject): bool {
if (object == this) { return false; }
if (object.immovable == false && object.exists == true && object.allowCollisions != Collision.NONE)
{
return this.collisionLayer.getTileOverlaps(object);
}
else
{
return false;
}
}
// Set current layer
// Set layer order?