From bb899120cf6f404ce7085a7110ef081348000e25 Mon Sep 17 00:00:00 2001 From: Hubol Date: Sun, 18 Aug 2024 22:53:54 -0500 Subject: [PATCH] Expose enums to ogmo editor --- src/igua/ogmo/external-provider.ts | 35 ++++++++++++++++++++++++++++++ src/index.ts | 6 +++++ src/lib/environment.ts | 4 ++++ 3 files changed, 45 insertions(+) create mode 100644 src/igua/ogmo/external-provider.ts diff --git a/src/igua/ogmo/external-provider.ts b/src/igua/ogmo/external-provider.ts new file mode 100644 index 0000000..834f4b4 --- /dev/null +++ b/src/igua/ogmo/external-provider.ts @@ -0,0 +1,35 @@ +import { SceneLibrary } from "../core/scene/scene-library"; +import { NpcLooks } from "../iguana/npc-looks"; + +const enums: OgmoExternalProvider.Enum[] = [ + { + name: 'Scene', + values: SceneLibrary.getNames(), + }, + { + name: 'NpcLook', + values: Object.keys(NpcLooks), + } +]; + +const data: OgmoExternalProvider.Data = { + enums, +} + +namespace OgmoExternalProvider { + export interface Enum { + name: string; + values: string[]; + } + + export interface Data { + enums: Enum[]; + } +} + +export function provide() { + window.parent.postMessage(data, '*'); + const preEl = document.createElement('pre'); + preEl.textContent = JSON.stringify(data, undefined, 2); + document.body.prepend(preEl); +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index a74cbe2..394bc1c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -46,6 +46,12 @@ async function initialize() { integralUpscaleCanvas(addGameCanvasToDocument(renderer.view)); require("./igua/launch/prepare-game-engine").prepareGameEngine(renderer); + + if (Environment.isOgmoExternalProvider) { + require("./igua/ogmo/external-provider").provide(); + return; + } + require("./igua/launch/install-dev-tools").installDevTools(); require("./igua/launch/start-game").startGame(); } diff --git a/src/lib/environment.ts b/src/lib/environment.ts index 5f5dc72..f5d0f5d 100644 --- a/src/lib/environment.ts +++ b/src/lib/environment.ts @@ -24,5 +24,9 @@ export const Environment = { }, get requiresUserGestureForSound() { return Environment.isProduction && !Environment.isElectron; + }, + get isOgmoExternalProvider() { + const params = new URLSearchParams(window.location.search); + return params.has('ogmoExternalProvider'); } };