///
/**
* Phaser - Tile
*
* A Tile is a single representation of a tile within a Tilemap
*/
module Phaser {
export class Tile {
/**
* Tile constructor
* Create a new Tile
.
*
* @param tilemap the tilemap this tile belongs to.
* @param index The index of this tile type in the core map data.
* @param width Width of the tile.
* @param height Height of the tile.
*/
constructor(game: Game, tilemap: Tilemap, index: number, width: number, height: number) {
this._game = game;
this.tilemap = tilemap;
this.index = index;
this.width = width;
this.height = height;
this.allowCollisions = Collision.NONE;
}
/**
* Local private reference to game.
*/
private _game: Game;
/**
* You can give this Tile a friendly name to help with debugging. Never used internally.
* @type {string}
*/
public name: string;
/**
* The virtual mass of the tile.
* @type {number}
*/
public mass: number = 1.0;
/**
* Tile width.
* @type {number}
*/
public width: number;
/**
* Tile height.
* @type {number}
*/
public height: number;
/**
* Bit field of flags (use with UP, DOWN, LEFT, RIGHT, etc) indicating collision directions.
* @type {number}
*/
public allowCollisions: number;
/**
* Indicating collide with any object on the left.
* @type {boolean}
*/
public collideLeft: bool = false;
/**
* Indicating collide with any object on the right.
* @type {boolean}
*/
public collideRight: bool = false;
/**
* Indicating collide with any object on the top.
* @type {boolean}
*/
public collideUp: bool = false;
/**
* Indicating collide with any object on the bottom.
* @type {boolean}
*/
public collideDown: bool = false;
/**
* Enable separation at x-axis.
* @type {boolean}
*/
public separateX: bool = true;
/**
* Enable separation at y-axis.
* @type {boolean}
*/
public separateY: bool = true;
/**
* A reference to the tilemap this tile object belongs to.
* @type {Tilemap}
*/
public tilemap: Tilemap;
/**
* The index of this tile type in the core map data.
* For example, if your map only has 16 kinds of tiles in it,
* this number is usually between 0 and 15.
* @type {number}
*/
public index: number;
/**
* Clean up memory.
*/
public destroy() {
this.tilemap = null;
}
/**
* Set collision configs.
* @param collision Bit field of flags. (see Tile.allowCollision)
* @param resetCollisions Reset collision flags before set.
* @param separateX Enable seprate at x-axis.
* @param separateY Enable seprate at y-axis.
*/
public setCollision(collision: number, resetCollisions: bool, separateX: bool, separateY: bool) {
if (resetCollisions)
{
this.resetCollision();
}
this.separateX = separateX;
this.separateY = separateY;
this.allowCollisions = collision;
if (collision & Collision.ANY)
{
this.collideLeft = true;
this.collideRight = true;
this.collideUp = true;
this.collideDown = true;
return;
}
if (collision & Collision.LEFT || collision & Collision.WALL)
{
this.collideLeft = true;
}
if (collision & Collision.RIGHT || collision & Collision.WALL)
{
this.collideRight = true;
}
if (collision & Collision.UP || collision & Collision.CEILING)
{
this.collideUp = true;
}
if (collision & Collision.DOWN || collision & Collision.CEILING)
{
this.collideDown = true;
}
}
/**
* Reset collision status flags.
*/
public resetCollision() {
this.allowCollisions = Collision.NONE;
this.collideLeft = false;
this.collideRight = false;
this.collideUp = false;
this.collideDown = false;
}
/**
* Returns a string representation of this object.
* @method toString
* @return {string} a string representation of the object.
**/
public toString(): string {
return "[{Tiled (index=" + this.index + " collisions=" + this.allowCollisions + " width=" + this.width + " height=" + this.height + ")}]";
}
}
}