Make runtime clock state optional and provide default values in RunnerCanvas

This commit is contained in:
2026-04-12 04:39:07 +02:00
parent 783685404d
commit 9fb8f4160a

View File

@@ -13,6 +13,7 @@ import {
} from "../runtime-three/runtime-host"; } from "../runtime-three/runtime-host";
import type { RuntimeInteractionPrompt } from "../runtime-three/runtime-interaction-system"; import type { RuntimeInteractionPrompt } from "../runtime-three/runtime-interaction-system";
import { import {
createRuntimeClockState,
resolveRuntimeDayNightWorldState, resolveRuntimeDayNightWorldState,
type RuntimeClockState type RuntimeClockState
} from "../runtime-three/runtime-project-time"; } from "../runtime-three/runtime-project-time";
@@ -31,9 +32,9 @@ interface RunnerCanvasProps {
loadedImageAssets: Record<string, LoadedImageAsset>; loadedImageAssets: Record<string, LoadedImageAsset>;
loadedAudioAssets: Record<string, LoadedAudioAsset>; loadedAudioAssets: Record<string, LoadedAudioAsset>;
navigationMode: RuntimeNavigationMode; navigationMode: RuntimeNavigationMode;
runtimeClock: RuntimeClockState; runtimeClock?: RuntimeClockState;
onRuntimeMessageChange(message: string | null): void; onRuntimeMessageChange(message: string | null): void;
onRuntimeClockChange(clock: RuntimeClockState): void; onRuntimeClockChange?(clock: RuntimeClockState): void;
onFirstPersonTelemetryChange(telemetry: FirstPersonTelemetry | null): void; onFirstPersonTelemetryChange(telemetry: FirstPersonTelemetry | null): void;
onInteractionPromptChange(prompt: RuntimeInteractionPrompt | null): void; onInteractionPromptChange(prompt: RuntimeInteractionPrompt | null): void;
onSceneExitActivated(request: RuntimeSceneExitTransitionRequest): void; onSceneExitActivated(request: RuntimeSceneExitTransitionRequest): void;
@@ -48,9 +49,9 @@ export function RunnerCanvas({
loadedImageAssets, loadedImageAssets,
loadedAudioAssets, loadedAudioAssets,
navigationMode, navigationMode,
runtimeClock, runtimeClock = createRuntimeClockState(runtimeScene.time),
onRuntimeMessageChange, onRuntimeMessageChange,
onRuntimeClockChange, onRuntimeClockChange = () => {},
onFirstPersonTelemetryChange, onFirstPersonTelemetryChange,
onInteractionPromptChange, onInteractionPromptChange,
onSceneExitActivated onSceneExitActivated
@@ -90,7 +91,7 @@ export function RunnerCanvas({
runtimeHost.mount(container); runtimeHost.mount(container);
runtimeHost.setRuntimeMessageHandler(onRuntimeMessageChange); runtimeHost.setRuntimeMessageHandler(onRuntimeMessageChange);
runtimeHost.setSceneLoadStateHandler(setSceneLoadState); runtimeHost.setSceneLoadStateHandler(setSceneLoadState);
runtimeHost.setRuntimeClockStateHandler(onRuntimeClockChange); runtimeHost.setRuntimeClockStateHandler?.(onRuntimeClockChange);
runtimeHost.setFirstPersonTelemetryHandler((telemetry) => { runtimeHost.setFirstPersonTelemetryHandler((telemetry) => {
setFirstPersonTelemetry(telemetry); setFirstPersonTelemetry(telemetry);
onFirstPersonTelemetryChange(telemetry); onFirstPersonTelemetryChange(telemetry);
@@ -136,7 +137,7 @@ export function RunnerCanvas({
}, [onSceneExitActivated]); }, [onSceneExitActivated]);
useEffect(() => { useEffect(() => {
hostRef.current?.setRuntimeClockStateHandler(onRuntimeClockChange); hostRef.current?.setRuntimeClockStateHandler?.(onRuntimeClockChange);
}, [onRuntimeClockChange]); }, [onRuntimeClockChange]);
useEffect(() => { useEffect(() => {