/
PhaserTilemap.ts
75 lines (65 loc) · 1.95 KB
/
PhaserTilemap.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import { TileLayer, Orientation, Tile, Tilemap } from "../Tilemap.js";
import { PhaserTile } from "./PhaserTile.js";
import { PhaserTileLayer } from "./PhaserTileLayer.js";
export interface TiledProject {
propertyTypes: Array<{
name: string;
type: string;
members: Array<{
name: string;
type: string;
propertyType?: string;
value: any;
}>;
}>;
}
export class PhaserTilemap implements Tilemap {
constructor(
private phaserTilemap: Phaser.Tilemaps.Tilemap,
private tiledProject?: TiledProject,
) {
for (const l of this.phaserTilemap.layers) {
if (l.tilemapLayer == null) {
throw new Error(
`Error initializing tilemap. Layer '${l.name}' has no 'tilemapLayer'. This can happen if you call 'createLayer' with the wrong layer ID.`,
);
}
}
}
getTileWidth(): number {
return this.phaserTilemap.tileWidth;
}
getTileHeight(): number {
return this.phaserTilemap.tileHeight;
}
getWidth(): number {
return this.phaserTilemap.width;
}
getHeight(): number {
return this.phaserTilemap.height;
}
getOrientation(): Orientation {
// Against the documentation of phaser, tilemap seems to be a number instead
// of a string. Therefore the intentional type coercion here.
if (
this.phaserTilemap.orientation ==
Phaser.Tilemaps.Orientation.ISOMETRIC.toString()
) {
return "isometric";
}
return "orthogonal";
}
getLayers(): TileLayer[] {
return this.phaserTilemap.layers.map(
(l) => new PhaserTileLayer(l.tilemapLayer, this.tiledProject),
);
}
hasTileAt(x: number, y: number, layer?: string): boolean {
return !!this.phaserTilemap.hasTileAt(x, y, layer);
}
getTileAt(x: number, y: number, layer?: string): Tile | undefined {
const phaserTile = this.phaserTilemap.getTileAt(x, y, false, layer);
if (!phaserTile) return undefined;
return new PhaserTile(phaserTile, this.tiledProject);
}
}