getMapProperty
This commit is contained in:
@@ -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>;
|
||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
Reference in New Issue
Block a user