diff --git a/src/runtime-three/runtime-host.ts b/src/runtime-three/runtime-host.ts index 2eade9b7..55ab8bf1 100644 --- a/src/runtime-three/runtime-host.ts +++ b/src/runtime-three/runtime-host.ts @@ -1093,19 +1093,36 @@ export class RuntimeHost { } private isRuntimePaused(): boolean { - return this.manualPauseActive || this.controlPauseActive; + return ( + this.manualPauseActive || + this.controlPauseActive || + this.dialoguePauseActive + ); } private publishRuntimePauseState(force = false) { + const pauseSources: RuntimePauseState["source"][] = []; + + if (this.manualPauseActive) { + pauseSources.push("manual"); + } + + if (this.controlPauseActive) { + pauseSources.push("control"); + } + + if (this.dialoguePauseActive) { + pauseSources.push("dialogue"); + } + const nextState: RuntimePauseState = { paused: this.isRuntimePaused(), - source: this.manualPauseActive - ? this.controlPauseActive - ? "mixed" - : "manual" - : this.controlPauseActive - ? "control" - : null + source: + pauseSources.length === 0 + ? null + : pauseSources.length === 1 + ? pauseSources[0] + : "mixed" }; if ( @@ -1143,6 +1160,15 @@ export class RuntimeHost { this.publishRuntimePauseState(); } + private setDialoguePauseActive(paused: boolean) { + if (this.dialoguePauseActive === paused) { + return; + } + + this.dialoguePauseActive = paused; + this.publishRuntimePauseState(); + } + private activateDesiredNavigationController() { if (this.runtimeScene === null || !this.sceneReady) { return;