From 45c51afcc17801de4fa7b332f7ed8a0b50f894bd Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Tue, 31 Mar 2026 17:40:31 +0200 Subject: [PATCH] Update RunnerCanvas to include project assets and model assets --- src/runner-web/RunnerCanvas.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/runner-web/RunnerCanvas.tsx b/src/runner-web/RunnerCanvas.tsx index 10b69a00..fe1152c6 100644 --- a/src/runner-web/RunnerCanvas.tsx +++ b/src/runner-web/RunnerCanvas.tsx @@ -1,5 +1,7 @@ import { useEffect, useRef, useState } from "react"; +import type { LoadedModelAsset } from "../assets/gltf-model-import"; +import type { ProjectAssetRecord } from "../assets/project-assets"; import type { FirstPersonTelemetry } from "../runtime-three/navigation-controller"; import { RuntimeHost } from "../runtime-three/runtime-host"; import type { RuntimeInteractionPrompt } from "../runtime-three/runtime-interaction-system"; @@ -8,6 +10,8 @@ import { createWorldBackgroundStyle } from "../shared-ui/world-background-style" interface RunnerCanvasProps { runtimeScene: RuntimeSceneDefinition; + projectAssets: Record; + loadedModelAssets: Record; navigationMode: RuntimeNavigationMode; onRuntimeMessageChange(message: string | null): void; onFirstPersonTelemetryChange(telemetry: FirstPersonTelemetry | null): void; @@ -16,6 +20,8 @@ interface RunnerCanvasProps { export function RunnerCanvas({ runtimeScene, + projectAssets, + loadedModelAssets, navigationMode, onRuntimeMessageChange, onFirstPersonTelemetryChange, @@ -51,6 +57,7 @@ export function RunnerCanvas({ setInteractionPrompt(prompt); onInteractionPromptChange(prompt); }); + runtimeHost.updateAssets(projectAssets, loadedModelAssets); setRunnerMessage( hasWebGl ? null : "WebGL is unavailable in this browser environment. The runner shell is visible, but runtime rendering is disabled." ); @@ -66,12 +73,16 @@ export function RunnerCanvas({ onInteractionPromptChange(null); return; } - }, [onFirstPersonTelemetryChange, onInteractionPromptChange, onRuntimeMessageChange]); + }, [onFirstPersonTelemetryChange, onInteractionPromptChange, onRuntimeMessageChange, projectAssets, loadedModelAssets]); useEffect(() => { hostRef.current?.loadScene(runtimeScene); }, [runtimeScene]); + useEffect(() => { + hostRef.current?.updateAssets(projectAssets, loadedModelAssets); + }, [projectAssets, loadedModelAssets]); + useEffect(() => { hostRef.current?.setNavigationMode(navigationMode); }, [navigationMode]);