diff --git a/frontend/src/components/ArcadeViewer.vue b/frontend/src/components/ArcadeViewer.vue index e39a128..f274ef7 100644 --- a/frontend/src/components/ArcadeViewer.vue +++ b/frontend/src/components/ArcadeViewer.vue @@ -151,12 +151,12 @@ async function initScene(): Promise { comboTimer = setTimeout(() => { comboInfo.value = null }, 1200) }) - // Start + // Start (awaits scene readiness — kaplay defers scene init to next frame) showAnnouncement('ROUND 1', 1200) setTimeout(() => { showAnnouncement('FIGHT!', 800) }, 1300) - scene.start() + await scene.start() // Start input polling inputPollId = requestAnimationFrame(pollInput) diff --git a/frontend/src/game/ArcadeScene.ts b/frontend/src/game/ArcadeScene.ts index b15d98d..23775b3 100644 --- a/frontend/src/game/ArcadeScene.ts +++ b/frontend/src/game/ArcadeScene.ts @@ -156,6 +156,11 @@ export async function createArcadeScene(config: ArcadeConfig): Promise void + const sceneReadyPromise = new Promise(resolve => { sceneReady = resolve }) + // ═══════════════════════════════════════════════════════════════ // Scene Setup // ═══════════════════════════════════════════════════════════════ @@ -180,6 +185,9 @@ export async function createArcadeScene(config: ArcadeConfig): Promise void + start: () => Promise pause: () => void resume: () => void destroy: () => void