diff --git a/app/pages/PageEnigma/Editor/Engines/CharacterAnimationEngine.ts b/app/pages/PageEnigma/Editor/Engines/CharacterAnimationEngine.ts index 01b0e78f39..222d9ee2c6 100644 --- a/app/pages/PageEnigma/Editor/Engines/CharacterAnimationEngine.ts +++ b/app/pages/PageEnigma/Editor/Engines/CharacterAnimationEngine.ts @@ -191,6 +191,11 @@ export class CharacterAnimationEngine { }) } + stopCharacter(character: THREE.Object3D) { + const mixer = this.characterMixers.get(character); + mixer?.stopAllAction(); + } + stop() { this.characterMixers.forEach((mixer) => { mixer.stopAllAction(); @@ -236,4 +241,27 @@ export class CharacterAnimationEngine { }); } + removeCharacter(character: THREE.Object3D) { + console.debug("Removing character from animation engine", character); + this.characterAnimations.delete(character); + this.characterMixers.delete(character); + } + + removeAnimation(character: THREE.Object3D, clip: ClipUI) { + console.debug("Removing animation from character", character, clip); + const clips = this.characterAnimations.get(character)!; + + const clipIndex = clips.findIndex((c) => c.clip_uuid === clip.clip_uuid); + if (clipIndex < 0) { + return; + } + + // Remove the clip from character's tracked clips + clips.splice(clipIndex, 1); + + // Stop all character animations to cleanly reset + this.stopCharacter(character); + } + + }