diff --git a/src/runtime-three/runtime-host.ts b/src/runtime-three/runtime-host.ts index f0769875..8ff92cbe 100644 --- a/src/runtime-three/runtime-host.ts +++ b/src/runtime-three/runtime-host.ts @@ -495,6 +495,37 @@ export class RuntimeHost { mesh.visible = visible ?? !mesh.visible; } + private applyPlayAnimationAction(instanceId: string, clipName: string) { + const mixer = this.animationMixers.get(instanceId); + const clips = this.instanceAnimationClips.get(instanceId); + + if (!mixer || !clips) { + console.warn(`playAnimation: no mixer for instance ${instanceId}`); + return; + } + + const clip = THREE.AnimationClip.findByName(clips, clipName); + + if (!clip) { + console.warn(`playAnimation: clip "${clipName}" not found on instance ${instanceId}`); + return; + } + + mixer.stopAllAction(); + mixer.clipAction(clip).play(); + } + + private applyStopAnimationAction(instanceId: string) { + const mixer = this.animationMixers.get(instanceId); + + if (!mixer) { + console.warn(`stopAnimation: no mixer for instance ${instanceId}`); + return; + } + + mixer.stopAllAction(); + } + private createInteractionDispatcher(): RuntimeInteractionDispatcher { return { teleportPlayer: (target) => {