From a22c2a09b81e3475d47760596da14502e2ede6a3 Mon Sep 17 00:00:00 2001 From: Benedicte Quimbert Date: Fri, 29 Oct 2021 12:01:07 +0200 Subject: [PATCH] Uses the current player position rather than the starting one to position iframe --- front/src/Api/Events/IframeEvent.ts | 5 +++++ front/src/Api/Events/PlayerPosition.ts | 10 ++++++++++ front/src/Api/iframe/player.ts | 14 ++++++++++++++ front/src/Phaser/Game/GameScene.ts | 8 ++++++++ 4 files changed, 37 insertions(+) create mode 100644 front/src/Api/Events/PlayerPosition.ts diff --git a/front/src/Api/Events/IframeEvent.ts b/front/src/Api/Events/IframeEvent.ts index 91280a0a..4a8ab570 100644 --- a/front/src/Api/Events/IframeEvent.ts +++ b/front/src/Api/Events/IframeEvent.ts @@ -29,6 +29,7 @@ import { isMessageReferenceEvent, isTriggerActionMessageEvent } from "./ui/Trigg import type { MenuRegisterEvent, UnregisterMenuEvent } from "./ui/MenuRegisterEvent"; import type { ChangeLayerEvent } from "./ChangeLayerEvent"; import { isPlayerPropertyEvent } from "./PlayerPropertyEvent"; +import { isPlayerPosition } from "./PlayerPosition"; export interface TypedMessageEvent extends MessageEvent { data: T; @@ -150,6 +151,10 @@ export const iframeQueryMapTypeGuards = { query: isCreateEmbeddedWebsiteEvent, answer: tg.isUndefined, }, + getPlayerPosition: { + query: tg.isUndefined, + answer: isPlayerPosition, + }, }; type GuardedType = T extends (x: unknown) => x is infer T ? T : never; diff --git a/front/src/Api/Events/PlayerPosition.ts b/front/src/Api/Events/PlayerPosition.ts new file mode 100644 index 00000000..54fac6fe --- /dev/null +++ b/front/src/Api/Events/PlayerPosition.ts @@ -0,0 +1,10 @@ +import * as tg from "generic-type-guard"; + +export const isPlayerPosition = new tg.IsInterface() + .withProperties({ + x: tg.isNumber, + y: tg.isNumber, + }) + .get(); + +export type PlayerPosition = tg.GuardedType; diff --git a/front/src/Api/iframe/player.ts b/front/src/Api/iframe/player.ts index e25e0b9d..16c0d81d 100644 --- a/front/src/Api/iframe/player.ts +++ b/front/src/Api/iframe/player.ts @@ -70,6 +70,20 @@ export class WorkadventurePlayerCommands extends IframeApiContribution { + //TODO: type + return await queryWorkadventure({ + type: "getPlayerPosition", + data: undefined, + }); + } } +//TODO: move or delete +type Position = { + x: number; + y: number; +}; + export default new WorkadventurePlayerCommands(); diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 955b1ee3..b3dd7c83 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -1274,6 +1274,14 @@ ${escapedMessage} iframeListener.registerAnswerer("removeActionMessage", (message) => { layoutManagerActionStore.removeAction(message.uuid); }); + + + iframeListener.registerAnswerer("getPlayerPosition", () => { + return { + x: this.CurrentPlayer.x, + y: this.CurrentPlayer.y, + }; + }); } private setPropertyLayer(