From bfdda83a6da15ba996941b6d5df3eba3e92ae553 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Thu, 14 May 2026 14:38:00 +0900 Subject: [PATCH] wip --- .../src/world/engineControllerBase.ts | 38 ++++++++++++------- .../src/world/room/previewEngineController.ts | 2 +- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/packages/frontend/src/world/engineControllerBase.ts b/packages/frontend/src/world/engineControllerBase.ts index fcf6f77188..233d486e1d 100644 --- a/packages/frontend/src/world/engineControllerBase.ts +++ b/packages/frontend/src/world/engineControllerBase.ts @@ -279,25 +279,35 @@ export abstract class EngineControllerBase { private callCounter = 0; - // TODO: いい感じに型付け - protected call(fn, args = [], needReturnValue = false) { + protected call(fn: FN, args: Parameters = [] as any): void { if (!this.isReady.value) { throw new Error('Engine is not initialized'); } if (this.worker != null) { - if (needReturnValue) { - return new Promise((resolve) => { - const id = this.callCounter++; - this.returnHooks.set(id, (value) => { - resolve(value); - }); - this.worker!.postMessage({ type: 'call', fn, args, needReturnValue: true, id }); - }); - } else { - this.worker.postMessage({ type: 'call', fn, args }); - } + this.worker.postMessage({ type: 'call', fn, args }); } else if (this.engine != null) { - return this.engine[fn](...args); + this.engine[fn](...args); + } else { + throw new Error('Engine is not initialized'); + } + } + + protected callAndWaitReturn(fn: FN, args: Parameters = [] as any): Promise> { + if (!this.isReady.value) { + throw new Error('Engine is not initialized'); + } + if (this.worker != null) { + return new Promise((resolve) => { + const id = this.callCounter++; + this.returnHooks.set(id, (value) => { + resolve(value); + }); + this.worker!.postMessage({ type: 'call', fn, args, needReturnValue: true, id }); + }); + } else if (this.engine != null) { + return new Promise((resolve) => { + resolve(this.engine![fn](...args)); + }); } else { throw new Error('Engine is not initialized'); } diff --git a/packages/frontend/src/world/room/previewEngineController.ts b/packages/frontend/src/world/room/previewEngineController.ts index dbdf7a474c..9620d757c7 100644 --- a/packages/frontend/src/world/room/previewEngineController.ts +++ b/packages/frontend/src/world/room/previewEngineController.ts @@ -48,7 +48,7 @@ export class PreviewEngineController extends EngineControllerBase