getMapProperty

This commit is contained in:
_Bastler
2021-11-24 14:32:45 +01:00
parent bc7d9a96fe
commit 16a73d4de6
5 changed files with 66 additions and 16 deletions
+13
View File
@@ -0,0 +1,13 @@
import * as tg from "generic-type-guard";
export const isGetPropertyEvent = new tg.IsInterface()
.withProperties({
layerName: tg.isString,
propertyName: tg.isString,
propertyValue: tg.isUnion(tg.isString, tg.isUnion(tg.isNumber, tg.isUnion(tg.isBoolean, tg.isUndefined))),
})
.get();
/**
* A message sent from the iFrame to the game to change the value of the property of the layer
*/
export type GetPropertyEvent = tg.GuardedType<typeof isGetPropertyEvent>;
+5
View File
@@ -30,6 +30,7 @@ import type {
import { isMessageReferenceEvent, isTriggerActionMessageEvent } from "./ui/TriggerActionMessageEvent"; import { isMessageReferenceEvent, isTriggerActionMessageEvent } from "./ui/TriggerActionMessageEvent";
import type { MenuRegisterEvent, UnregisterMenuEvent } from "./ui/MenuRegisterEvent"; import type { MenuRegisterEvent, UnregisterMenuEvent } from "./ui/MenuRegisterEvent";
import type { ChangeLayerEvent } from "./ChangeLayerEvent"; import type { ChangeLayerEvent } from "./ChangeLayerEvent";
import { isGetPropertyEvent } from "./GetPropertyEvent";
export interface TypedMessageEvent<T> extends MessageEvent { export interface TypedMessageEvent<T> extends MessageEvent {
data: T; data: T;
@@ -103,6 +104,10 @@ export const iframeQueryMapTypeGuards = {
query: tg.isUndefined, query: tg.isUndefined,
answer: isGameStateEvent, answer: isGameStateEvent,
}, },
getProperty: {
query: isGetPropertyEvent,
answer: isGetPropertyEvent,
},
getMapData: { getMapData: {
query: tg.isUndefined, query: tg.isUndefined,
answer: isMapDataEvent, answer: isMapDataEvent,
+11
View File
@@ -130,6 +130,17 @@ export class WorkadventureRoomCommands extends IframeApiContribution<Workadventu
}); });
} }
async getProperty(layerName: string, propertyName: string): Promise<string | number | boolean | undefined> {
const event = await queryWorkadventure({
type: "getProperty", data: {
layerName: layerName,
propertyName: propertyName,
propertyValue : undefined,
}
});
return event.propertyValue;
}
async getTiledMap(): Promise<ITiledMap> { async getTiledMap(): Promise<ITiledMap> {
const event = await queryWorkadventure({ type: "getMapData", data: undefined }); const event = await queryWorkadventure({ type: "getMapData", data: undefined });
return event.data as ITiledMap; return event.data as ITiledMap;
+16
View File
@@ -323,6 +323,22 @@ export class GameMap {
return this.tileNameMap.get(tile); return this.tileNameMap.get(tile);
} }
public getLayerProperty(
layerName: string,
propertyName: string
) : string | number | undefined | boolean {
const layer = this.findLayer(layerName);
if (layer === undefined) {
console.warn('Could not find layer "' + layerName + '" when calling setProperty');
return;
}
if (layer.properties === undefined) {
layer.properties = [];
}
const property = layer.properties.find((property) => property.name === propertyName);
return property?.value;
}
public setLayerProperty( public setLayerProperty(
layerName: string, layerName: string,
propertyName: string, propertyName: string,
+5
View File
@@ -1151,6 +1151,11 @@ export class GameScene extends DirtyScene {
}); });
}); });
iframeListener.registerAnswerer("getProperty", (data) => {
data.propertyValue = this.gameMap.getLayerProperty(data.layerName, data.propertyName);
return data;
});
iframeListener.registerAnswerer("getMapData", () => { iframeListener.registerAnswerer("getMapData", () => {
return { return {
data: this.gameMap.getMap(), data: this.gameMap.getMap(),