support for group layer of Tiled (excludes 'start' layer)

This commit is contained in:
Lurkars 2021-02-27 15:23:57 +01:00 committed by David Négrier
parent f0d277af32
commit 9b6be3466b
3 changed files with 46 additions and 22 deletions

View file

@ -1,4 +1,4 @@
import {ITiledMap} from "../Map/ITiledMap";
import {ITiledMap, ITiledMapLayer} from "../Map/ITiledMap";
export type PropertyChangeCallback = (newValue: string | number | boolean | undefined, oldValue: string | number | boolean | undefined, allProps: Map<string, string | boolean | number>) => void;
@ -52,10 +52,15 @@ export class GameMap {
return this.lastProperties;
}
private getProperties(key: number): Map<string, string|boolean|number> {
const properties = new Map<string, string|boolean|number>();
// helper for recursive group layer support
private getPropertiesHelper(key: number, layers: ITiledMapLayer[], properties: Map<string, string|boolean|number>): Map<string, string|boolean|number> {
for (const layer of layers) {
if (layer.type === 'group') {
this.getPropertiesHelper(key, layer.layers, properties);
continue;
}
for (const layer of this.map.layers) {
if (layer.type !== 'tilelayer') {
continue;
}
@ -77,6 +82,11 @@ export class GameMap {
return properties;
}
private getProperties(key: number): Map<string, string|boolean|number> {
const properties = new Map<string, string|boolean|number>();
return this.getPropertiesHelper(key, this.map.layers, properties);
}
private trigger(propName: string, oldValue: string | number | boolean | undefined, newValue: string | number | boolean | undefined, allProps: Map<string, string | boolean | number>) {
const callbacksArray = this.callbacks.get(propName);
if (callbacksArray !== undefined) {