correction from review
This commit is contained in:
parent
c79603d7fa
commit
b182a08ca2
5 changed files with 76 additions and 42 deletions
|
@ -193,8 +193,6 @@ class IframeListener {
|
|||
this._unregisterMenuCommandStream.next(data);
|
||||
})
|
||||
handleMenuItemRegistrationEvent(payload.data)
|
||||
} else if (payload.type == "registerMenuCommand" && isMenuItemRegisterEvent(payload.data)) {
|
||||
this._registerMenuCommandStream.next(payload.data.menutItem)
|
||||
} else if (payload.type == "changeTile" && isChangeTileEvent(payload.data)) {
|
||||
this._changeTileStream.next(payload.data);
|
||||
}
|
||||
|
|
|
@ -13,8 +13,9 @@ export class GameMap {
|
|||
private key: number | undefined;
|
||||
private lastProperties = new Map<string, string | boolean | number>();
|
||||
private callbacks = new Map<string, Array<PropertyChangeCallback>>();
|
||||
private tileNameMap = new Map<string, number>();
|
||||
|
||||
private tileSetPropertyMap: { [tile_index: number]: Array<ITiledMapLayerProperty> } = {}
|
||||
private tileSetPropertyMap: { [tile_index: number]: Array<ITiledMapLayerProperty> } = {};
|
||||
public readonly flatLayers: ITiledMapLayer[];
|
||||
public readonly phaserLayers: TilemapLayer[] = [];
|
||||
|
||||
|
@ -36,6 +37,9 @@ export class GameMap {
|
|||
if (tile.properties) {
|
||||
this.tileSetPropertyMap[tileset.firstgid + tile.id] = tile.properties
|
||||
tile.properties.forEach(prop => {
|
||||
if (prop.name == 'name' && typeof prop.value == "string") {
|
||||
this.tileNameMap.set(prop.value, tileset.firstgid + tile.id);
|
||||
}
|
||||
if (prop.name == "exitUrl" && typeof prop.value == "string") {
|
||||
this.exitUrls.push(prop.value);
|
||||
}
|
||||
|
@ -130,8 +134,8 @@ export class GameMap {
|
|||
return this.map;
|
||||
}
|
||||
|
||||
public getTilesetProperties(): { [tile_index: number]: Array<ITiledMapLayerProperty> } {
|
||||
return this.tileSetPropertyMap;
|
||||
private getTileProperty(index: number): Array<ITiledMapLayerProperty> {
|
||||
return this.tileSetPropertyMap[index];
|
||||
}
|
||||
|
||||
private trigger(propName: string, oldValue: string | number | boolean | undefined, newValue: string | number | boolean | undefined, allProps: Map<string, string | boolean | number>) {
|
||||
|
@ -169,13 +173,47 @@ export class GameMap {
|
|||
}
|
||||
}
|
||||
|
||||
public putTileInFlatLayer(index: number, x: number, y: number, layer: string): void {
|
||||
private putTileInFlatLayer(index: number, x: number, y: number, layer: string): void {
|
||||
const fLayer = this.findLayer(layer);
|
||||
if (fLayer?.type !== 'tilelayer') {
|
||||
if ( fLayer == undefined ) {
|
||||
console.error("The layer that you want to change doesn't exist.");
|
||||
return;
|
||||
}
|
||||
if (fLayer.type !== 'tilelayer') {
|
||||
console.error("The layer that you want to change is not a tilelayer. Tile can only be put in tilelayer.");
|
||||
return;
|
||||
}
|
||||
// @ts-ignore
|
||||
fLayer.data[x+y*fLayer.height] = index;
|
||||
}
|
||||
|
||||
public putTile(tile: string | number, x: number, y: number, layer: string): void {
|
||||
const phaserLayer = this.findPhaserLayer(layer);
|
||||
if ( phaserLayer ) {
|
||||
const tileIndex = this.getIndexForTileType(tile);
|
||||
if ( tileIndex !== undefined ) {
|
||||
this.putTileInFlatLayer(tileIndex, x, y, layer);
|
||||
const phaserTile = phaserLayer.putTileAt(tileIndex, x, y);
|
||||
for (const property of this.getTileProperty(tileIndex)) {
|
||||
if ( property.name === "collides" ) {
|
||||
phaserTile.setCollision(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
console.error("The tile that you want to place doesn't exist.");
|
||||
}
|
||||
}
|
||||
else {
|
||||
console.error("The layer that you want to change is not a tilelayer. Tile can only be put in tilelayer.");
|
||||
}
|
||||
}
|
||||
|
||||
private getIndexForTileType(tile: string | number): number | undefined {
|
||||
if (typeof tile == "number") {
|
||||
return tile;
|
||||
}
|
||||
return this.tileNameMap.get(tile);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -954,19 +954,7 @@ ${escapedMessage}
|
|||
}));
|
||||
this.iframeSubscriptionList.push(iframeListener.changeTileStream.subscribe((eventTiles) => {
|
||||
for (const eventTile of eventTiles) {
|
||||
const layer = this.gameMap.findPhaserLayer(eventTile.layer);
|
||||
if ( layer ) {
|
||||
const tileIndex = this.getIndexForTileType(eventTile.tile);
|
||||
if ( tileIndex ) {
|
||||
this.gameMap.putTileInFlatLayer(tileIndex, eventTile.x, eventTile.y, eventTile.layer);
|
||||
const tile = layer.putTileAt(tileIndex, eventTile.x, eventTile.y);
|
||||
for (const property of this.gameMap.getTilesetProperties()[tileIndex]) {
|
||||
if ( property.name === "collides" ) {
|
||||
tile.setCollision(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.gameMap.putTile(eventTile.tile, eventTile.x, eventTile.y, eventTile.layer);
|
||||
}
|
||||
}))
|
||||
|
||||
|
@ -997,22 +985,6 @@ ${escapedMessage}
|
|||
this.dirty = true;
|
||||
}
|
||||
|
||||
private getIndexForTileType(tileType: string | number): number | null {
|
||||
if (typeof tileType == "number") {
|
||||
return tileType;
|
||||
}
|
||||
for (const tileset of this.mapFile.tilesets) {
|
||||
if (tileset.tiles) {
|
||||
for (const tilesetTile of tileset.tiles) {
|
||||
if (tilesetTile.type == tileType) {
|
||||
return tileset.firstgid + tilesetTile.id
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
private getMapDirUrl(): string {
|
||||
return this.MapUrlFile.substr(0, this.MapUrlFile.lastIndexOf('/'));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue