@zephyr3d/editor 0.3.7 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/assets/{index-ySiLtSxz.js → index-BZ1L8ggE.js} +43 -3
  2. package/dist/assistant/zephyr-types-index.json +13230 -9488
  3. package/dist/images/icon1024.png +0 -0
  4. package/dist/index.html +1 -1
  5. package/dist/modules/zephyr3d_backend-webgl.js +2 -0
  6. package/dist/modules/zephyr3d_backend-webgl.js.map +1 -1
  7. package/dist/modules/zephyr3d_backend-webgpu.js +457 -16
  8. package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
  9. package/dist/modules/zephyr3d_device.js +27 -0
  10. package/dist/modules/zephyr3d_device.js.map +1 -1
  11. package/dist/modules/zephyr3d_loaders.js +208 -1
  12. package/dist/modules/zephyr3d_loaders.js.map +1 -1
  13. package/dist/modules/zephyr3d_scene.js +774 -80
  14. package/dist/modules/zephyr3d_scene.js.map +1 -1
  15. package/dist/vendor/zephyr3d/backend-webgl/dist/capabilities_webgl.js +2 -0
  16. package/dist/vendor/zephyr3d/backend-webgl/dist/capabilities_webgl.js.map +1 -1
  17. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js +2 -0
  18. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js.map +1 -1
  19. package/dist/vendor/zephyr3d/backend-webgpu/dist/commandqueue.js +55 -10
  20. package/dist/vendor/zephyr3d/backend-webgpu/dist/commandqueue.js.map +1 -1
  21. package/dist/vendor/zephyr3d/backend-webgpu/dist/computepass_webgpu.js +4 -0
  22. package/dist/vendor/zephyr3d/backend-webgpu/dist/computepass_webgpu.js.map +1 -1
  23. package/dist/vendor/zephyr3d/backend-webgpu/dist/device.js +44 -1
  24. package/dist/vendor/zephyr3d/backend-webgpu/dist/device.js.map +1 -1
  25. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +58 -5
  26. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
  27. package/dist/vendor/zephyr3d/backend-webgpu/dist/timestamp_query.js +297 -0
  28. package/dist/vendor/zephyr3d/backend-webgpu/dist/timestamp_query.js.map +1 -0
  29. package/dist/vendor/zephyr3d/device/dist/base_types.js.map +1 -1
  30. package/dist/vendor/zephyr3d/device/dist/device.js +27 -0
  31. package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
  32. package/dist/vendor/zephyr3d/device/dist/index.d.ts +81 -1
  33. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js +208 -1
  34. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js.map +1 -1
  35. package/dist/vendor/zephyr3d/loaders/dist/index.d.ts +8 -0
  36. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +334 -63
  37. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
  38. package/dist/vendor/zephyr3d/scene/dist/animation/morphtargetgrouptrack.js +66 -0
  39. package/dist/vendor/zephyr3d/scene/dist/animation/morphtargetgrouptrack.js.map +1 -0
  40. package/dist/vendor/zephyr3d/scene/dist/asset/model.js +9 -0
  41. package/dist/vendor/zephyr3d/scene/dist/asset/model.js.map +1 -1
  42. package/dist/vendor/zephyr3d/scene/dist/index.d.ts +260 -4
  43. package/dist/vendor/zephyr3d/scene/dist/index.js +7 -0
  44. package/dist/vendor/zephyr3d/scene/dist/index.js.map +1 -1
  45. package/dist/vendor/zephyr3d/scene/dist/posteffect/sao.js +1 -1
  46. package/dist/vendor/zephyr3d/scene/dist/posteffect/sao.js.map +1 -1
  47. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/executor.js +270 -1
  48. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/executor.js.map +1 -1
  49. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js +19 -1
  50. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  51. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/types.js.map +1 -1
  52. package/dist/vendor/zephyr3d/scene/dist/scene/scene.js +1 -0
  53. package/dist/vendor/zephyr3d/scene/dist/scene/scene.js.map +1 -1
  54. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +2 -1
  55. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
  56. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js +70 -1
  57. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js.map +1 -1
  58. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
  59. package/package.json +6 -6
  60. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js +0 -320
  61. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"animationset.js","sources":["../../src/animation/animationset.ts"],"sourcesContent":["import {\r\n weightedAverage,\r\n Disposable,\r\n Interpolator,\r\n Vector3,\r\n Observable,\r\n makeObservable\r\n} from '@zephyr3d/base';\r\nimport type { DRef, IDisposable, Nullable } from '@zephyr3d/base';\r\nimport { Quaternion } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../scene';\r\nimport { AnimationClip } from './animation';\r\nimport type { AnimationMarker, AnimationTimeRef } from './animation';\r\nimport type { AnimationTrack } from './animationtrack';\r\nimport { NodeRotationTrack } from './rotationtrack';\r\nimport { NodeEulerRotationTrack } from './eulerrotationtrack';\r\nimport { NodeTranslationTrack } from './translationtrack';\r\nimport { NodeScaleTrack } from './scaletrack';\r\nimport type { SkeletonBindPose, SkeletonRig, SkinBinding } from './skeleton';\r\nimport { HumanoidBodyRig } from './skeleton';\r\nimport type { SkeletalAnimationMaskOptions } from './animationmask';\r\nimport { createSkeletalMaskedAnimationClip } from './animationmask';\r\n\r\n/**\r\n * How a new playback copies phase from an existing active playback.\r\n *\r\n * - `'normalized'`: copy the source playback's normalized phase and map it into the new clip.\r\n * - `'time'`: copy the source playback's time in seconds.\r\n *\r\n * @public\r\n */\r\nexport type AnimationPlaybackSyncMode = 'normalized' | 'time';\r\n\r\n/**\r\n * Options for starting a playback at the same phase as another active playback.\r\n *\r\n * Use this when switching between matching locomotion clips, upper/lower body clips, or a\r\n * layered setup and a full-body clip that must stay phase-aligned.\r\n *\r\n * @public\r\n */\r\nexport type AnimationPlaybackSyncOptions = {\r\n /**\r\n * Active playback to synchronize with.\r\n *\r\n * The value is resolved as an active clip name first, then as an active playback id. Timeline\r\n * `play` steps also resolve local `id` references before forwarding the options to\r\n * `AnimationSet`.\r\n */\r\n target: string;\r\n /**\r\n * Synchronization mode. Defaults to `'normalized'`.\r\n */\r\n mode?: AnimationPlaybackSyncMode;\r\n /**\r\n * Optional phase offset.\r\n *\r\n * In `'normalized'` mode this is a normalized phase offset where 1 is one full cycle. In\r\n * `'time'` mode this is an offset in seconds.\r\n */\r\n offset?: number;\r\n /**\r\n * Whether the synchronized time wraps into the destination clip or range. Defaults to true.\r\n *\r\n * Set to false to clamp the initial time to the destination clip or range.\r\n */\r\n wrap?: boolean;\r\n};\r\n\r\n/**\r\n * Options for playing an animation.\r\n *\r\n * Controls looping, playback speed (including reverse), and fade-in blending.\r\n * @public\r\n **/\r\nexport type PlayAnimationOptions = {\r\n /**\r\n * Number of loops to play.\r\n *\r\n * - 0: infinite looping (default).\r\n * - n \\> 0: play exactly n loops (each loop is one full duration of the clip).\r\n */\r\n repeat?: number;\r\n /**\r\n * Playback speed multiplier.\r\n *\r\n * - 1: normal speed (default).\r\n * - \\>1: faster; \\<1: slower.\r\n * - Negative values play the clip in reverse. The initial `currentTime` will be set to the end.\r\n */\r\n speedRatio?: number;\r\n /**\r\n * Fade-in duration in seconds.\r\n *\r\n * Interpolates the animation weight from 0 to the clip's configured weight over this time.\r\n * Use together with `stopAnimation(..., { fadeOut })` for smooth cross-fading.\r\n * Default is 0 (no fade-in).\r\n */\r\n fadeIn?: number;\r\n /**\r\n * Fade-out duration in seconds used after the playback completes naturally.\r\n *\r\n * When greater than 0, the playback emits `complete` at the authored end time but remains active\r\n * for this duration while its weight fades to 0. This lets a following playback cross-fade from\r\n * the completed pose instead of snapping after the completed clip is removed.\r\n */\r\n completionFadeOut?: number;\r\n /**\r\n * Weight of the animation clip.\r\n *\r\n * Used during blending when multiple animations affect the same property.\r\n * Default is the clip's configured weight.\r\n */\r\n weight?: number;\r\n /**\r\n * Optional stable playback id. Useful for blueprint/editor references.\r\n */\r\n id?: string;\r\n /**\r\n * Logical layer/channel name used by higher-level controllers.\r\n */\r\n layer?: string;\r\n /**\r\n * Priority used by higher-level interrupt policies.\r\n */\r\n priority?: number;\r\n /**\r\n * Whether higher-level controllers may interrupt this playback.\r\n */\r\n interruptible?: boolean;\r\n /**\r\n * Optional sub-range to play.\r\n */\r\n range?: {\r\n start?: AnimationTimeRef;\r\n end?: AnimationTimeRef;\r\n };\r\n /**\r\n * Optional phase synchronization source used to choose the initial playback time.\r\n *\r\n * When omitted, playback starts at the range start (or clip start), and reverse playback starts\r\n * at the range end (or clip end). When set, the new playback starts at the phase copied from the\r\n * referenced active playback.\r\n */\r\n sync?: AnimationPlaybackSyncOptions;\r\n};\r\n\r\n/**\r\n * Options for stopping an animation.\r\n *\r\n * Allows a graceful fade-out instead of abrupt stop.\r\n * @public\r\n */\r\nexport type StopAnimationOptions = {\r\n /**\r\n * Fade-out duration in seconds.\r\n *\r\n * Interpolates the current animation weight down to 0 over this time.\r\n * Default is 0 (immediate stop).\r\n */\r\n fadeOut?: number;\r\n /**\r\n * Stop reason reported by playback events.\r\n */\r\n reason?: AnimationStopReason;\r\n};\r\n\r\n/** @public */\r\nexport type AnimationPlaybackState =\r\n | 'scheduled'\r\n | 'playing'\r\n | 'paused'\r\n | 'stopping'\r\n | 'stopped'\r\n | 'completed';\r\n\r\n/** @public */\r\nexport type AnimationStopReason = 'manual' | 'interrupted' | 'completed' | 'deleted' | 'replaced';\r\n\r\n/** @public */\r\nexport type AnimationPlaybackEvent = {\r\n playback: AnimationPlayback;\r\n animationSet: AnimationSet;\r\n clip: AnimationClip;\r\n time: number;\r\n normalizedTime: number;\r\n};\r\n\r\n/** @public */\r\nexport type AnimationMarkerEvent = AnimationPlaybackEvent & {\r\n marker: AnimationMarker;\r\n direction: 1 | -1;\r\n};\r\n\r\n/** @public */\r\nexport type AnimationFrameEvent = AnimationPlaybackEvent & {\r\n frame: number;\r\n};\r\n\r\n/** @public */\r\nexport type AnimationPlaybackStopEvent = AnimationPlaybackEvent & {\r\n reason: AnimationStopReason;\r\n};\r\n\r\n/** @public */\r\nexport type AnimationPlaybackEventMap = {\r\n start: [event: AnimationPlaybackEvent];\r\n loop: [event: AnimationPlaybackEvent];\r\n marker: [event: AnimationMarkerEvent];\r\n frame: [event: AnimationFrameEvent];\r\n complete: [event: AnimationPlaybackEvent];\r\n stop: [event: AnimationPlaybackStopEvent];\r\n pause: [event: AnimationPlaybackEvent];\r\n resume: [event: AnimationPlaybackEvent];\r\n};\r\n\r\n/** @public */\r\nexport type AnimationSetEventMap = {\r\n playbackstart: [event: AnimationPlaybackEvent];\r\n playbackloop: [event: AnimationPlaybackEvent];\r\n marker: [event: AnimationMarkerEvent];\r\n frame: [event: AnimationFrameEvent];\r\n playbackcomplete: [event: AnimationPlaybackEvent];\r\n playbackstop: [event: AnimationPlaybackStopEvent];\r\n playbackpause: [event: AnimationPlaybackEvent];\r\n playbackresume: [event: AnimationPlaybackEvent];\r\n};\r\n\r\nlet nextAnimationPlaybackId = 1;\r\n\r\n/**\r\n * Runtime handle for one playback of an AnimationClip.\r\n * @public\r\n */\r\nexport class AnimationPlayback extends Observable<AnimationPlaybackEventMap> {\r\n /** @internal */\r\n private readonly _animationSet: AnimationSet;\r\n /** @internal */\r\n private readonly _clip: AnimationClip;\r\n /** @internal */\r\n private readonly _options: PlayAnimationOptions;\r\n /** @internal */\r\n private readonly _id: string;\r\n /** @internal */\r\n private readonly _frameWaiters: Map<number, ((event: AnimationFrameEvent | undefined) => void)[]>;\r\n /** @internal */\r\n private _state: AnimationPlaybackState;\r\n /** @internal */\r\n private _time: number;\r\n /** @internal */\r\n private _weight: number;\r\n /** @internal */\r\n private _speedRatio: number;\r\n /** @internal */\r\n private _layer: string;\r\n /** @internal */\r\n private _priority: number;\r\n /** @internal */\r\n private _interruptible: boolean;\r\n\r\n constructor(animationSet: AnimationSet, clip: AnimationClip, options?: PlayAnimationOptions) {\r\n super();\r\n this._animationSet = animationSet;\r\n this._clip = clip;\r\n this._options = { ...(options ?? {}) };\r\n this._id = this._options.id ?? `animation-playback-${nextAnimationPlaybackId++}`;\r\n this._state = 'scheduled';\r\n this._speedRatio = this._options.speedRatio ?? 1;\r\n this._weight = this._options.weight ?? clip.weight ?? 1;\r\n this._time = this._speedRatio < 0 ? clip.timeDuration : 0;\r\n this._layer = this._options.layer ?? 'default';\r\n this._priority = this._options.priority ?? 0;\r\n this._interruptible = this._options.interruptible ?? true;\r\n this._frameWaiters = new Map();\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n get animationSet() {\r\n return this._animationSet;\r\n }\r\n get clip() {\r\n return this._clip;\r\n }\r\n get state() {\r\n return this._state;\r\n }\r\n get time() {\r\n return this._time;\r\n }\r\n set time(value: number) {\r\n this.seek(value);\r\n }\r\n get normalizedTime() {\r\n return this._clip.timeDuration > 0 ? this._time / this._clip.timeDuration : 0;\r\n }\r\n set normalizedTime(value: number) {\r\n this.seek(value * this._clip.timeDuration);\r\n }\r\n get weight() {\r\n return this._weight;\r\n }\r\n set weight(value: number) {\r\n this._animationSet.setPlaybackWeight(this, value);\r\n }\r\n get speedRatio() {\r\n return this._speedRatio;\r\n }\r\n set speedRatio(value: number) {\r\n this._animationSet.setPlaybackSpeedRatio(this, value);\r\n }\r\n get layer() {\r\n return this._layer;\r\n }\r\n get priority() {\r\n return this._priority;\r\n }\r\n get interruptible() {\r\n return this._interruptible;\r\n }\r\n play() {\r\n this._animationSet.startPlayback(this);\r\n return this;\r\n }\r\n pause() {\r\n this._animationSet.pausePlayback(this);\r\n return this;\r\n }\r\n resume() {\r\n this._animationSet.resumePlayback(this);\r\n return this;\r\n }\r\n stop(options?: StopAnimationOptions) {\r\n this._animationSet.stopPlayback(this, options);\r\n return this;\r\n }\r\n seek(time: number, options?: { emitEvents?: boolean; apply?: boolean }) {\r\n this._animationSet.seekPlayback(this, time, options);\r\n return this;\r\n }\r\n fadeTo(weight: number, duration: number) {\r\n this._animationSet.fadePlaybackTo(this, weight, duration);\r\n return this;\r\n }\r\n crossFadeTo(name: string, options?: PlayAnimationOptions & { duration?: number }) {\r\n const duration = Math.max(options?.duration ?? 0, 0);\r\n this.stop({ fadeOut: duration, reason: 'interrupted' });\r\n return this._animationSet.play(name, { ...options, fadeIn: duration });\r\n }\r\n waitForComplete() {\r\n return new Promise<this>((resolve) => {\r\n this.once('complete', () => resolve(this));\r\n });\r\n }\r\n waitForMarker(idOrName: string) {\r\n if (this._state === 'stopped' || this._state === 'completed') {\r\n return Promise.resolve(undefined);\r\n }\r\n return new Promise<AnimationMarkerEvent | undefined>((resolve) => {\r\n const handler = (event: AnimationMarkerEvent) => {\r\n if (event.marker.id === idOrName || event.marker.name === idOrName) {\r\n this.off('marker', handler);\r\n this.off('stop', stop);\r\n resolve(event);\r\n }\r\n };\r\n const stop = () => {\r\n this.off('marker', handler);\r\n this.off('stop', stop);\r\n resolve(undefined);\r\n };\r\n this.on('marker', handler);\r\n this.on('stop', stop);\r\n });\r\n }\r\n waitForFrame(frame: number) {\r\n if (this._state === 'stopped' || this._state === 'completed') {\r\n return Promise.resolve(undefined);\r\n }\r\n return new Promise<AnimationFrameEvent | undefined>((resolve) => {\r\n const waiters = this._frameWaiters.get(frame) ?? [];\r\n let settled = false;\r\n let stop: () => void;\r\n const wrappedResolve = (event: AnimationFrameEvent | undefined) => {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n this.off('stop', stop);\r\n resolve(event);\r\n };\r\n stop = () => {\r\n const current = this._frameWaiters.get(frame);\r\n if (current) {\r\n this._frameWaiters.set(\r\n frame,\r\n current.filter((item) => item !== wrappedResolve)\r\n );\r\n }\r\n wrappedResolve(undefined);\r\n };\r\n waiters.push(wrappedResolve);\r\n this._frameWaiters.set(frame, waiters);\r\n this.on('stop', stop);\r\n });\r\n }\r\n /** @internal */\r\n _getOptions() {\r\n return this._options;\r\n }\r\n /** @internal */\r\n _setState(state: AnimationPlaybackState) {\r\n this._state = state;\r\n }\r\n /** @internal */\r\n _setTime(time: number) {\r\n this._time = time;\r\n }\r\n /** @internal */\r\n _setWeight(weight: number) {\r\n this._weight = weight;\r\n }\r\n /** @internal */\r\n _setSpeedRatio(speedRatio: number) {\r\n this._speedRatio = speedRatio;\r\n }\r\n /** @internal */\r\n _getWatchedFrames() {\r\n return [...this._frameWaiters.keys()];\r\n }\r\n /** @internal */\r\n _emitStart(event: AnimationPlaybackEvent) {\r\n this.dispatchEvent('start', event);\r\n }\r\n /** @internal */\r\n _emitLoop(event: AnimationPlaybackEvent) {\r\n this.dispatchEvent('loop', event);\r\n }\r\n /** @internal */\r\n _emitMarker(event: AnimationMarkerEvent) {\r\n this.dispatchEvent('marker', event);\r\n }\r\n /** @internal */\r\n _emitFrame(event: AnimationFrameEvent) {\r\n this.dispatchEvent('frame', event);\r\n const waiters = this._frameWaiters.get(event.frame);\r\n if (waiters) {\r\n this._frameWaiters.delete(event.frame);\r\n waiters.forEach((resolve) => resolve(event));\r\n }\r\n }\r\n /** @internal */\r\n _emitComplete(event: AnimationPlaybackEvent) {\r\n this.dispatchEvent('complete', event);\r\n }\r\n /** @internal */\r\n _emitStop(event: AnimationPlaybackStopEvent) {\r\n this.dispatchEvent('stop', event);\r\n }\r\n /** @internal */\r\n _emitPause(event: AnimationPlaybackEvent) {\r\n this.dispatchEvent('pause', event);\r\n }\r\n /** @internal */\r\n _emitResume(event: AnimationPlaybackEvent) {\r\n this.dispatchEvent('resume', event);\r\n }\r\n}\r\n\r\n/** @public */\r\nexport type HumanoidRootMotionMode = 'scaled' | 'copy' | 'locked' | 'none';\r\n\r\n/** @public */\r\nexport type HumanoidRootMotionScaleMode = 'legLength' | 'none' | number;\r\n\r\n/** @public */\r\nexport type HumanoidRetargetAxisLocks = {\r\n x?: boolean;\r\n y?: boolean;\r\n z?: boolean;\r\n};\r\n\r\n/** @public */\r\nexport type CopyHumanoidAnimationOptions = {\r\n /**\r\n * Name for the new clip. Ignored when the legacy third `targetName` argument is a string.\r\n */\r\n targetName?: string;\r\n /**\r\n * How root translation should be handled.\r\n *\r\n * - `scaled`: retarget and scale root motion to the destination rig size.\r\n * - `copy`: retarget root motion without scale.\r\n * - `locked`: write a constant destination bind-pose root translation.\r\n * - `none`: do not create a root translation track.\r\n */\r\n rootMotion?: HumanoidRootMotionMode;\r\n /**\r\n * Scale used when `rootMotion` is `scaled`.\r\n */\r\n rootMotionScale?: HumanoidRootMotionScaleMode;\r\n /**\r\n * Axis locks applied after root motion retargeting. Locked axes stay at the destination bind pose.\r\n */\r\n lockRootMotionAxes?: HumanoidRetargetAxisLocks;\r\n /**\r\n * Whether to preserve non-root humanoid translation tracks. These are skipped by default because\r\n * retargeting humanoid joints should normally keep the destination skeleton lengths intact.\r\n */\r\n jointTranslations?: 'skip' | 'preserve';\r\n};\r\n\r\ntype JointRetargetRemap = {\r\n dstNode: SceneNode;\r\n dstJointIndex: number;\r\n srcNode: SceneNode;\r\n srcBindRotInv: Quaternion;\r\n dstBindRot: Quaternion;\r\n srcBindPos: Vector3;\r\n dstBindPos: Vector3;\r\n translationScale: number;\r\n translationRotation?: Quaternion;\r\n translationAxisLocks?: HumanoidRetargetAxisLocks;\r\n};\r\n\r\nfunction cloneInterpolator(src: Interpolator): Interpolator {\r\n return new Interpolator(\r\n src.mode,\r\n src.target,\r\n src.inputs instanceof Float32Array ? new Float32Array(src.inputs) : [...src.inputs],\r\n src.outputs instanceof Float32Array ? new Float32Array(src.outputs) : [...src.outputs]\r\n );\r\n}\r\n\r\nfunction createJointRetargetRemap(\r\n srcSkeleton: SkeletonRig,\r\n dstSkeleton: SkeletonRig,\r\n srcJoint: SceneNode,\r\n dstJoint: SceneNode,\r\n translationRotation?: Quaternion,\r\n translationScale?: number,\r\n translationAxisLocks?: HumanoidRetargetAxisLocks\r\n): JointRetargetRemap {\r\n const si = srcSkeleton.joints.indexOf(srcJoint);\r\n const di = dstSkeleton.joints.indexOf(dstJoint);\r\n const srcBindPose = srcSkeleton.bindPose[si];\r\n const dstBindPose = dstSkeleton.bindPose[di];\r\n const srcLen = srcBindPose.position.magnitude;\r\n const dstLen = dstBindPose.position.magnitude;\r\n return {\r\n dstNode: dstJoint,\r\n dstJointIndex: di,\r\n srcNode: srcJoint,\r\n srcBindRotInv: Quaternion.inverse(srcBindPose.rotation),\r\n dstBindRot: dstBindPose.rotation.clone(),\r\n srcBindPos: srcBindPose.position.clone(),\r\n dstBindPos: dstBindPose.position.clone(),\r\n translationScale: translationScale ?? (srcLen > 1e-6 ? dstLen / srcLen : 1),\r\n translationRotation,\r\n translationAxisLocks\r\n };\r\n}\r\n\r\nfunction createTranslationRetargetRemap(\r\n srcNode: SceneNode,\r\n dstNode: SceneNode,\r\n srcBindPos: Vector3,\r\n dstBindPos: Vector3,\r\n dstJointIndex: number,\r\n translationScale: number,\r\n translationRotation?: Quaternion,\r\n translationAxisLocks?: HumanoidRetargetAxisLocks\r\n): JointRetargetRemap {\r\n return {\r\n dstNode,\r\n dstJointIndex,\r\n srcNode,\r\n srcBindRotInv: Quaternion.identity(),\r\n dstBindRot: Quaternion.identity(),\r\n srcBindPos: srcBindPos.clone(),\r\n dstBindPos: dstBindPos.clone(),\r\n translationScale,\r\n translationRotation,\r\n translationAxisLocks\r\n };\r\n}\r\n\r\nfunction getBindPosition(skeleton: SkeletonRig, joint: SceneNode): Vector3 | null {\r\n const index = skeleton.joints.indexOf(joint);\r\n return index >= 0 ? skeleton.bindPose[index].position : null;\r\n}\r\n\r\nfunction getRigBindPoseForNode(skeleton: SkeletonRig, node: SceneNode): SkeletonBindPose {\r\n return (\r\n skeleton.getBindPoseForJoint(node) ??\r\n (node === skeleton.rootJoint\r\n ? skeleton.rootBindPose\r\n : {\r\n position: node.position,\r\n rotation: node.rotation,\r\n scale: node.scale\r\n })\r\n );\r\n}\r\n\r\nfunction getBindDistanceToAncestor(skeleton: SkeletonRig, joint: SceneNode, ancestor: SceneNode): number {\r\n let distance = 0;\r\n let node: SceneNode | null = joint;\r\n while (node && node !== ancestor) {\r\n const bindPosition = getBindPosition(skeleton, node);\r\n if (!bindPosition) {\r\n return 0;\r\n }\r\n distance += bindPosition.magnitude;\r\n node = node.parent;\r\n }\r\n return node === ancestor ? distance : 0;\r\n}\r\n\r\nfunction getHumanoidLegLength(skeleton: SkeletonRig, side: 'left' | 'right'): number {\r\n const mapping = skeleton.humanoidJointMapping;\r\n if (!mapping) {\r\n return 0;\r\n }\r\n const body = mapping.body;\r\n const hips = body[HumanoidBodyRig.Hips];\r\n const foot = side === 'left' ? body[HumanoidBodyRig.LeftFoot] : body[HumanoidBodyRig.RightFoot];\r\n const toes = side === 'left' ? body[HumanoidBodyRig.LeftToes] : body[HumanoidBodyRig.RightToes];\r\n return Math.max(\r\n getBindDistanceToAncestor(skeleton, foot, hips),\r\n getBindDistanceToAncestor(skeleton, toes, hips)\r\n );\r\n}\r\n\r\nfunction getHumanoidRootMotionScale(srcSkeleton: SkeletonRig, dstSkeleton: SkeletonRig): number {\r\n const srcLeftLeg = getHumanoidLegLength(srcSkeleton, 'left');\r\n const srcRightLeg = getHumanoidLegLength(srcSkeleton, 'right');\r\n const dstLeftLeg = getHumanoidLegLength(dstSkeleton, 'left');\r\n const dstRightLeg = getHumanoidLegLength(dstSkeleton, 'right');\r\n const srcLegLength = Math.max(srcLeftLeg, srcRightLeg);\r\n const dstLegLength = Math.max(dstLeftLeg, dstRightLeg);\r\n return srcLegLength > 1e-6 && dstLegLength > 1e-6 ? dstLegLength / srcLegLength : 1;\r\n}\r\n\r\nfunction findTranslationTrack(tracks: AnimationTrack[] | undefined): NodeTranslationTrack | null {\r\n return (tracks?.find((track) => track instanceof NodeTranslationTrack) ??\r\n null) as NodeTranslationTrack | null;\r\n}\r\n\r\nfunction applyTranslationAxisLocks(\r\n value: Vector3,\r\n bindValue: Vector3,\r\n locks: HumanoidRetargetAxisLocks | undefined\r\n) {\r\n if (locks?.x) {\r\n value.x = bindValue.x;\r\n }\r\n if (locks?.y) {\r\n value.y = bindValue.y;\r\n }\r\n if (locks?.z) {\r\n value.z = bindValue.z;\r\n }\r\n}\r\n\r\nfunction applyTranslationTangentAxisLocks(value: Vector3, locks: HumanoidRetargetAxisLocks | undefined) {\r\n if (locks?.x) {\r\n value.x = 0;\r\n }\r\n if (locks?.y) {\r\n value.y = 0;\r\n }\r\n if (locks?.z) {\r\n value.z = 0;\r\n }\r\n}\r\n\r\nfunction retargetRotation(qSrcAnim: Quaternion, remap: JointRetargetRemap, out: Quaternion): Quaternion {\r\n Quaternion.multiply(remap.srcBindRotInv, qSrcAnim, out);\r\n Quaternion.multiply(remap.dstBindRot, out, out);\r\n return out.inplaceNormalize();\r\n}\r\n\r\nfunction retargetRotationTangent(\r\n qSrcTangent: Quaternion,\r\n remap: JointRetargetRemap,\r\n out: Quaternion\r\n): Quaternion {\r\n Quaternion.multiply(remap.srcBindRotInv, qSrcTangent, out);\r\n Quaternion.multiply(remap.dstBindRot, out, out);\r\n return out;\r\n}\r\n\r\nfunction retargetTranslationValue(srcValue: Vector3, remap: JointRetargetRemap, out: Vector3): Vector3 {\r\n out.setXYZ(srcValue.x, srcValue.y, srcValue.z);\r\n out.subBy(remap.srcBindPos);\r\n out.scaleBy(remap.translationScale);\r\n if (remap.translationRotation) {\r\n remap.translationRotation.transform(out, out);\r\n }\r\n out.addBy(remap.dstBindPos);\r\n applyTranslationAxisLocks(out, remap.dstBindPos, remap.translationAxisLocks);\r\n return out;\r\n}\r\n\r\nfunction retargetTranslationTangent(srcValue: Vector3, remap: JointRetargetRemap, out: Vector3): Vector3 {\r\n out.setXYZ(srcValue.x, srcValue.y, srcValue.z);\r\n out.scaleBy(remap.translationScale);\r\n if (remap.translationRotation) {\r\n remap.translationRotation.transform(out, out);\r\n }\r\n applyTranslationTangentAxisLocks(out, remap.translationAxisLocks);\r\n return out;\r\n}\r\n\r\nfunction retargetRotationTrack(src: NodeRotationTrack, remap: JointRetargetRemap): NodeRotationTrack {\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 12 : 4;\r\n const numFrames = (src.interpolator.inputs as Float32Array).length;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const newOutputs = new Float32Array(srcOutputs.length);\r\n const t = isCubic ? 4 : 0;\r\n const q = new Quaternion();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride;\r\n q.setXYZW(\r\n srcOutputs[base + t],\r\n srcOutputs[base + t + 1],\r\n srcOutputs[base + t + 2],\r\n srcOutputs[base + t + 3]\r\n );\r\n retargetRotation(q, remap, q);\r\n if (isCubic) {\r\n // Cubic quaternion tangents live in the same component space, so apply the\r\n // same constant bind-pose transform without normalizing them.\r\n q.setXYZW(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2], srcOutputs[base + 3]);\r\n newOutputs.set(retargetRotationTangent(q, remap, q), base);\r\n newOutputs.set(\r\n retargetRotation(new Quaternion(srcOutputs.subarray(base + 4, base + 8)), remap, q),\r\n base + 4\r\n );\r\n q.setXYZW(srcOutputs[base + 8], srcOutputs[base + 9], srcOutputs[base + 10], srcOutputs[base + 11]);\r\n newOutputs.set(retargetRotationTangent(q, remap, q), base + 8);\r\n } else {\r\n newOutputs.set(q, base);\r\n }\r\n }\r\n return new NodeRotationTrack(\r\n new Interpolator(\r\n src.interpolator.mode,\r\n 'quat',\r\n new Float32Array(src.interpolator.inputs as Float32Array),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction retargetEulerToRotationTrack(\r\n src: NodeEulerRotationTrack,\r\n remap: JointRetargetRemap\r\n): NodeRotationTrack {\r\n const srcInputs = src.interpolator.inputs as Float32Array;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 9 : 3;\r\n const t = isCubic ? 3 : 0;\r\n const numFrames = srcInputs.length;\r\n const newOutputs = new Float32Array(numFrames * 4);\r\n const q = new Quaternion();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride + t;\r\n q.fromEulerAngle(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2]);\r\n retargetRotation(q, remap, q);\r\n newOutputs.set(q, f * 4);\r\n }\r\n return new NodeRotationTrack(\r\n new Interpolator(\r\n src.interpolator.mode === 'step' ? 'step' : 'linear',\r\n 'quat',\r\n new Float32Array(srcInputs),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction retargetTranslationTrack(\r\n src: NodeTranslationTrack,\r\n remap: JointRetargetRemap\r\n): NodeTranslationTrack {\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 9 : 3;\r\n const numFrames = (src.interpolator.inputs as Float32Array).length;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const newOutputs = new Float32Array(srcOutputs.length);\r\n const t = isCubic ? 3 : 0;\r\n const v = new Vector3();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride;\r\n v.setXYZ(srcOutputs[base + t], srcOutputs[base + t + 1], srcOutputs[base + t + 2]);\r\n retargetTranslationValue(v, remap, v);\r\n if (isCubic) {\r\n v.setXYZ(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2]);\r\n newOutputs.set(retargetTranslationTangent(v, remap, v), base);\r\n v.setXYZ(srcOutputs[base + 3], srcOutputs[base + 4], srcOutputs[base + 5]);\r\n newOutputs.set(retargetTranslationValue(v, remap, v), base + 3);\r\n v.setXYZ(srcOutputs[base + 6], srcOutputs[base + 7], srcOutputs[base + 8]);\r\n newOutputs.set(retargetTranslationTangent(v, remap, v), base + 6);\r\n } else {\r\n newOutputs.set(v, base);\r\n }\r\n }\r\n return new NodeTranslationTrack(\r\n new Interpolator(\r\n src.interpolator.mode,\r\n 'vec3',\r\n new Float32Array(src.interpolator.inputs as Float32Array),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction createConstantTranslationTrack(value: Vector3): NodeTranslationTrack {\r\n return new NodeTranslationTrack(\r\n new Interpolator('step', 'vec3', new Float32Array([0]), new Float32Array([value.x, value.y, value.z]))\r\n );\r\n}\r\n\r\nfunction findRotationTrack(\r\n tracks: AnimationTrack[] | undefined\r\n): NodeRotationTrack | NodeEulerRotationTrack | null {\r\n return (tracks?.find(\r\n (track) => track instanceof NodeRotationTrack || track instanceof NodeEulerRotationTrack\r\n ) ?? null) as NodeRotationTrack | NodeEulerRotationTrack | null;\r\n}\r\n\r\nfunction collectTrackTimes(track: AnimationTrack | null, times: Set<number>) {\r\n if (track instanceof NodeRotationTrack || track instanceof NodeEulerRotationTrack) {\r\n for (const time of track.interpolator.inputs as Float32Array) {\r\n times.add(time);\r\n }\r\n }\r\n}\r\n\r\nfunction sampleRotationTrack(\r\n track: NodeRotationTrack | NodeEulerRotationTrack | null,\r\n time: number,\r\n fallback: Quaternion,\r\n out: Quaternion\r\n): Quaternion {\r\n if (!track) {\r\n out.set(fallback);\r\n return out;\r\n }\r\n const state = track.calculateState({}, time);\r\n out.set(state);\r\n return out;\r\n}\r\n\r\nfunction bakeHumanoidRotationTracks(\r\n sourceClip: AnimationClip,\r\n srcSkeleton: SkeletonRig,\r\n dstSkeleton: SkeletonRig,\r\n srcRootRotation: Quaternion,\r\n dstRootRotation: Quaternion,\r\n dstClip: AnimationClip,\r\n remaps: JointRetargetRemap[]\r\n) {\r\n const rotationTracksByRemap = new Map<\r\n JointRetargetRemap,\r\n NodeRotationTrack | NodeEulerRotationTrack | null\r\n >();\r\n const times = new Set<number>([0, sourceClip.timeDuration]);\r\n const remapsByDstNode = new Map<object, JointRetargetRemap>();\r\n const srcJointSet = new Set(srcSkeleton.joints);\r\n const dstJointSet = new Set(dstSkeleton.joints);\r\n const srcBindRotByNode = new Map<SceneNode, Quaternion>();\r\n const dstBindRotByNode = new Map<SceneNode, Quaternion>();\r\n const srcRotationTrackByNode = new Map<SceneNode, NodeRotationTrack | NodeEulerRotationTrack | null>();\r\n\r\n for (let i = 0; i < srcSkeleton.joints.length; i++) {\r\n const joint = srcSkeleton.joints[i];\r\n srcBindRotByNode.set(joint, srcSkeleton.bindPose[i].rotation);\r\n const track = findRotationTrack(sourceClip.tracks.get(joint));\r\n srcRotationTrackByNode.set(joint, track);\r\n collectTrackTimes(track, times);\r\n }\r\n for (let i = 0; i < dstSkeleton.joints.length; i++) {\r\n dstBindRotByNode.set(dstSkeleton.joints[i], dstSkeleton.bindPose[i].rotation);\r\n }\r\n for (const remap of remaps) {\r\n const track = findRotationTrack(sourceClip.tracks.get(remap.srcNode));\r\n rotationTracksByRemap.set(remap, track);\r\n remapsByDstNode.set(remap.dstNode, remap);\r\n }\r\n const inputs = new Float32Array([...times].sort((a, b) => a - b));\r\n const srcBindWorldRots = new Map<SceneNode, Quaternion>();\r\n const dstBindWorldRots = new Map<SceneNode, Quaternion>();\r\n const srcAnimWorldRots = new Map<SceneNode, Quaternion>();\r\n const dstAnimWorldRots = new Map<SceneNode, Quaternion>();\r\n const outputsByRemap = new Map<JointRetargetRemap, Float32Array>();\r\n const tmpLocalRot = new Quaternion();\r\n const tmpWorldDelta = new Quaternion();\r\n const tmpParentInv = new Quaternion();\r\n\r\n for (const remap of remaps) {\r\n outputsByRemap.set(remap, new Float32Array(inputs.length * 4));\r\n }\r\n\r\n function getSrcBindWorldRot(node: SceneNode): Quaternion {\r\n let rot = srcBindWorldRots.get(node);\r\n if (!rot) {\r\n rot = (srcBindRotByNode.get(node) ?? Quaternion.identity()).clone();\r\n const parent = node.parent;\r\n if (parent && srcJointSet.has(parent)) {\r\n Quaternion.multiply(getSrcBindWorldRot(parent), rot, rot);\r\n } else {\r\n Quaternion.multiply(srcRootRotation, rot, rot);\r\n }\r\n srcBindWorldRots.set(node, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getDstBindWorldRot(node: SceneNode): Quaternion {\r\n let rot = dstBindWorldRots.get(node);\r\n if (!rot) {\r\n rot = (dstBindRotByNode.get(node) ?? Quaternion.identity()).clone();\r\n const parent = node.parent;\r\n if (parent && dstJointSet.has(parent)) {\r\n Quaternion.multiply(getDstBindWorldRot(parent), rot, rot);\r\n } else {\r\n Quaternion.multiply(dstRootRotation, rot, rot);\r\n }\r\n dstBindWorldRots.set(node, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getSrcAnimWorldRot(node: SceneNode, time: number): Quaternion {\r\n let rot = srcAnimWorldRots.get(node);\r\n if (!rot) {\r\n rot = new Quaternion();\r\n srcAnimWorldRots.set(node, rot);\r\n }\r\n const parent = node.parent;\r\n const parentWorldRot = parent && srcJointSet.has(parent) ? getSrcAnimWorldRot(parent, time) : null;\r\n sampleRotationTrack(\r\n srcRotationTrackByNode.get(node) ?? null,\r\n time,\r\n srcBindRotByNode.get(node) ?? Quaternion.identity(),\r\n tmpLocalRot\r\n );\r\n if (parentWorldRot) {\r\n Quaternion.multiply(parentWorldRot, tmpLocalRot, rot);\r\n } else {\r\n Quaternion.multiply(srcRootRotation, tmpLocalRot, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getDstAnimWorldRot(remap: JointRetargetRemap, time: number): Quaternion {\r\n let rot = dstAnimWorldRots.get(remap.dstNode);\r\n if (!rot) {\r\n rot = new Quaternion();\r\n dstAnimWorldRots.set(remap.dstNode, rot);\r\n }\r\n const srcBindWorldRot = getSrcBindWorldRot(remap.srcNode);\r\n const srcAnimWorldRot = getSrcAnimWorldRot(remap.srcNode, time);\r\n Quaternion.multiply(srcAnimWorldRot, Quaternion.inverse(srcBindWorldRot, tmpWorldDelta), tmpWorldDelta);\r\n Quaternion.multiply(tmpWorldDelta, getDstBindWorldRot(remap.dstNode), rot);\r\n return rot;\r\n }\r\n\r\n function getDstParentAnimWorldRot(node: SceneNode, time: number): Quaternion | null {\r\n const parent = node.parent;\r\n if (!parent || !dstJointSet.has(parent)) {\r\n return dstRootRotation;\r\n }\r\n const mappedParent = remapsByDstNode.get(parent);\r\n if (mappedParent) {\r\n return getDstAnimWorldRot(mappedParent, time);\r\n }\r\n let rot = dstAnimWorldRots.get(parent);\r\n if (!rot) {\r\n rot = (dstBindRotByNode.get(parent) ?? Quaternion.identity()).clone();\r\n const parentWorldRot = getDstParentAnimWorldRot(parent, time);\r\n if (parentWorldRot) {\r\n Quaternion.multiply(parentWorldRot, rot, rot);\r\n }\r\n dstAnimWorldRots.set(parent, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n for (let i = 0; i < inputs.length; i++) {\r\n const time = inputs[i];\r\n srcAnimWorldRots.clear();\r\n dstAnimWorldRots.clear();\r\n for (const remap of remaps) {\r\n const dstAnimWorldRot = getDstAnimWorldRot(remap, time);\r\n const parentWorldRot = getDstParentAnimWorldRot(remap.dstNode, time);\r\n if (parentWorldRot) {\r\n Quaternion.multiply(Quaternion.inverse(parentWorldRot, tmpParentInv), dstAnimWorldRot, tmpLocalRot);\r\n } else {\r\n tmpLocalRot.set(dstAnimWorldRot);\r\n }\r\n tmpLocalRot.inplaceNormalize();\r\n outputsByRemap.get(remap)!.set(tmpLocalRot, i * 4);\r\n }\r\n }\r\n\r\n for (const remap of remaps) {\r\n if (!rotationTracksByRemap.get(remap)) {\r\n continue;\r\n }\r\n const outputs = new Float32Array(outputsByRemap.get(remap)!);\r\n const track = new NodeRotationTrack(\r\n new Interpolator('linear', 'quat', new Float32Array(inputs), outputs)\r\n );\r\n track.name = 'rotation';\r\n track.target = remap.dstNode.persistentId;\r\n track.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(remap.dstNode, track);\r\n }\r\n}\r\n\r\ntype ActiveAnimationInfo = {\r\n playback: AnimationPlayback;\r\n currentTime: number;\r\n repeat: number;\r\n repeatCounter: number;\r\n weight: number;\r\n targetWeight: number;\r\n speedRatio: number;\r\n firstFrame: boolean;\r\n started: boolean;\r\n paused: boolean;\r\n fadeIn: number;\r\n fadeOut: number;\r\n fadeOutStart: number;\r\n fadeToStart: number;\r\n fadeToDuration: number;\r\n fadeFromWeight: number;\r\n fadeTargetWeight: number;\r\n animateTime: number;\r\n stopReason: AnimationStopReason;\r\n completed: boolean;\r\n rangeStart: number | null;\r\n rangeEnd: number | null;\r\n};\r\n\r\n/**\r\n * Animation set\r\n *\r\n * Manages a collection of named animation clips for a model and orchestrates:\r\n * - Playback state (time, loops, speed, weights, fade-in/out).\r\n * - Blending across multiple tracks targeting the same property via weighted averages.\r\n * - Skeleton usage and application for clips that drive skeletal animation.\r\n * - Active track registration and cleanup as clips start/stop.\r\n *\r\n * Usage:\r\n * - Create or retrieve `AnimationClip`s by name.\r\n * - Start playback with `playAnimation(name, options)`.\r\n * - Advance animation with `update(deltaSeconds)`.\r\n * - Optionally adjust weight while playing with `setAnimationWeight(name, weight)`.\r\n *\r\n * Lifetime:\r\n * - Disposing the set releases references to the model, clips, and clears active state.\r\n *\r\n * @public\r\n */\r\nexport class AnimationSet extends makeObservable(Disposable)<AnimationSetEventMap>() implements IDisposable {\r\n /** @internal */\r\n private _model: SceneNode;\r\n /** @internal */\r\n private _animations: Partial<Record<string, AnimationClip>>;\r\n /** @internal */\r\n private _skeletons: DRef<SkinBinding>[];\r\n /** @internal */\r\n private _rigs: DRef<SkeletonRig>[];\r\n /** @internal */\r\n private readonly _activeTracks: Map<object, Map<unknown, AnimationTrack[]>>;\r\n /** @internal */\r\n private readonly _activeSkinBindings: Map<SkinBinding, number>;\r\n /** @internal */\r\n private readonly _activeRigs: Map<SkeletonRig, number>;\r\n /** @internal */\r\n private readonly _activeAnimations: Map<AnimationClip, ActiveAnimationInfo>;\r\n /**\r\n * Callbacks driven by the same logical clock as the animations (see {@link update}).\r\n *\r\n * Used by higher-level constructs (e.g. timeline runners) that need to advance\r\n * wall-clock-independent timers in sync with playback, so they pause/scale with the\r\n * game clock instead of running on real time.\r\n * @internal\r\n */\r\n private readonly _timelineTickers: Set<(deltaInSeconds: number) => void>;\r\n /**\r\n * Create an AnimationSet controlling the provided model.\r\n *\r\n * @param model - The SceneNode (model root) controlled by this animation set.\r\n */\r\n constructor(model: SceneNode) {\r\n super();\r\n this._model = model;\r\n this._animations = {};\r\n this._activeTracks = new Map();\r\n this._activeSkinBindings = new Map();\r\n this._activeRigs = new Map();\r\n this._activeAnimations = new Map();\r\n this._skeletons = [];\r\n this._rigs = [];\r\n this._timelineTickers = new Set();\r\n }\r\n /**\r\n * Register a callback advanced by {@link update} using the same delta time as the animations.\r\n * @internal\r\n */\r\n _registerTimelineTicker(ticker: (deltaInSeconds: number) => void) {\r\n this._timelineTickers.add(ticker);\r\n }\r\n /**\r\n * Unregister a callback previously registered with {@link _registerTimelineTicker}.\r\n * @internal\r\n */\r\n _unregisterTimelineTicker(ticker: (deltaInSeconds: number) => void) {\r\n this._timelineTickers.delete(ticker);\r\n }\r\n /**\r\n * The model (SceneNode) controlled by this animation set.\r\n */\r\n get model() {\r\n return this._model;\r\n }\r\n /**\r\n * Number of animation clips registered in this set.\r\n */\r\n get numAnimations() {\r\n return Object.getOwnPropertyNames(this._animations).length;\r\n }\r\n /**\r\n * The skeletons used by animations in this set.\r\n */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n /**\r\n * The shared rigs used by animations in this set.\r\n */\r\n get rigs() {\r\n return this._rigs;\r\n }\r\n /**\r\n * Per-skin bindings used by skinned meshes in this set.\r\n */\r\n get skinBindings() {\r\n return this._skeletons;\r\n }\r\n private resolveRigByAnimationBindingId(id: string): SkeletonRig | null {\r\n return this._model.findSkeletonRigById(id) ?? this._model.findSkinBindingById(id)?.rig ?? null;\r\n }\r\n private resolveClipRig(clip: AnimationClip): SkeletonRig | null {\r\n let rig: SkeletonRig | null = null;\r\n for (const id of clip.skeletons) {\r\n const nextRig = this.resolveRigByAnimationBindingId(id);\r\n if (!nextRig) {\r\n continue;\r\n }\r\n if (!rig) {\r\n rig = nextRig;\r\n } else if (rig !== nextRig) {\r\n return null;\r\n }\r\n }\r\n return rig;\r\n }\r\n /**\r\n * Retrieve an animation clip by name.\r\n *\r\n * @param name - Name of the animation.\r\n * @returns The clip if present; otherwise null.\r\n */\r\n get(name: string) {\r\n return this._animations[name] ?? null;\r\n }\r\n /**\r\n * Create and register a new animation clip.\r\n *\r\n * @param name - Unique name for the animation clip.\r\n * @param embedded - Whether the clip is embedded/owned (implementation-specific). Default false.\r\n * @returns The created clip, or null if the name is empty or not unique.\r\n */\r\n createAnimation(name: string, embedded = false) {\r\n if (!name || this._animations[name]) {\r\n console.error('Animation must have unique name');\r\n return null;\r\n } else {\r\n const animation = new AnimationClip(name, this, embedded);\r\n this._animations[name] = animation;\r\n this._model.scene?.queueUpdateNode(this._model);\r\n return animation;\r\n }\r\n }\r\n /**\r\n * Delete and dispose an animation clip by name.\r\n *\r\n * - If the animation is currently playing, it is first stopped (immediately).\r\n *\r\n * @param name - Name of the animation to remove.\r\n */\r\n deleteAnimation(name: string) {\r\n const animation = this._animations[name];\r\n if (animation) {\r\n this.stopAnimation(name);\r\n delete this._animations[name];\r\n animation.dispose();\r\n }\r\n }\r\n /**\r\n * Get the list of all registered animation names.\r\n *\r\n * @returns An array of clip names.\r\n */\r\n getAnimationNames() {\r\n return Object.keys(this._animations);\r\n }\r\n /**\r\n * Advance and apply active animations.\r\n *\r\n * Responsibilities per call:\r\n * - Update time cursor for each active clip (respecting speedRatio and looping).\r\n * - Enforce repeat limits and apply fade-out termination if configured.\r\n * - For each animated target, blend active tracks (weighted by clip weight × fade-in × fade-out)\r\n * and apply the resulting state to the target.\r\n * - Apply shared rig modifiers once, then update skin binding palettes.\r\n *\r\n * @param deltaInSeconds - Time step in seconds since last update.\r\n */\r\n update(deltaInSeconds: number) {\r\n this._activeAnimations.forEach((v, k) => {\r\n if (!v.started) {\r\n v.started = true;\r\n const event = this.createPlaybackEvent(v, k);\r\n v.playback._emitStart(event);\r\n this.dispatchEvent('playbackstart', event);\r\n }\r\n if (v.paused) {\r\n return;\r\n }\r\n if (v.fadeOut > 0 && v.fadeOutStart < 0) {\r\n v.fadeOutStart = v.animateTime;\r\n }\r\n if (v.completed) {\r\n v.animateTime += Math.abs(deltaInSeconds * v.speedRatio);\r\n if (v.fadeOut > 0 && v.animateTime - v.fadeOutStart >= v.fadeOut) {\r\n this.stopAnimation(k.name, { reason: v.stopReason });\r\n }\r\n return;\r\n }\r\n // Update animation time\r\n if (v.firstFrame) {\r\n v.firstFrame = false;\r\n } else {\r\n const previousTime = v.currentTime;\r\n const timeAdvance = deltaInSeconds * v.speedRatio;\r\n v.currentTime += timeAdvance;\r\n v.animateTime += timeAdvance;\r\n const direction: 1 | -1 = timeAdvance >= 0 ? 1 : -1;\r\n if (k.timeDuration > 0) {\r\n if (v.rangeEnd !== null && v.speedRatio >= 0 && v.currentTime >= v.rangeEnd) {\r\n v.currentTime = v.rangeEnd;\r\n v.playback._setTime(v.currentTime);\r\n this.completePlayback(k, v);\r\n return;\r\n } else if (v.rangeStart !== null && v.speedRatio < 0 && v.currentTime <= v.rangeStart) {\r\n v.currentTime = v.rangeStart;\r\n v.playback._setTime(v.currentTime);\r\n this.completePlayback(k, v);\r\n return;\r\n } else if (v.currentTime > k.timeDuration) {\r\n const loops = Math.max(1, Math.floor(v.currentTime / k.timeDuration));\r\n if (v.repeat !== 0 && v.repeatCounter + loops >= v.repeat) {\r\n v.repeatCounter += loops;\r\n v.currentTime = k.timeDuration;\r\n v.playback._setTime(v.currentTime);\r\n this.emitCrossedMarkers(v, k, previousTime, v.currentTime, direction);\r\n this.emitCrossedFrames(v, k, previousTime, v.currentTime, direction);\r\n this.completePlayback(k, v);\r\n return;\r\n }\r\n v.repeatCounter += loops;\r\n v.currentTime %= k.timeDuration;\r\n const event = this.createPlaybackEvent(v, k);\r\n v.playback._emitLoop(event);\r\n this.dispatchEvent('playbackloop', event);\r\n } else if (v.currentTime < 0) {\r\n const loops = Math.max(1, Math.ceil(-v.currentTime / k.timeDuration));\r\n if (v.repeat !== 0 && v.repeatCounter + loops >= v.repeat) {\r\n v.repeatCounter += loops;\r\n v.currentTime = 0;\r\n v.playback._setTime(v.currentTime);\r\n this.emitCrossedMarkers(v, k, previousTime, v.currentTime, direction);\r\n this.emitCrossedFrames(v, k, previousTime, v.currentTime, direction);\r\n this.completePlayback(k, v);\r\n return;\r\n }\r\n v.repeatCounter += loops;\r\n v.currentTime = ((v.currentTime % k.timeDuration) + k.timeDuration) % k.timeDuration;\r\n const event = this.createPlaybackEvent(v, k);\r\n v.playback._emitLoop(event);\r\n this.dispatchEvent('playbackloop', event);\r\n }\r\n }\r\n v.playback._setTime(v.currentTime);\r\n this.emitCrossedMarkers(v, k, previousTime, v.currentTime, direction);\r\n this.emitCrossedFrames(v, k, previousTime, v.currentTime, direction);\r\n if (v.repeat !== 0 && v.repeatCounter >= v.repeat) {\r\n this.completePlayback(k, v);\r\n } else if (v.fadeOut > 0) {\r\n if (v.animateTime - v.fadeOutStart >= v.fadeOut) {\r\n this.stopAnimation(k.name, { reason: v.stopReason });\r\n }\r\n }\r\n if (v.fadeToDuration > 0) {\r\n const t = Math.min(1, (v.animateTime - v.fadeToStart) / v.fadeToDuration);\r\n v.weight = v.fadeFromWeight + (v.fadeTargetWeight - v.fadeFromWeight) * t;\r\n v.playback._setWeight(v.weight);\r\n if (t >= 1) {\r\n v.fadeToDuration = 0;\r\n }\r\n }\r\n }\r\n });\r\n // Update tracks\r\n this._activeTracks.forEach((v, k) => {\r\n v.forEach((alltracks) => {\r\n // Only deal with tracks which have not been removed\r\n const tracks = alltracks.filter(\r\n (track) => track.animation && this.isPlayingAnimation(track.animation.name)\r\n );\r\n if (tracks.length > 0) {\r\n const weights = tracks.map((track) => {\r\n const info = this._activeAnimations.get(track.animation!)!;\r\n const weight = info.weight;\r\n const fadeIn = info.fadeIn === 0 ? 1 : Math.min(1, info.animateTime / info.fadeIn);\r\n let fadeOut = 1;\r\n if (info.fadeOut !== 0) {\r\n fadeOut = 1 - (info.animateTime - info.fadeOutStart) / info.fadeOut;\r\n }\r\n return weight * fadeIn * fadeOut;\r\n });\r\n const states = tracks.map((track) => {\r\n const info = this._activeAnimations.get(track.animation!)!;\r\n const t = (info.currentTime / track.animation!.timeDuration) * track.getDuration();\r\n return track.calculateState(k, t);\r\n });\r\n const state = weightedAverage(weights, states, (a, b, t) => {\r\n return tracks[0].mixState(a, b, t);\r\n });\r\n tracks[0].applyState(k, state);\r\n }\r\n });\r\n });\r\n // Update rigs once before computing per-skin palettes.\r\n this._rigs.forEach((v) => {\r\n v.get()?.apply(deltaInSeconds);\r\n });\r\n this._skeletons.forEach((v) => {\r\n v.get()?.apply();\r\n });\r\n // Advance logical-clock timers (e.g. timeline `wait` steps) with the same delta time,\r\n // so they stay in sync with playback and pause/scale with the game clock.\r\n if (this._timelineTickers.size > 0) {\r\n this._timelineTickers.forEach((ticker) => ticker(deltaInSeconds));\r\n }\r\n }\r\n /**\r\n * Check whether an animation is currently playing.\r\n *\r\n * @param name - Optional animation name. If omitted, returns true if any animation is playing.\r\n * @returns True if playing; otherwise false.\r\n */\r\n isPlayingAnimation(name?: string) {\r\n if (name) {\r\n const animation = this._animations[name];\r\n return !!animation && this._activeAnimations.has(animation);\r\n }\r\n return this._activeAnimations.size > 0;\r\n }\r\n /**\r\n * Get an animation clip by name.\r\n *\r\n * Alias of `get(name)` returning a nullable type.\r\n *\r\n * @param name - Name of the animation.\r\n * @returns The clip if present; otherwise null.\r\n */\r\n getAnimationClip(name: string) {\r\n return this._animations[name] ?? null;\r\n }\r\n /**\r\n * Set the runtime blend weight for a currently playing animation.\r\n *\r\n * Has no effect if the clip is not active.\r\n *\r\n * @param name - Name of the playing animation.\r\n * @param weight - New weight value used during blending.\r\n */\r\n setAnimationWeight(name: string, weight: number) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n info.weight = weight;\r\n info.targetWeight = weight;\r\n info.playback._setWeight(weight);\r\n }\r\n }\r\n /**\r\n * Create a playback handle without starting it.\r\n */\r\n createPlayback(name: string, options?: PlayAnimationOptions) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return null;\r\n }\r\n return new AnimationPlayback(this, ani, options);\r\n }\r\n /**\r\n * Start an animation and return its playback handle.\r\n */\r\n play(name: string, options?: PlayAnimationOptions) {\r\n const playback = this.createPlayback(name, options);\r\n playback?.play();\r\n return playback;\r\n }\r\n /**\r\n * Get currently active playbacks.\r\n */\r\n getPlaybacks(name?: string) {\r\n const playbacks: AnimationPlayback[] = [];\r\n this._activeAnimations.forEach((info, clip) => {\r\n if (!name || clip.name === name) {\r\n playbacks.push(info.playback);\r\n }\r\n });\r\n return playbacks;\r\n }\r\n /**\r\n * Get the currently active playback for a clip.\r\n */\r\n getPlayback(name: string) {\r\n const clip = this._animations[name];\r\n return clip ? (this._activeAnimations.get(clip)?.playback ?? null) : null;\r\n }\r\n /**\r\n * Start (or update) playback of an animation clip.\r\n *\r\n * Behavior:\r\n * - If the clip is already playing, stops it first.\r\n * - Otherwise initializes playback state (repeat counter, speed, weight, initial time).\r\n * - Registers clip tracks and skeletons into the active sets for blending and application.\r\n *\r\n * @param name - Name of the animation to play.\r\n * @param options - Playback options (repeat, speedRatio, fadeIn).\r\n */\r\n playAnimation(name: string, options?: PlayAnimationOptions) {\r\n this.play(name, options);\r\n }\r\n /**\r\n * Start a previously created playback.\r\n * @internal\r\n */\r\n startPlayback(playback: AnimationPlayback) {\r\n const ani = playback.clip;\r\n if (!ani) {\r\n return;\r\n }\r\n const options = playback._getOptions();\r\n const fadeIn = Math.max(options?.fadeIn ?? 0, 0);\r\n const repeat = options?.repeat ?? 0;\r\n const speedRatio = playback.speedRatio;\r\n const weight = playback.weight;\r\n const rangeStart = ani.resolveTimeRef(options?.range?.start);\r\n const rangeEnd = ani.resolveTimeRef(options?.range?.end);\r\n const syncSource = this.resolvePlaybackSyncSource(options?.sync);\r\n const initialTime = this.computePlaybackInitialTime(\r\n ani,\r\n speedRatio,\r\n rangeStart,\r\n rangeEnd,\r\n options?.sync,\r\n syncSource\r\n );\r\n if (this.isPlayingAnimation(ani.name)) {\r\n this.stopAnimation(ani.name, { reason: 'replaced' });\r\n }\r\n playback._setState('playing');\r\n playback._setTime(initialTime);\r\n this._activeAnimations.set(ani, {\r\n playback,\r\n repeat,\r\n weight,\r\n targetWeight: weight,\r\n speedRatio,\r\n fadeIn,\r\n fadeOut: 0,\r\n repeatCounter: 0,\r\n currentTime: initialTime,\r\n animateTime: 0,\r\n fadeOutStart: 0,\r\n fadeToStart: 0,\r\n fadeToDuration: 0,\r\n fadeFromWeight: weight,\r\n fadeTargetWeight: weight,\r\n firstFrame: true,\r\n started: false,\r\n paused: false,\r\n stopReason: 'manual',\r\n completed: false,\r\n rangeStart,\r\n rangeEnd\r\n });\r\n ani.tracks?.forEach((v, k) => {\r\n let nodeTracks = this._activeTracks.get(k);\r\n if (!nodeTracks) {\r\n nodeTracks = new Map();\r\n this._activeTracks.set(k, nodeTracks);\r\n }\r\n for (const track of v) {\r\n const blendId = track.getBlendId();\r\n let blendedTracks = nodeTracks.get(blendId);\r\n if (!blendedTracks) {\r\n blendedTracks = [];\r\n nodeTracks.set(blendId, blendedTracks);\r\n }\r\n blendedTracks.push(track);\r\n }\r\n });\r\n ani.skeletons?.forEach((v, k) => {\r\n const rig = this.model.findSkeletonRigById(k);\r\n if (rig) {\r\n const refcount = this._activeRigs.get(rig);\r\n this._activeRigs.set(rig, refcount ? refcount + 1 : 1);\r\n rig.playing = true;\r\n return;\r\n }\r\n const binding = this.model.findSkinBindingById(k);\r\n if (binding) {\r\n const refcount = this._activeSkinBindings.get(binding);\r\n this._activeSkinBindings.set(binding, refcount ? refcount + 1 : 1);\r\n binding.playing = true;\r\n const rigRefcount = this._activeRigs.get(binding.rig);\r\n this._activeRigs.set(binding.rig, rigRefcount ? rigRefcount + 1 : 1);\r\n binding.rig.playing = true;\r\n }\r\n });\r\n }\r\n\r\n private resolvePlaybackSyncSource(sync: AnimationPlaybackSyncOptions | undefined) {\r\n if (!sync?.target) {\r\n return null;\r\n }\r\n const playback = this.resolveActivePlayback(sync.target);\r\n if (!playback) {\r\n return null;\r\n }\r\n const info = this._activeAnimations.get(playback.clip);\r\n return info?.playback === playback ? { playback, info, clip: playback.clip } : null;\r\n }\r\n\r\n private resolveActivePlayback(target: string): AnimationPlayback | null {\r\n const named = this.getPlayback(target);\r\n if (named) {\r\n return named;\r\n }\r\n for (const info of this._activeAnimations.values()) {\r\n if (info.playback.id === target) {\r\n return info.playback;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private computePlaybackInitialTime(\r\n clip: AnimationClip,\r\n speedRatio: number,\r\n rangeStart: number | null,\r\n rangeEnd: number | null,\r\n sync: AnimationPlaybackSyncOptions | undefined,\r\n syncSource: { info: ActiveAnimationInfo; clip: AnimationClip } | null\r\n ) {\r\n const fallback = speedRatio < 0 ? (rangeEnd ?? rangeStart ?? clip.timeDuration) : (rangeStart ?? 0);\r\n if (!sync || !syncSource) {\r\n return fallback;\r\n }\r\n const destination = this.getPlaybackEffectiveRange(clip, rangeStart, rangeEnd);\r\n if (destination.duration <= 0) {\r\n return fallback;\r\n }\r\n const offset = Number.isFinite(sync.offset) ? (sync.offset ?? 0) : 0;\r\n const wrap = sync.wrap ?? true;\r\n if ((sync.mode ?? 'normalized') === 'time') {\r\n return this.constrainPlaybackTime(syncSource.info.currentTime + offset, destination, wrap);\r\n }\r\n const source = this.getPlaybackEffectiveRange(\r\n syncSource.clip,\r\n syncSource.info.rangeStart,\r\n syncSource.info.rangeEnd\r\n );\r\n if (source.duration <= 0) {\r\n return fallback;\r\n }\r\n const phase = (syncSource.info.currentTime - source.start) / source.duration + offset;\r\n return this.constrainPlaybackTime(destination.start + phase * destination.duration, destination, wrap);\r\n }\r\n\r\n private getPlaybackEffectiveRange(clip: AnimationClip, rangeStart: number | null, rangeEnd: number | null) {\r\n const start = rangeStart ?? 0;\r\n const end = rangeEnd ?? clip.timeDuration;\r\n return start <= end\r\n ? { start, end, duration: end - start }\r\n : { start: end, end: start, duration: start - end };\r\n }\r\n\r\n private constrainPlaybackTime(\r\n time: number,\r\n range: { start: number; end: number; duration: number },\r\n wrap: boolean\r\n ) {\r\n if (!Number.isFinite(time)) {\r\n return range.start;\r\n }\r\n if (!wrap) {\r\n return Math.max(range.start, Math.min(range.end, time));\r\n }\r\n if (time >= range.start && time < range.end) {\r\n return time;\r\n }\r\n const offset = (((time - range.start) % range.duration) + range.duration) % range.duration;\r\n return range.start + offset;\r\n }\r\n /**\r\n * Stop a playback handle.\r\n * @internal\r\n */\r\n stopPlayback(playback: AnimationPlayback, options?: StopAnimationOptions) {\r\n if (this._activeAnimations.get(playback.clip)?.playback === playback) {\r\n this.stopAnimation(playback.clip.name, options);\r\n }\r\n }\r\n /**\r\n * Pause a playback handle.\r\n * @internal\r\n */\r\n pausePlayback(playback: AnimationPlayback) {\r\n const info = this._activeAnimations.get(playback.clip);\r\n if (info?.playback === playback && !info.paused) {\r\n info.paused = true;\r\n playback._setState('paused');\r\n const event = this.createPlaybackEvent(info, playback.clip);\r\n playback._emitPause(event);\r\n this.dispatchEvent('playbackpause', event);\r\n }\r\n }\r\n /**\r\n * Resume a playback handle.\r\n * @internal\r\n */\r\n resumePlayback(playback: AnimationPlayback) {\r\n const info = this._activeAnimations.get(playback.clip);\r\n if (info?.playback === playback && info.paused) {\r\n info.paused = false;\r\n playback._setState('playing');\r\n const event = this.createPlaybackEvent(info, playback.clip);\r\n playback._emitResume(event);\r\n this.dispatchEvent('playbackresume', event);\r\n }\r\n }\r\n /**\r\n * Seek a playback handle.\r\n * @internal\r\n */\r\n seekPlayback(\r\n playback: AnimationPlayback,\r\n time: number,\r\n options?: { emitEvents?: boolean; apply?: boolean }\r\n ) {\r\n const clip = playback.clip;\r\n const info = this._activeAnimations.get(clip);\r\n const duration = clip.timeDuration;\r\n const clampedTime = duration > 0 ? Math.max(0, Math.min(duration, time)) : Math.max(0, time);\r\n const previousTime = info?.currentTime ?? playback.time;\r\n playback._setTime(clampedTime);\r\n if (info?.playback === playback) {\r\n info.currentTime = clampedTime;\r\n if (options?.emitEvents) {\r\n const direction: 1 | -1 = clampedTime >= previousTime ? 1 : -1;\r\n this.emitCrossedMarkers(info, clip, previousTime, clampedTime, direction);\r\n this.emitCrossedFrames(info, clip, previousTime, clampedTime, direction);\r\n }\r\n if (options?.apply) {\r\n this.update(0);\r\n }\r\n }\r\n }\r\n /**\r\n * Set playback weight.\r\n * @internal\r\n */\r\n setPlaybackWeight(playback: AnimationPlayback, weight: number) {\r\n playback._setWeight(weight);\r\n const info = this._activeAnimations.get(playback.clip);\r\n if (info?.playback === playback) {\r\n info.weight = weight;\r\n info.targetWeight = weight;\r\n }\r\n }\r\n /**\r\n * Set playback speed ratio.\r\n * @internal\r\n */\r\n setPlaybackSpeedRatio(playback: AnimationPlayback, speedRatio: number) {\r\n playback._setSpeedRatio(speedRatio);\r\n const info = this._activeAnimations.get(playback.clip);\r\n if (info?.playback === playback) {\r\n info.speedRatio = speedRatio;\r\n }\r\n }\r\n /**\r\n * Fade playback weight to a target value.\r\n * @internal\r\n */\r\n fadePlaybackTo(playback: AnimationPlayback, weight: number, duration: number) {\r\n const info = this._activeAnimations.get(playback.clip);\r\n if (info?.playback === playback) {\r\n info.fadeFromWeight = info.weight;\r\n info.fadeTargetWeight = weight;\r\n info.targetWeight = weight;\r\n info.fadeToStart = info.animateTime;\r\n info.fadeToDuration = Math.max(duration, 0);\r\n if (info.fadeToDuration === 0) {\r\n info.weight = weight;\r\n playback._setWeight(weight);\r\n }\r\n } else {\r\n playback._setWeight(weight);\r\n }\r\n }\r\n private createPlaybackEvent(info: ActiveAnimationInfo, clip: AnimationClip): AnimationPlaybackEvent {\r\n return {\r\n playback: info.playback,\r\n animationSet: this,\r\n clip,\r\n time: info.currentTime,\r\n normalizedTime: clip.timeDuration > 0 ? info.currentTime / clip.timeDuration : 0\r\n };\r\n }\r\n private completePlayback(clip: AnimationClip, info: ActiveAnimationInfo) {\r\n if (info.completed) {\r\n return;\r\n }\r\n const event = this.createPlaybackEvent(info, clip);\r\n const completionFadeOut = Math.max(info.playback._getOptions().completionFadeOut ?? 0, 0);\r\n info.playback._setState('completed');\r\n info.playback._emitComplete(event);\r\n this.dispatchEvent('playbackcomplete', event);\r\n if (completionFadeOut > 0) {\r\n info.completed = true;\r\n info.fadeOut = completionFadeOut;\r\n info.fadeOutStart = info.animateTime;\r\n info.stopReason = 'completed';\r\n return;\r\n }\r\n this.stopAnimation(clip.name, { reason: 'completed' });\r\n }\r\n private emitCrossedMarkers(\r\n info: ActiveAnimationInfo,\r\n clip: AnimationClip,\r\n fromTime: number,\r\n toTime: number,\r\n direction: 1 | -1\r\n ) {\r\n for (const marker of this.getCrossedMarkers(clip, fromTime, toTime, direction)) {\r\n const event: AnimationMarkerEvent = {\r\n ...this.createPlaybackEvent(info, clip),\r\n marker,\r\n direction\r\n };\r\n info.playback._emitMarker(event);\r\n this.dispatchEvent('marker', event);\r\n }\r\n }\r\n private emitCrossedFrames(\r\n info: ActiveAnimationInfo,\r\n clip: AnimationClip,\r\n fromTime: number,\r\n toTime: number,\r\n direction: 1 | -1\r\n ) {\r\n for (const frame of info.playback._getWatchedFrames()) {\r\n const frameTime = frame / clip.frameRate;\r\n const crossed =\r\n direction >= 0\r\n ? this.crossedForward(fromTime, toTime, frameTime, clip.timeDuration)\r\n : this.crossedBackward(fromTime, toTime, frameTime, clip.timeDuration);\r\n if (crossed) {\r\n const event: AnimationFrameEvent = {\r\n ...this.createPlaybackEvent(info, clip),\r\n frame\r\n };\r\n info.playback._emitFrame(event);\r\n this.dispatchEvent('frame', event);\r\n }\r\n }\r\n }\r\n private getCrossedMarkers(\r\n clip: AnimationClip,\r\n fromTime: number,\r\n toTime: number,\r\n direction: 1 | -1\r\n ): AnimationMarker[] {\r\n return clip.markers.filter((marker) => {\r\n const markerTime = clip.resolveMarkerTime(marker);\r\n if (markerTime === null) {\r\n return false;\r\n }\r\n return direction >= 0\r\n ? this.crossedForward(fromTime, toTime, markerTime, clip.timeDuration)\r\n : this.crossedBackward(fromTime, toTime, markerTime, clip.timeDuration);\r\n });\r\n }\r\n private crossedForward(fromTime: number, toTime: number, targetTime: number, duration: number) {\r\n return toTime >= fromTime\r\n ? targetTime > fromTime && targetTime <= toTime\r\n : (duration > 0 && targetTime > fromTime && targetTime <= duration) || targetTime <= toTime;\r\n }\r\n private crossedBackward(fromTime: number, toTime: number, targetTime: number, duration: number) {\r\n return toTime <= fromTime\r\n ? targetTime < fromTime && targetTime >= toTime\r\n : (duration > 0 && targetTime < fromTime && targetTime >= 0) || targetTime >= toTime;\r\n }\r\n /**\r\n * Stop playback of an animation clip.\r\n *\r\n * Behavior:\r\n * - If `options.fadeOut > 0`, marks the clip for fade-out; actual removal occurs after fade completes.\r\n * - If `fadeOut` is 0 or omitted, immediately:\r\n * - Removes the clip from active animations.\r\n * - Unregisters its tracks from active track maps.\r\n * - Decrements skeleton reference counts; resets and removes skeletons when refcount reaches 0.\r\n *\r\n * @param name - Name of the animation to stop.\r\n * @param options - Optional fade-out configuration.\r\n */\r\n stopAnimation(name: string, options?: StopAnimationOptions) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n const fadeOut = Math.max(options?.fadeOut ?? 0, 0);\r\n const reason = options?.reason ?? 'manual';\r\n if (fadeOut !== 0) {\r\n info.fadeOut = fadeOut;\r\n info.fadeOutStart = -1;\r\n info.stopReason = reason;\r\n info.playback._setState('stopping');\r\n } else {\r\n this._activeAnimations.delete(ani);\r\n this._activeTracks.forEach((v) => {\r\n v.forEach((tracks, id) => {\r\n v.set(\r\n id,\r\n tracks.filter((track) => track.animation !== ani)\r\n );\r\n });\r\n });\r\n ani.skeletons?.forEach((v, k) => {\r\n const rig = this.model.findSkeletonRigById(k);\r\n if (rig) {\r\n const refcount = this._activeRigs.get(rig)!;\r\n if (refcount === 1) {\r\n rig.reset();\r\n this._activeRigs.delete(rig);\r\n } else {\r\n this._activeRigs.set(rig, refcount - 1);\r\n }\r\n return;\r\n }\r\n const binding = this.model.findSkinBindingById(k);\r\n if (binding) {\r\n const refcount = this._activeSkinBindings.get(binding)!;\r\n if (refcount === 1) {\r\n binding.reset();\r\n this._activeSkinBindings.delete(binding);\r\n } else {\r\n this._activeSkinBindings.set(binding, refcount - 1);\r\n }\r\n const rigRefcount = this._activeRigs.get(binding.rig)!;\r\n if (rigRefcount === 1) {\r\n binding.rig.reset();\r\n this._activeRigs.delete(binding.rig);\r\n } else {\r\n this._activeRigs.set(binding.rig, rigRefcount - 1);\r\n }\r\n }\r\n });\r\n const event: AnimationPlaybackStopEvent = {\r\n ...this.createPlaybackEvent(info, ani),\r\n reason\r\n };\r\n if (reason !== 'completed') {\r\n info.playback._setState('stopped');\r\n }\r\n info.playback._emitStop(event);\r\n this.dispatchEvent('playbackstop', event);\r\n }\r\n }\r\n }\r\n /**\r\n * Create a skeletal-only masked clip from an existing clip in this set.\r\n *\r\n * The generated clip is a regular `AnimationClip`: it contains cloned node transform tracks\r\n * for the selected rig joints and can be played/blended through the normal animation system.\r\n * Non-skeletal tracks are skipped by default.\r\n *\r\n * @param sourceName - Name of the source clip.\r\n * @param targetName - Name of the generated clip.\r\n * @param options - Humanoid semantic or joint-name based mask options.\r\n * @returns The generated clip, or null on failure.\r\n */\r\n createSkeletalMaskedAnimation(\r\n sourceName: string,\r\n targetName: string,\r\n options: SkeletalAnimationMaskOptions\r\n ): AnimationClip | null {\r\n const sourceClip = this.get(sourceName);\r\n if (!sourceClip) {\r\n console.error(`createSkeletalMaskedAnimation: animation '${sourceName}' not found`);\r\n return null;\r\n }\r\n const rig = this.resolveClipRig(sourceClip);\r\n if (!rig) {\r\n console.error(`createSkeletalMaskedAnimation: source animation must resolve to exactly one rig`);\r\n return null;\r\n }\r\n return createSkeletalMaskedAnimationClip(this, sourceClip, targetName, rig, options);\r\n }\r\n /**\r\n * Copy a humanoid animation clip from another AnimationSet into this one via humanoid rig mapping.\r\n *\r\n * Prerequisites:\r\n * - Both source and destination skeletons must have a non-null `humanoidJointMapping`.\r\n * - Joints are matched by shared `HumanoidBodyRig` / `HumanoidHandRig` keys instead of joint names.\r\n * - The source clip must exist in `sourceSet` and must be driven by exactly one skeleton.\r\n *\r\n * @param sourceSet - The AnimationSet to copy from.\r\n * @param animationName - Name of the clip to copy.\r\n * @param targetName - Name for the new clip in this set. Defaults to `animationName`.\r\n * @returns The newly created AnimationClip, or null on failure.\r\n */\r\n copyHumanoidAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n options?: CopyHumanoidAnimationOptions\r\n ): AnimationClip | null;\r\n copyHumanoidAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetName?: string,\r\n options?: CopyHumanoidAnimationOptions\r\n ): AnimationClip | null;\r\n copyHumanoidAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetNameOrOptions?: string | CopyHumanoidAnimationOptions,\r\n copyOptions?: CopyHumanoidAnimationOptions\r\n ): AnimationClip | null {\r\n const options =\r\n typeof targetNameOrOptions === 'string' ? (copyOptions ?? {}) : (targetNameOrOptions ?? {});\r\n const destName =\r\n typeof targetNameOrOptions === 'string' ? targetNameOrOptions : (options.targetName ?? animationName);\r\n const rootMotion = options.rootMotion ?? 'scaled';\r\n const jointTranslations = options.jointTranslations ?? 'skip';\r\n const sourceClip = sourceSet.get(animationName);\r\n if (!sourceClip) {\r\n console.error(`copyHumanoidAnimationFrom: animation '${animationName}' not found in source set`);\r\n return null;\r\n }\r\n if (this._animations[destName]) {\r\n console.error(`copyHumanoidAnimationFrom: animation '${destName}' already exists in target set`);\r\n return null;\r\n }\r\n\r\n const srcSkeletonId = [...sourceClip.skeletons][0] ?? '';\r\n const srcSkeleton = sourceSet.resolveClipRig(sourceClip);\r\n if (!srcSkeleton) {\r\n console.error(\r\n `copyHumanoidAnimationFrom: source animation clip must resolve to exactly one humanoid rig`\r\n );\r\n return null;\r\n }\r\n\r\n // Check that source skeleton has humanoid mapping\r\n const srcHumanoidMapping = srcSkeleton.humanoidJointMapping;\r\n if (!srcHumanoidMapping) {\r\n console.error(`copyHumanoidAnimationFrom: source skeleton does not have a humanoid joint mapping`);\r\n return null;\r\n }\r\n\r\n const nodeMap = new Map<object, SceneNode>();\r\n const jointRemapBySrcNode = new Map<object, JointRetargetRemap>();\r\n\r\n // Find a destination skeleton that has a humanoid mapping and share at least the body rig keys\r\n let srcJointsFiltered: SceneNode[] = [];\r\n let dstJointsFiltered: SceneNode[] = [];\r\n\r\n const dstSkeleton = this._rigs\r\n .map((ref) => ref.get())\r\n .find((sk) => {\r\n if (!sk) {\r\n return false;\r\n }\r\n // Check that destination skeleton has humanoid mapping\r\n const dstHumanoidMapping = sk.humanoidJointMapping;\r\n if (!dstHumanoidMapping) {\r\n return false;\r\n }\r\n\r\n // Collect matched (srcJoint, dstJoint) pairs via shared humanoid rig keys\r\n const srcMatched: SceneNode[] = [];\r\n const dstMatched: SceneNode[] = [];\r\n\r\n // Match body rig joints\r\n for (const key of Object.keys(srcHumanoidMapping.body) as (keyof typeof srcHumanoidMapping.body)[]) {\r\n const srcJoint = srcHumanoidMapping.body[key];\r\n const dstJoint = dstHumanoidMapping.body[key];\r\n if (srcJoint && dstJoint) {\r\n srcMatched.push(srcJoint);\r\n dstMatched.push(dstJoint);\r\n }\r\n }\r\n\r\n // Match left hand rig joints only when both sides define them; skip silently if either is absent\r\n if (srcHumanoidMapping.leftHand && dstHumanoidMapping.leftHand) {\r\n for (const key of Object.keys(\r\n srcHumanoidMapping.leftHand\r\n ) as (keyof typeof srcHumanoidMapping.leftHand)[]) {\r\n const srcJoint = srcHumanoidMapping.leftHand[key];\r\n const dstJoint = dstHumanoidMapping.leftHand[key];\r\n if (srcJoint && dstJoint) {\r\n srcMatched.push(srcJoint);\r\n dstMatched.push(dstJoint);\r\n }\r\n }\r\n }\r\n\r\n // Match right hand rig joints only when both sides define them; skip silently if either is absent\r\n if (srcHumanoidMapping.rightHand && dstHumanoidMapping.rightHand) {\r\n for (const key of Object.keys(\r\n srcHumanoidMapping.rightHand\r\n ) as (keyof typeof srcHumanoidMapping.rightHand)[]) {\r\n const srcJoint = srcHumanoidMapping.rightHand[key];\r\n const dstJoint = dstHumanoidMapping.rightHand[key];\r\n if (srcJoint && dstJoint) {\r\n srcMatched.push(srcJoint);\r\n dstMatched.push(dstJoint);\r\n }\r\n }\r\n }\r\n\r\n if (srcMatched.length === 0) {\r\n return false;\r\n }\r\n\r\n srcJointsFiltered = srcMatched;\r\n dstJointsFiltered = dstMatched;\r\n return true;\r\n });\r\n\r\n if (!dstSkeleton) {\r\n console.error(\r\n `copyHumanoidAnimationFrom: no matching humanoid skeleton in target set for '${srcSkeletonId}'`\r\n );\r\n return null;\r\n }\r\n\r\n // Compute the world-space rotation of the parent chain above a motion node,\r\n // walking ALL ancestor nodes up to (but not including) the model root.\r\n // This must include non-joint nodes such as \"Armature\" in Mixamo rigs, which\r\n // carry a 90° X rotation that is NOT captured by humanoidRootRotation (which\r\n // only traverses nodes inside the skeleton joints list).\r\n function computeParentChainRotation(\r\n node: SceneNode,\r\n modelRoot: SceneNode,\r\n skeleton: SkeletonRig\r\n ): Quaternion {\r\n const result = Quaternion.identity();\r\n const jointSet = new Set(skeleton.joints);\r\n let p = node.parent;\r\n while (p && p !== modelRoot) {\r\n if (!jointSet.has(p)) {\r\n Quaternion.multiply(p.rotation, result, result);\r\n }\r\n p = p.parent;\r\n }\r\n return result;\r\n }\r\n\r\n const srcHipsNode = srcSkeleton.humanoidJointMapping!.body[HumanoidBodyRig.Hips];\r\n const dstHipsNode = dstSkeleton.humanoidJointMapping!.body[HumanoidBodyRig.Hips];\r\n const srcRootNode = srcSkeleton.rootJoint ?? srcHipsNode;\r\n const dstRootNode = dstSkeleton.rootJoint ?? dstHipsNode;\r\n const srcRootRot = computeParentChainRotation(srcRootNode, sourceSet.model, srcSkeleton);\r\n const dstRootRot = computeParentChainRotation(dstRootNode, this._model, dstSkeleton);\r\n const srcRootTranslationTrack = findTranslationTrack(sourceClip.tracks.get(srcRootNode));\r\n const srcFallbackHipsTranslationTrack =\r\n !srcRootTranslationTrack && srcRootNode !== srcHipsNode\r\n ? findTranslationTrack(sourceClip.tracks.get(srcHipsNode))\r\n : null;\r\n const srcMotionTrack = srcRootTranslationTrack ?? srcFallbackHipsTranslationTrack;\r\n const srcMotionNode = srcRootTranslationTrack\r\n ? srcRootNode\r\n : srcFallbackHipsTranslationTrack\r\n ? srcHipsNode\r\n : null;\r\n const srcMotionParentRot = srcMotionNode\r\n ? computeParentChainRotation(srcMotionNode, sourceSet.model, srcSkeleton)\r\n : srcRootRot;\r\n const rootTranslationRotation = Quaternion.multiply(Quaternion.inverse(dstRootRot), srcMotionParentRot);\r\n const rootTranslationScale =\r\n rootMotion === 'scaled'\r\n ? typeof options.rootMotionScale === 'number'\r\n ? options.rootMotionScale\r\n : options.rootMotionScale === 'none'\r\n ? 1\r\n : getHumanoidRootMotionScale(srcSkeleton, dstSkeleton)\r\n : 1;\r\n const jointRemaps: JointRetargetRemap[] = [];\r\n const mappedSrcNodes = new Set<SceneNode>();\r\n const mappedDstNodes = new Set<SceneNode>();\r\n // Build remap for matched joint pairs\r\n for (let fi = 0; fi < srcJointsFiltered.length; fi++) {\r\n const srcJoint = srcJointsFiltered[fi];\r\n const dstJoint = dstJointsFiltered[fi];\r\n if (mappedSrcNodes.has(srcJoint) || mappedDstNodes.has(dstJoint)) {\r\n continue;\r\n }\r\n mappedSrcNodes.add(srcJoint);\r\n mappedDstNodes.add(dstJoint);\r\n nodeMap.set(srcJoint, dstJoint);\r\n const remap = createJointRetargetRemap(srcSkeleton, dstSkeleton, srcJoint, dstJoint);\r\n jointRemaps.push(remap);\r\n jointRemapBySrcNode.set(srcJoint, remap);\r\n }\r\n\r\n const dstClip = this.createAnimation(destName);\r\n if (!dstClip) {\r\n return null;\r\n }\r\n dstClip.timeDuration = sourceClip.timeDuration;\r\n dstClip.weight = sourceClip.weight;\r\n dstClip.autoPlay = sourceClip.autoPlay;\r\n\r\n // Register destination skeleton\r\n dstClip.addSkeleton(dstSkeleton.persistentId);\r\n\r\n bakeHumanoidRotationTracks(\r\n sourceClip,\r\n srcSkeleton,\r\n dstSkeleton,\r\n srcRootRot,\r\n dstRootRot,\r\n dstClip,\r\n jointRemaps\r\n );\r\n\r\n if (rootMotion !== 'none') {\r\n const dstRootBindPose = getRigBindPoseForNode(dstSkeleton, dstRootNode);\r\n let dstRootTrack: NodeTranslationTrack | null = null;\r\n if (rootMotion === 'locked') {\r\n dstRootTrack = createConstantTranslationTrack(dstRootBindPose.position);\r\n } else if (srcMotionTrack && srcMotionNode) {\r\n const srcMotionBindPose = getRigBindPoseForNode(srcSkeleton, srcMotionNode);\r\n const rootRemap = createTranslationRetargetRemap(\r\n srcMotionNode,\r\n dstRootNode,\r\n srcMotionBindPose.position,\r\n dstRootBindPose.position,\r\n dstSkeleton.joints.indexOf(dstRootNode),\r\n rootTranslationScale,\r\n rootTranslationRotation,\r\n options.lockRootMotionAxes\r\n );\r\n dstRootTrack = retargetTranslationTrack(srcMotionTrack, rootRemap);\r\n }\r\n if (dstRootTrack) {\r\n dstRootTrack.name = srcMotionTrack?.name ?? 'translation';\r\n dstRootTrack.target = dstRootNode.persistentId;\r\n dstRootTrack.jointIndex = dstSkeleton.joints.indexOf(dstRootNode);\r\n dstClip.addTrack(dstRootNode, dstRootTrack);\r\n }\r\n }\r\n\r\n for (const srcNode of srcJointsFiltered) {\r\n const srcTracks = sourceClip.tracks.get(srcNode);\r\n if (!srcTracks) {\r\n // Not every humanoid joint must have a track; skip silently\r\n continue;\r\n }\r\n const dstNode = nodeMap.get(srcNode)!;\r\n const remap = jointRemapBySrcNode.get(srcNode)!;\r\n\r\n for (const srcTrack of srcTracks) {\r\n let dstTrack: AnimationTrack;\r\n if (srcTrack instanceof NodeRotationTrack) {\r\n continue;\r\n } else if (srcTrack instanceof NodeEulerRotationTrack) {\r\n continue;\r\n } else if (srcTrack instanceof NodeTranslationTrack) {\r\n if (srcNode === srcRootNode || srcTrack === srcMotionTrack || jointTranslations !== 'preserve') {\r\n continue;\r\n }\r\n dstTrack = retargetTranslationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeScaleTrack) {\r\n dstTrack = new NodeScaleTrack(cloneInterpolator(srcTrack.interpolator));\r\n } else {\r\n console.warn(\r\n `copyHumanoidAnimationFrom: unsupported track type '${srcTrack.constructor.name}', skipping`\r\n );\r\n continue;\r\n }\r\n\r\n dstTrack.name = srcTrack.name;\r\n dstTrack.target = dstNode.persistentId;\r\n dstTrack.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(dstNode, dstTrack);\r\n }\r\n }\r\n\r\n return dstClip;\r\n }\r\n /**\r\n * Copy an animation clip from another AnimationSet into this one.\r\n *\r\n * Prerequisites:\r\n * - Both sets must reference skeletons with identical joint names and counts.\r\n * - The source clip must exist in `sourceSet`.\r\n *\r\n * @param sourceSet - The AnimationSet to copy from.\r\n * @param animationName - Name of the clip to copy.\r\n * @param targetName - Name for the new clip in this set. Defaults to `animationName`.\r\n * @param excludeJoint - Optional predicate; joints whose name returns true are excluded from\r\n * skeleton structure matching.\r\n * @returns The newly created AnimationClip, or null on failure.\r\n *\r\n * @deprecated Use AnimationSet.copyHumanoidAnimationFrom instead.\r\n */\r\n copyAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetName?: string,\r\n excludeJoint?: (jointName: string) => boolean\r\n ): AnimationClip | null {\r\n const destName = targetName ?? animationName;\r\n const sourceClip = sourceSet.get(animationName);\r\n if (!sourceClip) {\r\n console.error(`copyAnimationFrom: animation '${animationName}' not found in source set`);\r\n return null;\r\n }\r\n if (this._animations[destName]) {\r\n console.error(`copyAnimationFrom: animation '${destName}' already exists in target set`);\r\n return null;\r\n }\r\n\r\n const srcSkeletonId = [...sourceClip.skeletons][0] ?? '';\r\n const srcSkeleton = sourceSet.resolveClipRig(sourceClip);\r\n if (!srcSkeleton) {\r\n console.error(`copyAnimationFrom: source animation clip must resolve to exactly one rig`);\r\n return null;\r\n }\r\n const nodeMap = new Map<object, SceneNode>();\r\n const jointRemapBySrcNode = new Map<object, JointRetargetRemap>();\r\n\r\n const jointsFiltered = srcSkeleton.joints.filter((j) => !excludeJoint?.(j.name));\r\n const srcRootNode = findRootJoint(jointsFiltered);\r\n if (!srcRootNode) {\r\n console.error(`copyAnimationFrom: cannot determine the root joint for source skeleton`);\r\n return null;\r\n }\r\n // Build filtered joint lists for matching (exclude joints rejected by filterJoint)\r\n const srcJointsFiltered = sortJoints(srcRootNode, jointsFiltered);\r\n if (!srcJointsFiltered) {\r\n console.error(`copyAnimationFrom: invalid source skeleton structure`);\r\n return null;\r\n }\r\n let dstJointsFiltered: SceneNode[] = [];\r\n const dstSkeleton = this._rigs\r\n .map((ref) => ref.get())\r\n .find((sk) => {\r\n if (!sk) {\r\n return false;\r\n }\r\n const jointsFiltered = sk.joints.filter((j) => !excludeJoint?.(j.name));\r\n if (jointsFiltered.length !== srcJointsFiltered.length) {\r\n return false;\r\n }\r\n const rootNode = findRootJoint(jointsFiltered);\r\n if (!rootNode) {\r\n return false;\r\n }\r\n const sortedJointsFiltered = sortJoints(rootNode, jointsFiltered);\r\n if (\r\n sortedJointsFiltered &&\r\n srcJointsFiltered.every((j, i) => j.name === sortedJointsFiltered[i].name)\r\n ) {\r\n dstJointsFiltered = sortedJointsFiltered;\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (!dstJointsFiltered || !dstSkeleton) {\r\n console.error(`copyAnimationFrom: no matching skeleton in target set for '${srcSkeletonId}'`);\r\n return null;\r\n }\r\n // Build remap only for joints that pass the filter\r\n for (let fi = 0; fi < srcJointsFiltered.length; fi++) {\r\n const srcJoint = srcJointsFiltered[fi];\r\n const dstJoint = dstJointsFiltered[fi];\r\n nodeMap.set(srcJoint, dstJoint);\r\n jointRemapBySrcNode.set(\r\n srcJoint,\r\n createJointRetargetRemap(srcSkeleton, dstSkeleton, srcJoint, dstJoint)\r\n );\r\n }\r\n\r\n const dstClip = this.createAnimation(destName);\r\n if (!dstClip) {\r\n return null;\r\n }\r\n dstClip.timeDuration = sourceClip.timeDuration;\r\n dstClip.weight = sourceClip.weight;\r\n dstClip.autoPlay = sourceClip.autoPlay;\r\n\r\n // Register destination skeleton\r\n dstClip.addSkeleton(dstSkeleton.persistentId);\r\n\r\n for (const srcNode of srcJointsFiltered) {\r\n const srcTracks = sourceClip.tracks.get(srcNode);\r\n if (!srcTracks) {\r\n console.error(`copyAnimationFrom: no track for joint: ${srcNode.name}`);\r\n return null;\r\n }\r\n const dstNode = nodeMap.get(srcNode)!;\r\n const remap = jointRemapBySrcNode.get(srcNode)!;\r\n\r\n for (const srcTrack of srcTracks) {\r\n let dstTrack: AnimationTrack;\r\n if (srcTrack instanceof NodeRotationTrack) {\r\n dstTrack = retargetRotationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeEulerRotationTrack) {\r\n dstTrack = retargetEulerToRotationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeTranslationTrack) {\r\n dstTrack = retargetTranslationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeScaleTrack) {\r\n dstTrack = new NodeScaleTrack(cloneInterpolator(srcTrack.interpolator));\r\n } else {\r\n console.warn(`copyAnimationFrom: unsupported track type '${srcTrack.constructor.name}', skipping`);\r\n continue;\r\n }\r\n\r\n dstTrack.name = srcTrack.name;\r\n dstTrack.target = dstNode.persistentId;\r\n dstTrack.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(dstNode, dstTrack);\r\n }\r\n }\r\n\r\n return dstClip;\r\n\r\n function findRootJoint(joints: SceneNode[]) {\r\n let root: Nullable<SceneNode> = null;\r\n for (const joint of joints) {\r\n if (!root) {\r\n root = joint;\r\n }\r\n while (!root!.isParentOf(joint)) {\r\n root = root!.parent;\r\n }\r\n if (!root) {\r\n break;\r\n }\r\n }\r\n if (!root || !joints.includes(root)) {\r\n return null;\r\n }\r\n return root;\r\n }\r\n\r\n function sortJoints(root: SceneNode, joints: SceneNode[]): Nullable<SceneNode[]> {\r\n const ordered: SceneNode[] = [];\r\n const visited = new Set<SceneNode>();\r\n function visit(joint: SceneNode) {\r\n if (visited.has(joint)) {\r\n return true;\r\n }\r\n if (!joints.includes(joint)) {\r\n return false;\r\n }\r\n if (joint !== root) {\r\n visit(joint.parent!);\r\n }\r\n visited.add(joint);\r\n ordered.push(joint);\r\n return true;\r\n }\r\n for (const joint of joints) {\r\n if (!visit(joint)) {\r\n return null;\r\n }\r\n }\r\n return ordered;\r\n }\r\n }\r\n\r\n /**\r\n * Reset all skeleton modifiers\r\n */\r\n resetSkeletonModifiers() {\r\n for (const sk of this._skeletons) {\r\n for (const modifier of sk.get()!.modifiers) {\r\n modifier.reset();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the animation set and release owned resources.\r\n *\r\n * - Disposes the weak reference to the model.\r\n * - Disposes all registered animation clips.\r\n * - Clears active animations, tracks, and skeleton references.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n for (const k in this._animations) {\r\n this._animations[k]!.dispose();\r\n }\r\n this._animations = {};\r\n this._activeAnimations.clear();\r\n this._activeSkinBindings.clear();\r\n this._activeRigs.clear();\r\n this._activeTracks.clear();\r\n }\r\n}\r\n"],"names":["nextAnimationPlaybackId","AnimationPlayback","Observable","animationSet","clip","options","_animationSet","_clip","_options","_id","id","_state","_speedRatio","speedRatio","_weight","weight","_time","timeDuration","_layer","layer","_priority","priority","_interruptible","interruptible","_frameWaiters","Map","state","time","value","seek","normalizedTime","setPlaybackWeight","setPlaybackSpeedRatio","play","startPlayback","pause","pausePlayback","resume","resumePlayback","stop","stopPlayback","seekPlayback","fadeTo","duration","fadePlaybackTo","crossFadeTo","name","Math","max","fadeOut","reason","fadeIn","waitForComplete","Promise","resolve","once","waitForMarker","idOrName","undefined","handler","event","marker","off","on","waitForFrame","frame","waiters","get","settled","wrappedResolve","current","set","filter","item","push","_getOptions","_setState","_setTime","_setWeight","_setSpeedRatio","_getWatchedFrames","keys","_emitStart","dispatchEvent","_emitLoop","_emitMarker","_emitFrame","delete","forEach","_emitComplete","_emitStop","_emitPause","_emitResume","cloneInterpolator","src","Interpolator","mode","target","inputs","Float32Array","outputs","createJointRetargetRemap","srcSkeleton","dstSkeleton","srcJoint","dstJoint","translationRotation","translationScale","translationAxisLocks","si","joints","indexOf","di","srcBindPose","bindPose","dstBindPose","srcLen","position","magnitude","dstLen","dstNode","dstJointIndex","srcNode","srcBindRotInv","Quaternion","inverse","rotation","dstBindRot","clone","srcBindPos","dstBindPos","createTranslationRetargetRemap","identity","getBindPosition","skeleton","joint","index","getRigBindPoseForNode","node","getBindPoseForJoint","rootJoint","rootBindPose","scale","getBindDistanceToAncestor","ancestor","distance","bindPosition","parent","getHumanoidLegLength","side","mapping","humanoidJointMapping","body","hips","HumanoidBodyRig","Hips","foot","LeftFoot","RightFoot","toes","LeftToes","RightToes","getHumanoidRootMotionScale","srcLeftLeg","srcRightLeg","dstLeftLeg","dstRightLeg","srcLegLength","dstLegLength","findTranslationTrack","tracks","find","track","NodeTranslationTrack","applyTranslationAxisLocks","bindValue","locks","x","y","z","applyTranslationTangentAxisLocks","retargetRotation","qSrcAnim","remap","out","multiply","inplaceNormalize","retargetRotationTangent","qSrcTangent","retargetTranslationValue","srcValue","setXYZ","subBy","scaleBy","transform","addBy","retargetTranslationTangent","retargetRotationTrack","isCubic","interpolator","frameStride","numFrames","length","srcOutputs","newOutputs","t","q","f","base","setXYZW","subarray","NodeRotationTrack","retargetEulerToRotationTrack","srcInputs","fromEulerAngle","retargetTranslationTrack","v","Vector3","createConstantTranslationTrack","findRotationTrack","NodeEulerRotationTrack","collectTrackTimes","times","add","sampleRotationTrack","fallback","calculateState","bakeHumanoidRotationTracks","sourceClip","srcRootRotation","dstRootRotation","dstClip","remaps","rotationTracksByRemap","Set","remapsByDstNode","srcJointSet","dstJointSet","srcBindRotByNode","dstBindRotByNode","srcRotationTrackByNode","i","sort","a","b","srcBindWorldRots","dstBindWorldRots","srcAnimWorldRots","dstAnimWorldRots","outputsByRemap","tmpLocalRot","tmpWorldDelta","tmpParentInv","getSrcBindWorldRot","rot","has","getDstBindWorldRot","getSrcAnimWorldRot","parentWorldRot","getDstAnimWorldRot","srcBindWorldRot","srcAnimWorldRot","getDstParentAnimWorldRot","mappedParent","clear","dstAnimWorldRot","persistentId","jointIndex","addTrack","AnimationSet","makeObservable","Disposable","model","_model","_animations","_activeTracks","_activeSkinBindings","_activeRigs","_activeAnimations","_skeletons","_rigs","_timelineTickers","_registerTimelineTicker","ticker","_unregisterTimelineTicker","numAnimations","Object","getOwnPropertyNames","skeletons","rigs","skinBindings","resolveRigByAnimationBindingId","findSkeletonRigById","findSkinBindingById","rig","resolveClipRig","nextRig","createAnimation","embedded","console","error","animation","AnimationClip","scene","queueUpdateNode","deleteAnimation","stopAnimation","dispose","getAnimationNames","update","deltaInSeconds","k","started","createPlaybackEvent","playback","paused","fadeOutStart","animateTime","completed","abs","stopReason","firstFrame","previousTime","currentTime","timeAdvance","direction","rangeEnd","completePlayback","rangeStart","loops","floor","repeat","repeatCounter","emitCrossedMarkers","emitCrossedFrames","ceil","fadeToDuration","min","fadeToStart","fadeFromWeight","fadeTargetWeight","alltracks","isPlayingAnimation","weights","map","info","states","getDuration","weightedAverage","mixState","applyState","apply","size","getAnimationClip","setAnimationWeight","ani","targetWeight","createPlayback","getPlaybacks","playbacks","getPlayback","playAnimation","resolveTimeRef","range","start","end","syncSource","resolvePlaybackSyncSource","sync","initialTime","computePlaybackInitialTime","nodeTracks","blendId","getBlendId","blendedTracks","refcount","playing","binding","rigRefcount","resolveActivePlayback","named","values","destination","getPlaybackEffectiveRange","offset","Number","isFinite","wrap","constrainPlaybackTime","source","phase","clampedTime","emitEvents","completionFadeOut","fromTime","toTime","getCrossedMarkers","frameTime","frameRate","crossed","crossedForward","crossedBackward","markers","markerTime","resolveMarkerTime","targetTime","reset","createSkeletalMaskedAnimation","sourceName","targetName","createSkeletalMaskedAnimationClip","copyHumanoidAnimationFrom","sourceSet","animationName","targetNameOrOptions","copyOptions","destName","rootMotion","jointTranslations","srcSkeletonId","srcHumanoidMapping","nodeMap","jointRemapBySrcNode","srcJointsFiltered","dstJointsFiltered","ref","sk","dstHumanoidMapping","srcMatched","dstMatched","key","leftHand","rightHand","computeParentChainRotation","modelRoot","result","jointSet","p","srcHipsNode","dstHipsNode","srcRootNode","dstRootNode","srcRootRot","dstRootRot","srcRootTranslationTrack","srcFallbackHipsTranslationTrack","srcMotionTrack","srcMotionNode","srcMotionParentRot","rootTranslationRotation","rootTranslationScale","rootMotionScale","jointRemaps","mappedSrcNodes","mappedDstNodes","fi","autoPlay","addSkeleton","dstRootBindPose","dstRootTrack","srcMotionBindPose","rootRemap","lockRootMotionAxes","srcTracks","srcTrack","dstTrack","NodeScaleTrack","warn","copyAnimationFrom","excludeJoint","jointsFiltered","j","findRootJoint","sortJoints","rootNode","sortedJointsFiltered","every","root","isParentOf","includes","ordered","visited","visit","resetSkeletonModifiers","modifier","modifiers","onDispose"],"mappings":"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"}
1
+ {"version":3,"file":"animationset.js","sources":["../../src/animation/animationset.ts"],"sourcesContent":["import {\r\n weightedAverage,\r\n Disposable,\r\n Interpolator,\r\n Vector3,\r\n Observable,\r\n makeObservable\r\n} from '@zephyr3d/base';\r\nimport type { DRef, IDisposable, Nullable } from '@zephyr3d/base';\r\nimport { Quaternion } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../scene';\r\nimport { AnimationClip } from './animation';\r\nimport type { AnimationMarker, AnimationTimeRef } from './animation';\r\nimport type { AnimationTrack } from './animationtrack';\r\nimport { NodeRotationTrack } from './rotationtrack';\r\nimport { NodeEulerRotationTrack } from './eulerrotationtrack';\r\nimport { NodeTranslationTrack } from './translationtrack';\r\nimport { NodeScaleTrack } from './scaletrack';\r\nimport { MorphTargetGroupTrack } from './morphtargetgrouptrack';\r\nimport type { SkeletonBindPose, SkeletonRig, SkinBinding } from './skeleton';\r\nimport { HumanoidBodyRig } from './skeleton';\r\nimport type { SkeletalAnimationMaskOptions } from './animationmask';\r\nimport { createSkeletalMaskedAnimationClip } from './animationmask';\r\n\r\n/**\r\n * How a new playback copies phase from an existing active playback.\r\n *\r\n * - `'normalized'`: copy the source playback's normalized phase and map it into the new clip.\r\n * - `'time'`: copy the source playback's time in seconds.\r\n *\r\n * @public\r\n */\r\nexport type AnimationPlaybackSyncMode = 'normalized' | 'time';\r\n\r\n/**\r\n * Options for starting a playback at the same phase as another active playback.\r\n *\r\n * Use this when switching between matching locomotion clips, upper/lower body clips, or a\r\n * layered setup and a full-body clip that must stay phase-aligned.\r\n *\r\n * @public\r\n */\r\nexport type AnimationPlaybackSyncOptions = {\r\n /**\r\n * Active playback to synchronize with.\r\n *\r\n * The value is resolved as an active clip name first, then as an active playback id. Timeline\r\n * `play` steps also resolve local `id` references before forwarding the options to\r\n * `AnimationSet`.\r\n */\r\n target: string;\r\n /**\r\n * Synchronization mode. Defaults to `'normalized'`.\r\n */\r\n mode?: AnimationPlaybackSyncMode;\r\n /**\r\n * Optional phase offset.\r\n *\r\n * In `'normalized'` mode this is a normalized phase offset where 1 is one full cycle. In\r\n * `'time'` mode this is an offset in seconds.\r\n */\r\n offset?: number;\r\n /**\r\n * Whether the synchronized time wraps into the destination clip or range. Defaults to true.\r\n *\r\n * Set to false to clamp the initial time to the destination clip or range.\r\n */\r\n wrap?: boolean;\r\n};\r\n\r\n/**\r\n * Options for playing an animation.\r\n *\r\n * Controls looping, playback speed (including reverse), and fade-in blending.\r\n * @public\r\n **/\r\nexport type PlayAnimationOptions = {\r\n /**\r\n * Number of loops to play.\r\n *\r\n * - 0: infinite looping (default).\r\n * - n \\> 0: play exactly n loops (each loop is one full duration of the clip).\r\n */\r\n repeat?: number;\r\n /**\r\n * Playback speed multiplier.\r\n *\r\n * - 1: normal speed (default).\r\n * - \\>1: faster; \\<1: slower.\r\n * - Negative values play the clip in reverse. The initial `currentTime` will be set to the end.\r\n */\r\n speedRatio?: number;\r\n /**\r\n * Fade-in duration in seconds.\r\n *\r\n * Interpolates the animation weight from 0 to the clip's configured weight over this time.\r\n * Use together with `stopAnimation(..., { fadeOut })` for smooth cross-fading.\r\n * Default is 0 (no fade-in).\r\n */\r\n fadeIn?: number;\r\n /**\r\n * Fade-out duration in seconds used after the playback completes naturally.\r\n *\r\n * When greater than 0, the playback emits `complete` at the authored end time but remains active\r\n * for this duration while its weight fades to 0. This lets a following playback cross-fade from\r\n * the completed pose instead of snapping after the completed clip is removed.\r\n */\r\n completionFadeOut?: number;\r\n /**\r\n * Weight of the animation clip.\r\n *\r\n * Used during blending when multiple animations affect the same property.\r\n * Default is the clip's configured weight.\r\n */\r\n weight?: number;\r\n /**\r\n * Optional stable playback id. Useful for blueprint/editor references.\r\n */\r\n id?: string;\r\n /**\r\n * Logical layer/channel name used by higher-level controllers.\r\n */\r\n layer?: string;\r\n /**\r\n * Priority used by higher-level interrupt policies.\r\n */\r\n priority?: number;\r\n /**\r\n * Whether higher-level controllers may interrupt this playback.\r\n */\r\n interruptible?: boolean;\r\n /**\r\n * Optional sub-range to play.\r\n */\r\n range?: {\r\n start?: AnimationTimeRef;\r\n end?: AnimationTimeRef;\r\n };\r\n /**\r\n * Optional phase synchronization source used to choose the initial playback time.\r\n *\r\n * When omitted, playback starts at the range start (or clip start), and reverse playback starts\r\n * at the range end (or clip end). When set, the new playback starts at the phase copied from the\r\n * referenced active playback.\r\n */\r\n sync?: AnimationPlaybackSyncOptions;\r\n};\r\n\r\n/**\r\n * Options for stopping an animation.\r\n *\r\n * Allows a graceful fade-out instead of abrupt stop.\r\n * @public\r\n */\r\nexport type StopAnimationOptions = {\r\n /**\r\n * Fade-out duration in seconds.\r\n *\r\n * Interpolates the current animation weight down to 0 over this time.\r\n * Default is 0 (immediate stop).\r\n */\r\n fadeOut?: number;\r\n /**\r\n * Stop reason reported by playback events.\r\n */\r\n reason?: AnimationStopReason;\r\n};\r\n\r\n/** @public */\r\nexport type AnimationPlaybackState =\r\n | 'scheduled'\r\n | 'playing'\r\n | 'paused'\r\n | 'stopping'\r\n | 'stopped'\r\n | 'completed';\r\n\r\n/** @public */\r\nexport type AnimationStopReason = 'manual' | 'interrupted' | 'completed' | 'deleted' | 'replaced';\r\n\r\n/** @public */\r\nexport type AnimationPlaybackEvent = {\r\n playback: AnimationPlayback;\r\n animationSet: AnimationSet;\r\n clip: AnimationClip;\r\n time: number;\r\n normalizedTime: number;\r\n};\r\n\r\n/** @public */\r\nexport type AnimationMarkerEvent = AnimationPlaybackEvent & {\r\n marker: AnimationMarker;\r\n direction: 1 | -1;\r\n};\r\n\r\n/** @public */\r\nexport type AnimationFrameEvent = AnimationPlaybackEvent & {\r\n frame: number;\r\n};\r\n\r\n/** @public */\r\nexport type AnimationPlaybackStopEvent = AnimationPlaybackEvent & {\r\n reason: AnimationStopReason;\r\n};\r\n\r\n/** @public */\r\nexport type AnimationPlaybackEventMap = {\r\n start: [event: AnimationPlaybackEvent];\r\n loop: [event: AnimationPlaybackEvent];\r\n marker: [event: AnimationMarkerEvent];\r\n frame: [event: AnimationFrameEvent];\r\n complete: [event: AnimationPlaybackEvent];\r\n stop: [event: AnimationPlaybackStopEvent];\r\n pause: [event: AnimationPlaybackEvent];\r\n resume: [event: AnimationPlaybackEvent];\r\n};\r\n\r\n/** @public */\r\nexport type AnimationSetEventMap = {\r\n playbackstart: [event: AnimationPlaybackEvent];\r\n playbackloop: [event: AnimationPlaybackEvent];\r\n marker: [event: AnimationMarkerEvent];\r\n frame: [event: AnimationFrameEvent];\r\n playbackcomplete: [event: AnimationPlaybackEvent];\r\n playbackstop: [event: AnimationPlaybackStopEvent];\r\n playbackpause: [event: AnimationPlaybackEvent];\r\n playbackresume: [event: AnimationPlaybackEvent];\r\n};\r\n\r\nlet nextAnimationPlaybackId = 1;\r\n\r\n/**\r\n * Runtime handle for one playback of an AnimationClip.\r\n * @public\r\n */\r\nexport class AnimationPlayback extends Observable<AnimationPlaybackEventMap> {\r\n /** @internal */\r\n private readonly _animationSet: AnimationSet;\r\n /** @internal */\r\n private readonly _clip: AnimationClip;\r\n /** @internal */\r\n private readonly _options: PlayAnimationOptions;\r\n /** @internal */\r\n private readonly _id: string;\r\n /** @internal */\r\n private readonly _frameWaiters: Map<number, ((event: AnimationFrameEvent | undefined) => void)[]>;\r\n /** @internal */\r\n private _state: AnimationPlaybackState;\r\n /** @internal */\r\n private _time: number;\r\n /** @internal */\r\n private _weight: number;\r\n /** @internal */\r\n private _speedRatio: number;\r\n /** @internal */\r\n private _layer: string;\r\n /** @internal */\r\n private _priority: number;\r\n /** @internal */\r\n private _interruptible: boolean;\r\n\r\n constructor(animationSet: AnimationSet, clip: AnimationClip, options?: PlayAnimationOptions) {\r\n super();\r\n this._animationSet = animationSet;\r\n this._clip = clip;\r\n this._options = { ...(options ?? {}) };\r\n this._id = this._options.id ?? `animation-playback-${nextAnimationPlaybackId++}`;\r\n this._state = 'scheduled';\r\n this._speedRatio = this._options.speedRatio ?? 1;\r\n this._weight = this._options.weight ?? clip.weight ?? 1;\r\n this._time = this._speedRatio < 0 ? clip.timeDuration : 0;\r\n this._layer = this._options.layer ?? 'default';\r\n this._priority = this._options.priority ?? 0;\r\n this._interruptible = this._options.interruptible ?? true;\r\n this._frameWaiters = new Map();\r\n }\r\n get id() {\r\n return this._id;\r\n }\r\n get animationSet() {\r\n return this._animationSet;\r\n }\r\n get clip() {\r\n return this._clip;\r\n }\r\n get state() {\r\n return this._state;\r\n }\r\n get time() {\r\n return this._time;\r\n }\r\n set time(value: number) {\r\n this.seek(value);\r\n }\r\n get normalizedTime() {\r\n return this._clip.timeDuration > 0 ? this._time / this._clip.timeDuration : 0;\r\n }\r\n set normalizedTime(value: number) {\r\n this.seek(value * this._clip.timeDuration);\r\n }\r\n get weight() {\r\n return this._weight;\r\n }\r\n set weight(value: number) {\r\n this._animationSet.setPlaybackWeight(this, value);\r\n }\r\n get speedRatio() {\r\n return this._speedRatio;\r\n }\r\n set speedRatio(value: number) {\r\n this._animationSet.setPlaybackSpeedRatio(this, value);\r\n }\r\n get layer() {\r\n return this._layer;\r\n }\r\n get priority() {\r\n return this._priority;\r\n }\r\n get interruptible() {\r\n return this._interruptible;\r\n }\r\n play() {\r\n this._animationSet.startPlayback(this);\r\n return this;\r\n }\r\n pause() {\r\n this._animationSet.pausePlayback(this);\r\n return this;\r\n }\r\n resume() {\r\n this._animationSet.resumePlayback(this);\r\n return this;\r\n }\r\n stop(options?: StopAnimationOptions) {\r\n this._animationSet.stopPlayback(this, options);\r\n return this;\r\n }\r\n seek(time: number, options?: { emitEvents?: boolean; apply?: boolean }) {\r\n this._animationSet.seekPlayback(this, time, options);\r\n return this;\r\n }\r\n fadeTo(weight: number, duration: number) {\r\n this._animationSet.fadePlaybackTo(this, weight, duration);\r\n return this;\r\n }\r\n crossFadeTo(name: string, options?: PlayAnimationOptions & { duration?: number }) {\r\n const duration = Math.max(options?.duration ?? 0, 0);\r\n this.stop({ fadeOut: duration, reason: 'interrupted' });\r\n return this._animationSet.play(name, { ...options, fadeIn: duration });\r\n }\r\n waitForComplete() {\r\n return new Promise<this>((resolve) => {\r\n this.once('complete', () => resolve(this));\r\n });\r\n }\r\n waitForMarker(idOrName: string) {\r\n if (this._state === 'stopped' || this._state === 'completed') {\r\n return Promise.resolve(undefined);\r\n }\r\n return new Promise<AnimationMarkerEvent | undefined>((resolve) => {\r\n const handler = (event: AnimationMarkerEvent) => {\r\n if (event.marker.id === idOrName || event.marker.name === idOrName) {\r\n this.off('marker', handler);\r\n this.off('stop', stop);\r\n resolve(event);\r\n }\r\n };\r\n const stop = () => {\r\n this.off('marker', handler);\r\n this.off('stop', stop);\r\n resolve(undefined);\r\n };\r\n this.on('marker', handler);\r\n this.on('stop', stop);\r\n });\r\n }\r\n waitForFrame(frame: number) {\r\n if (this._state === 'stopped' || this._state === 'completed') {\r\n return Promise.resolve(undefined);\r\n }\r\n return new Promise<AnimationFrameEvent | undefined>((resolve) => {\r\n const waiters = this._frameWaiters.get(frame) ?? [];\r\n let settled = false;\r\n let stop: () => void;\r\n const wrappedResolve = (event: AnimationFrameEvent | undefined) => {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n this.off('stop', stop);\r\n resolve(event);\r\n };\r\n stop = () => {\r\n const current = this._frameWaiters.get(frame);\r\n if (current) {\r\n this._frameWaiters.set(\r\n frame,\r\n current.filter((item) => item !== wrappedResolve)\r\n );\r\n }\r\n wrappedResolve(undefined);\r\n };\r\n waiters.push(wrappedResolve);\r\n this._frameWaiters.set(frame, waiters);\r\n this.on('stop', stop);\r\n });\r\n }\r\n /** @internal */\r\n _getOptions() {\r\n return this._options;\r\n }\r\n /** @internal */\r\n _setState(state: AnimationPlaybackState) {\r\n this._state = state;\r\n }\r\n /** @internal */\r\n _setTime(time: number) {\r\n this._time = time;\r\n }\r\n /** @internal */\r\n _setWeight(weight: number) {\r\n this._weight = weight;\r\n }\r\n /** @internal */\r\n _setSpeedRatio(speedRatio: number) {\r\n this._speedRatio = speedRatio;\r\n }\r\n /** @internal */\r\n _getWatchedFrames() {\r\n return [...this._frameWaiters.keys()];\r\n }\r\n /** @internal */\r\n _emitStart(event: AnimationPlaybackEvent) {\r\n this.dispatchEvent('start', event);\r\n }\r\n /** @internal */\r\n _emitLoop(event: AnimationPlaybackEvent) {\r\n this.dispatchEvent('loop', event);\r\n }\r\n /** @internal */\r\n _emitMarker(event: AnimationMarkerEvent) {\r\n this.dispatchEvent('marker', event);\r\n }\r\n /** @internal */\r\n _emitFrame(event: AnimationFrameEvent) {\r\n this.dispatchEvent('frame', event);\r\n const waiters = this._frameWaiters.get(event.frame);\r\n if (waiters) {\r\n this._frameWaiters.delete(event.frame);\r\n waiters.forEach((resolve) => resolve(event));\r\n }\r\n }\r\n /** @internal */\r\n _emitComplete(event: AnimationPlaybackEvent) {\r\n this.dispatchEvent('complete', event);\r\n }\r\n /** @internal */\r\n _emitStop(event: AnimationPlaybackStopEvent) {\r\n this.dispatchEvent('stop', event);\r\n }\r\n /** @internal */\r\n _emitPause(event: AnimationPlaybackEvent) {\r\n this.dispatchEvent('pause', event);\r\n }\r\n /** @internal */\r\n _emitResume(event: AnimationPlaybackEvent) {\r\n this.dispatchEvent('resume', event);\r\n }\r\n}\r\n\r\n/** @public */\r\nexport type HumanoidRootMotionMode = 'scaled' | 'copy' | 'locked' | 'none';\r\n\r\n/** @public */\r\nexport type HumanoidRootMotionScaleMode = 'legLength' | 'none' | number;\r\n\r\n/** @public */\r\nexport type HumanoidRetargetAxisLocks = {\r\n x?: boolean;\r\n y?: boolean;\r\n z?: boolean;\r\n};\r\n\r\n/** @public */\r\nexport type CopyHumanoidAnimationOptions = {\r\n /**\r\n * Name for the new clip. Ignored when the legacy third `targetName` argument is a string.\r\n */\r\n targetName?: string;\r\n /**\r\n * How root translation should be handled.\r\n *\r\n * - `scaled`: retarget and scale root motion to the destination rig size.\r\n * - `copy`: retarget root motion without scale.\r\n * - `locked`: write a constant destination bind-pose root translation.\r\n * - `none`: do not create a root translation track.\r\n */\r\n rootMotion?: HumanoidRootMotionMode;\r\n /**\r\n * Scale used when `rootMotion` is `scaled`.\r\n */\r\n rootMotionScale?: HumanoidRootMotionScaleMode;\r\n /**\r\n * Axis locks applied after root motion retargeting. Locked axes stay at the destination bind pose.\r\n */\r\n lockRootMotionAxes?: HumanoidRetargetAxisLocks;\r\n /**\r\n * Whether to preserve non-root humanoid translation tracks. These are skipped by default because\r\n * retargeting humanoid joints should normally keep the destination skeleton lengths intact.\r\n */\r\n jointTranslations?: 'skip' | 'preserve';\r\n};\r\n\r\ntype JointRetargetRemap = {\r\n dstNode: SceneNode;\r\n dstJointIndex: number;\r\n srcNode: SceneNode;\r\n srcBindRotInv: Quaternion;\r\n dstBindRot: Quaternion;\r\n rotationCorrection?: HumanoidRotationCorrection;\r\n srcBindPos: Vector3;\r\n dstBindPos: Vector3;\r\n translationScale: number;\r\n translationRotation?: Quaternion;\r\n translationCorrection?: HumanoidRotationCorrection;\r\n translationAxisLocks?: HumanoidRetargetAxisLocks;\r\n};\r\n\r\ntype BindTransform = {\r\n position: Vector3;\r\n rotation: Quaternion;\r\n};\r\n\r\ntype HumanoidRotationCorrection = {\r\n x: number;\r\n y: number;\r\n z: number;\r\n};\r\n\r\nfunction cloneInterpolator(src: Interpolator): Interpolator {\r\n return new Interpolator(\r\n src.mode,\r\n src.target,\r\n src.inputs instanceof Float32Array ? new Float32Array(src.inputs) : [...src.inputs],\r\n src.outputs instanceof Float32Array ? new Float32Array(src.outputs) : [...src.outputs]\r\n );\r\n}\r\n\r\nfunction createJointRetargetRemap(\r\n srcSkeleton: SkeletonRig,\r\n dstSkeleton: SkeletonRig,\r\n srcJoint: SceneNode,\r\n dstJoint: SceneNode,\r\n translationRotation?: Quaternion,\r\n translationScale?: number,\r\n translationCorrection?: HumanoidRotationCorrection,\r\n translationAxisLocks?: HumanoidRetargetAxisLocks,\r\n rotationCorrection?: HumanoidRotationCorrection\r\n): JointRetargetRemap {\r\n const si = srcSkeleton.joints.indexOf(srcJoint);\r\n const di = dstSkeleton.joints.indexOf(dstJoint);\r\n const srcBindPose = srcSkeleton.bindPose[si];\r\n const dstBindPose = dstSkeleton.bindPose[di];\r\n const srcLen = srcBindPose.position.magnitude;\r\n const dstLen = dstBindPose.position.magnitude;\r\n return {\r\n dstNode: dstJoint,\r\n dstJointIndex: di,\r\n srcNode: srcJoint,\r\n srcBindRotInv: Quaternion.inverse(srcBindPose.rotation),\r\n dstBindRot: dstBindPose.rotation.clone(),\r\n rotationCorrection,\r\n srcBindPos: srcBindPose.position.clone(),\r\n dstBindPos: dstBindPose.position.clone(),\r\n translationScale: translationScale ?? (srcLen > 1e-6 ? dstLen / srcLen : 1),\r\n translationRotation,\r\n translationCorrection,\r\n translationAxisLocks\r\n };\r\n}\r\n\r\nfunction createTranslationRetargetRemap(\r\n srcNode: SceneNode,\r\n dstNode: SceneNode,\r\n srcBindPos: Vector3,\r\n dstBindPos: Vector3,\r\n dstJointIndex: number,\r\n translationScale: number,\r\n translationRotation?: Quaternion,\r\n translationCorrection?: HumanoidRotationCorrection,\r\n translationAxisLocks?: HumanoidRetargetAxisLocks,\r\n rotationCorrection?: HumanoidRotationCorrection\r\n): JointRetargetRemap {\r\n return {\r\n dstNode,\r\n dstJointIndex,\r\n srcNode,\r\n srcBindRotInv: Quaternion.identity(),\r\n dstBindRot: Quaternion.identity(),\r\n rotationCorrection,\r\n srcBindPos: srcBindPos.clone(),\r\n dstBindPos: dstBindPos.clone(),\r\n translationScale,\r\n translationRotation,\r\n translationCorrection,\r\n translationAxisLocks\r\n };\r\n}\r\n\r\nfunction getBindPosition(skeleton: SkeletonRig, joint: SceneNode): Vector3 | null {\r\n const index = skeleton.joints.indexOf(joint);\r\n return index >= 0 ? skeleton.bindPose[index].position : null;\r\n}\r\n\r\nfunction getSkeletonLocalBindTransform(\r\n skeleton: SkeletonRig,\r\n node: SceneNode,\r\n jointSet: Set<SceneNode>,\r\n cache: Map<SceneNode, BindTransform>\r\n): BindTransform {\r\n let transform = cache.get(node);\r\n if (!transform) {\r\n const bindPose = getRigBindPoseForNode(skeleton, node);\r\n const position = bindPose.position.clone();\r\n const rotation = bindPose.rotation.clone();\r\n const parent = node.parent;\r\n if (parent && jointSet.has(parent)) {\r\n const parentTransform = getSkeletonLocalBindTransform(skeleton, parent, jointSet, cache);\r\n parentTransform.rotation.transform(position, position);\r\n position.addBy(parentTransform.position);\r\n Quaternion.multiply(parentTransform.rotation, rotation, rotation);\r\n }\r\n transform = { position, rotation };\r\n cache.set(node, transform);\r\n }\r\n return transform;\r\n}\r\n\r\nfunction getHumanoidLateralXSign(skeleton: SkeletonRig): number {\r\n const mapping = skeleton.humanoidJointMapping;\r\n if (!mapping) {\r\n return 0;\r\n }\r\n const pairs: [HumanoidBodyRig, HumanoidBodyRig][] = [\r\n [HumanoidBodyRig.LeftShoulder, HumanoidBodyRig.RightShoulder],\r\n [HumanoidBodyRig.LeftUpperArm, HumanoidBodyRig.RightUpperArm],\r\n [HumanoidBodyRig.LeftLowerArm, HumanoidBodyRig.RightLowerArm],\r\n [HumanoidBodyRig.LeftHand, HumanoidBodyRig.RightHand],\r\n [HumanoidBodyRig.LeftUpperLeg, HumanoidBodyRig.RightUpperLeg],\r\n [HumanoidBodyRig.LeftLowerLeg, HumanoidBodyRig.RightLowerLeg],\r\n [HumanoidBodyRig.LeftFoot, HumanoidBodyRig.RightFoot],\r\n [HumanoidBodyRig.LeftToes, HumanoidBodyRig.RightToes]\r\n ];\r\n const jointSet = new Set(skeleton.joints);\r\n const cache = new Map<SceneNode, BindTransform>();\r\n let score = 0;\r\n let weight = 0;\r\n for (const [leftKey, rightKey] of pairs) {\r\n const left = mapping.body[leftKey];\r\n const right = mapping.body[rightKey];\r\n if (!left || !right || !jointSet.has(left) || !jointSet.has(right)) {\r\n continue;\r\n }\r\n const dx =\r\n getSkeletonLocalBindTransform(skeleton, left, jointSet, cache).position.x -\r\n getSkeletonLocalBindTransform(skeleton, right, jointSet, cache).position.x;\r\n if (Math.abs(dx) > 1e-5) {\r\n score += dx;\r\n weight++;\r\n }\r\n }\r\n if (weight === 0 || Math.abs(score) < 1e-5) {\r\n return 0;\r\n }\r\n return score > 0 ? 1 : -1;\r\n}\r\n\r\nfunction getHumanoidForwardZSign(skeleton: SkeletonRig): number {\r\n const mapping = skeleton.humanoidJointMapping;\r\n if (!mapping) {\r\n return 0;\r\n }\r\n const pairs: [HumanoidBodyRig, HumanoidBodyRig][] = [\r\n [HumanoidBodyRig.LeftFoot, HumanoidBodyRig.LeftToes],\r\n [HumanoidBodyRig.RightFoot, HumanoidBodyRig.RightToes]\r\n ];\r\n const jointSet = new Set(skeleton.joints);\r\n const cache = new Map<SceneNode, BindTransform>();\r\n let score = 0;\r\n let weight = 0;\r\n for (const [footKey, toesKey] of pairs) {\r\n const foot = mapping.body[footKey];\r\n const toes = mapping.body[toesKey];\r\n if (!foot || !toes || !jointSet.has(foot) || !jointSet.has(toes)) {\r\n continue;\r\n }\r\n const dz =\r\n getSkeletonLocalBindTransform(skeleton, toes, jointSet, cache).position.z -\r\n getSkeletonLocalBindTransform(skeleton, foot, jointSet, cache).position.z;\r\n if (Math.abs(dz) > 1e-5) {\r\n score += dz;\r\n weight++;\r\n }\r\n }\r\n if (weight === 0 || Math.abs(score) < 1e-5) {\r\n return 0;\r\n }\r\n return score > 0 ? 1 : -1;\r\n}\r\n\r\nfunction getHumanoidSignFromSkeletons(\r\n skeletons: SkeletonRig[],\r\n getSign: (skeleton: SkeletonRig) => number\r\n): number {\r\n let score = 0;\r\n for (const skeleton of skeletons) {\r\n score += getSign(skeleton);\r\n }\r\n return score > 0 ? 1 : score < 0 ? -1 : 0;\r\n}\r\n\r\nfunction getHumanoidRotationCorrection(\r\n srcSkeleton: SkeletonRig,\r\n dstSkeleton: SkeletonRig,\r\n srcSignSkeletons: SkeletonRig[] = [srcSkeleton],\r\n dstSignSkeletons: SkeletonRig[] = [dstSkeleton]\r\n): HumanoidRotationCorrection | null {\r\n const srcLateralXSign =\r\n getHumanoidLateralXSign(srcSkeleton) ||\r\n getHumanoidSignFromSkeletons(srcSignSkeletons, getHumanoidLateralXSign);\r\n const dstLateralXSign =\r\n getHumanoidLateralXSign(dstSkeleton) ||\r\n getHumanoidSignFromSkeletons(dstSignSkeletons, getHumanoidLateralXSign);\r\n const srcForwardZSign =\r\n getHumanoidForwardZSign(srcSkeleton) ||\r\n getHumanoidSignFromSkeletons(srcSignSkeletons, getHumanoidForwardZSign);\r\n const dstForwardZSign =\r\n getHumanoidForwardZSign(dstSkeleton) ||\r\n getHumanoidSignFromSkeletons(dstSignSkeletons, getHumanoidForwardZSign);\r\n const axisXSign = srcLateralXSign && dstLateralXSign && srcLateralXSign !== dstLateralXSign ? -1 : 1;\r\n const axisZSign = srcForwardZSign && dstForwardZSign && srcForwardZSign !== dstForwardZSign ? -1 : 1;\r\n if (axisXSign === 1 && axisZSign === 1) {\r\n return null;\r\n }\r\n const determinant = axisXSign * axisZSign;\r\n return {\r\n x: determinant * axisXSign,\r\n y: determinant,\r\n z: determinant * axisZSign\r\n };\r\n}\r\n\r\nfunction getRigBindPoseForNode(skeleton: SkeletonRig, node: SceneNode): SkeletonBindPose {\r\n return (\r\n skeleton.getBindPoseForJoint(node) ??\r\n (node === skeleton.rootJoint\r\n ? skeleton.rootBindPose\r\n : {\r\n position: node.position,\r\n rotation: node.rotation,\r\n scale: node.scale\r\n })\r\n );\r\n}\r\n\r\nfunction getBindDistanceToAncestor(skeleton: SkeletonRig, joint: SceneNode, ancestor: SceneNode): number {\r\n let distance = 0;\r\n let node: SceneNode | null = joint;\r\n while (node && node !== ancestor) {\r\n const bindPosition = getBindPosition(skeleton, node);\r\n if (!bindPosition) {\r\n return 0;\r\n }\r\n distance += bindPosition.magnitude;\r\n node = node.parent;\r\n }\r\n return node === ancestor ? distance : 0;\r\n}\r\n\r\nfunction getHumanoidLegLength(skeleton: SkeletonRig, side: 'left' | 'right'): number {\r\n const mapping = skeleton.humanoidJointMapping;\r\n if (!mapping) {\r\n return 0;\r\n }\r\n const body = mapping.body;\r\n const hips = body[HumanoidBodyRig.Hips];\r\n const foot = side === 'left' ? body[HumanoidBodyRig.LeftFoot] : body[HumanoidBodyRig.RightFoot];\r\n const toes = side === 'left' ? body[HumanoidBodyRig.LeftToes] : body[HumanoidBodyRig.RightToes];\r\n return Math.max(\r\n getBindDistanceToAncestor(skeleton, foot, hips),\r\n getBindDistanceToAncestor(skeleton, toes, hips)\r\n );\r\n}\r\n\r\nfunction getHumanoidRootMotionScale(srcSkeleton: SkeletonRig, dstSkeleton: SkeletonRig): number {\r\n const srcLeftLeg = getHumanoidLegLength(srcSkeleton, 'left');\r\n const srcRightLeg = getHumanoidLegLength(srcSkeleton, 'right');\r\n const dstLeftLeg = getHumanoidLegLength(dstSkeleton, 'left');\r\n const dstRightLeg = getHumanoidLegLength(dstSkeleton, 'right');\r\n const srcLegLength = Math.max(srcLeftLeg, srcRightLeg);\r\n const dstLegLength = Math.max(dstLeftLeg, dstRightLeg);\r\n return srcLegLength > 1e-6 && dstLegLength > 1e-6 ? dstLegLength / srcLegLength : 1;\r\n}\r\n\r\nfunction findTranslationTrack(tracks: AnimationTrack[] | undefined): NodeTranslationTrack | null {\r\n return (tracks?.find((track) => track instanceof NodeTranslationTrack) ??\r\n null) as NodeTranslationTrack | null;\r\n}\r\n\r\nfunction findAncestorTranslationTrack(\r\n clip: AnimationClip,\r\n node: SceneNode,\r\n modelRoot: SceneNode\r\n): { node: SceneNode; track: NodeTranslationTrack } | null {\r\n let current = node.parent;\r\n while (current) {\r\n const track = findTranslationTrack(clip.tracks.get(current));\r\n if (track) {\r\n return { node: current, track };\r\n }\r\n if (current === modelRoot) {\r\n break;\r\n }\r\n current = current.parent;\r\n }\r\n return null;\r\n}\r\n\r\nfunction copyMorphTargetGroupTracks(sourceClip: AnimationClip, targetClip: AnimationClip, target: SceneNode) {\r\n for (const tracks of sourceClip.tracks.values()) {\r\n for (const track of tracks) {\r\n if (track instanceof MorphTargetGroupTrack) {\r\n const cloned = track.clone();\r\n cloned.name = track.name;\r\n cloned.target = target.persistentId;\r\n targetClip.addTrack(target, cloned);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction applyTranslationAxisLocks(\r\n value: Vector3,\r\n bindValue: Vector3,\r\n locks: HumanoidRetargetAxisLocks | undefined\r\n) {\r\n if (locks?.x) {\r\n value.x = bindValue.x;\r\n }\r\n if (locks?.y) {\r\n value.y = bindValue.y;\r\n }\r\n if (locks?.z) {\r\n value.z = bindValue.z;\r\n }\r\n}\r\n\r\nfunction applyTranslationTangentAxisLocks(value: Vector3, locks: HumanoidRetargetAxisLocks | undefined) {\r\n if (locks?.x) {\r\n value.x = 0;\r\n }\r\n if (locks?.y) {\r\n value.y = 0;\r\n }\r\n if (locks?.z) {\r\n value.z = 0;\r\n }\r\n}\r\n\r\nfunction retargetRotation(qSrcAnim: Quaternion, remap: JointRetargetRemap, out: Quaternion): Quaternion {\r\n Quaternion.multiply(remap.srcBindRotInv, qSrcAnim, out);\r\n Quaternion.multiply(remap.dstBindRot, out, out);\r\n if (remap.rotationCorrection) {\r\n applyHumanoidRotationCorrection(out, remap.rotationCorrection, out);\r\n }\r\n return out.inplaceNormalize();\r\n}\r\n\r\nfunction retargetRotationTangent(\r\n qSrcTangent: Quaternion,\r\n remap: JointRetargetRemap,\r\n out: Quaternion\r\n): Quaternion {\r\n Quaternion.multiply(remap.srcBindRotInv, qSrcTangent, out);\r\n Quaternion.multiply(remap.dstBindRot, out, out);\r\n if (remap.rotationCorrection) {\r\n applyHumanoidRotationCorrection(out, remap.rotationCorrection, out);\r\n }\r\n return out;\r\n}\r\n\r\nfunction applyHumanoidRotationCorrection(\r\n q: Quaternion,\r\n correction: HumanoidRotationCorrection,\r\n out: Quaternion\r\n): Quaternion {\r\n return out.setXYZW(q.x * correction.x, q.y * correction.y, q.z * correction.z, q.w);\r\n}\r\n\r\nfunction applyHumanoidTranslationCorrection(\r\n value: Vector3,\r\n correction: HumanoidRotationCorrection,\r\n out: Vector3\r\n): Vector3 {\r\n return out.setXYZ(value.x * correction.x, value.y * correction.y, value.z * correction.z);\r\n}\r\n\r\nfunction retargetTranslationValue(srcValue: Vector3, remap: JointRetargetRemap, out: Vector3): Vector3 {\r\n out.setXYZ(srcValue.x, srcValue.y, srcValue.z);\r\n out.subBy(remap.srcBindPos);\r\n out.scaleBy(remap.translationScale);\r\n if (remap.translationRotation) {\r\n remap.translationRotation.transform(out, out);\r\n }\r\n if (remap.translationCorrection) {\r\n applyHumanoidTranslationCorrection(out, remap.translationCorrection, out);\r\n }\r\n out.addBy(remap.dstBindPos);\r\n applyTranslationAxisLocks(out, remap.dstBindPos, remap.translationAxisLocks);\r\n return out;\r\n}\r\n\r\nfunction retargetTranslationTangent(srcValue: Vector3, remap: JointRetargetRemap, out: Vector3): Vector3 {\r\n out.setXYZ(srcValue.x, srcValue.y, srcValue.z);\r\n out.scaleBy(remap.translationScale);\r\n if (remap.translationRotation) {\r\n remap.translationRotation.transform(out, out);\r\n }\r\n if (remap.translationCorrection) {\r\n applyHumanoidTranslationCorrection(out, remap.translationCorrection, out);\r\n }\r\n applyTranslationTangentAxisLocks(out, remap.translationAxisLocks);\r\n return out;\r\n}\r\n\r\nfunction retargetRotationTrack(src: NodeRotationTrack, remap: JointRetargetRemap): NodeRotationTrack {\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 12 : 4;\r\n const numFrames = (src.interpolator.inputs as Float32Array).length;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const newOutputs = new Float32Array(srcOutputs.length);\r\n const t = isCubic ? 4 : 0;\r\n const q = new Quaternion();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride;\r\n q.setXYZW(\r\n srcOutputs[base + t],\r\n srcOutputs[base + t + 1],\r\n srcOutputs[base + t + 2],\r\n srcOutputs[base + t + 3]\r\n );\r\n retargetRotation(q, remap, q);\r\n if (isCubic) {\r\n // Cubic quaternion tangents live in the same component space, so apply the\r\n // same constant bind-pose transform without normalizing them.\r\n q.setXYZW(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2], srcOutputs[base + 3]);\r\n newOutputs.set(retargetRotationTangent(q, remap, q), base);\r\n newOutputs.set(\r\n retargetRotation(new Quaternion(srcOutputs.subarray(base + 4, base + 8)), remap, q),\r\n base + 4\r\n );\r\n q.setXYZW(srcOutputs[base + 8], srcOutputs[base + 9], srcOutputs[base + 10], srcOutputs[base + 11]);\r\n newOutputs.set(retargetRotationTangent(q, remap, q), base + 8);\r\n } else {\r\n newOutputs.set(q, base);\r\n }\r\n }\r\n return new NodeRotationTrack(\r\n new Interpolator(\r\n src.interpolator.mode,\r\n 'quat',\r\n new Float32Array(src.interpolator.inputs as Float32Array),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction retargetEulerToRotationTrack(\r\n src: NodeEulerRotationTrack,\r\n remap: JointRetargetRemap\r\n): NodeRotationTrack {\r\n const srcInputs = src.interpolator.inputs as Float32Array;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 9 : 3;\r\n const t = isCubic ? 3 : 0;\r\n const numFrames = srcInputs.length;\r\n const newOutputs = new Float32Array(numFrames * 4);\r\n const q = new Quaternion();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride + t;\r\n q.fromEulerAngle(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2]);\r\n retargetRotation(q, remap, q);\r\n newOutputs.set(q, f * 4);\r\n }\r\n return new NodeRotationTrack(\r\n new Interpolator(\r\n src.interpolator.mode === 'step' ? 'step' : 'linear',\r\n 'quat',\r\n new Float32Array(srcInputs),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction retargetTranslationTrack(\r\n src: NodeTranslationTrack,\r\n remap: JointRetargetRemap\r\n): NodeTranslationTrack {\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 9 : 3;\r\n const numFrames = (src.interpolator.inputs as Float32Array).length;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const newOutputs = new Float32Array(srcOutputs.length);\r\n const t = isCubic ? 3 : 0;\r\n const v = new Vector3();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride;\r\n v.setXYZ(srcOutputs[base + t], srcOutputs[base + t + 1], srcOutputs[base + t + 2]);\r\n retargetTranslationValue(v, remap, v);\r\n if (isCubic) {\r\n v.setXYZ(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2]);\r\n newOutputs.set(retargetTranslationTangent(v, remap, v), base);\r\n v.setXYZ(srcOutputs[base + 3], srcOutputs[base + 4], srcOutputs[base + 5]);\r\n newOutputs.set(retargetTranslationValue(v, remap, v), base + 3);\r\n v.setXYZ(srcOutputs[base + 6], srcOutputs[base + 7], srcOutputs[base + 8]);\r\n newOutputs.set(retargetTranslationTangent(v, remap, v), base + 6);\r\n } else {\r\n newOutputs.set(v, base);\r\n }\r\n }\r\n return new NodeTranslationTrack(\r\n new Interpolator(\r\n src.interpolator.mode,\r\n 'vec3',\r\n new Float32Array(src.interpolator.inputs as Float32Array),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction createConstantTranslationTrack(value: Vector3): NodeTranslationTrack {\r\n return new NodeTranslationTrack(\r\n new Interpolator('step', 'vec3', new Float32Array([0]), new Float32Array([value.x, value.y, value.z]))\r\n );\r\n}\r\n\r\nfunction findRotationTrack(\r\n tracks: AnimationTrack[] | undefined\r\n): NodeRotationTrack | NodeEulerRotationTrack | null {\r\n return (tracks?.find(\r\n (track) => track instanceof NodeRotationTrack || track instanceof NodeEulerRotationTrack\r\n ) ?? null) as NodeRotationTrack | NodeEulerRotationTrack | null;\r\n}\r\n\r\nfunction collectTrackTimes(track: AnimationTrack | null, times: Set<number>) {\r\n if (track instanceof NodeRotationTrack || track instanceof NodeEulerRotationTrack) {\r\n for (const time of track.interpolator.inputs as Float32Array) {\r\n times.add(time);\r\n }\r\n }\r\n}\r\n\r\nfunction sampleRotationTrack(\r\n track: NodeRotationTrack | NodeEulerRotationTrack | null,\r\n time: number,\r\n fallback: Quaternion,\r\n out: Quaternion\r\n): Quaternion {\r\n if (!track) {\r\n out.set(fallback);\r\n return out;\r\n }\r\n const state = track.calculateState({}, time);\r\n out.set(state);\r\n return out;\r\n}\r\n\r\nfunction bakeHumanoidRotationTracks(\r\n sourceClip: AnimationClip,\r\n srcSkeleton: SkeletonRig,\r\n dstSkeleton: SkeletonRig,\r\n srcRootRotation: Quaternion,\r\n dstRootRotation: Quaternion,\r\n dstClip: AnimationClip,\r\n remaps: JointRetargetRemap[],\r\n rotationCorrection: HumanoidRotationCorrection | null\r\n) {\r\n const rotationTracksByRemap = new Map<\r\n JointRetargetRemap,\r\n NodeRotationTrack | NodeEulerRotationTrack | null\r\n >();\r\n const times = new Set<number>([0, sourceClip.timeDuration]);\r\n const remapsByDstNode = new Map<object, JointRetargetRemap>();\r\n const srcJointSet = new Set(srcSkeleton.joints);\r\n const dstJointSet = new Set(dstSkeleton.joints);\r\n const srcBindRotByNode = new Map<SceneNode, Quaternion>();\r\n const dstBindRotByNode = new Map<SceneNode, Quaternion>();\r\n const srcRotationTrackByNode = new Map<SceneNode, NodeRotationTrack | NodeEulerRotationTrack | null>();\r\n\r\n for (let i = 0; i < srcSkeleton.joints.length; i++) {\r\n const joint = srcSkeleton.joints[i];\r\n srcBindRotByNode.set(joint, srcSkeleton.bindPose[i].rotation);\r\n const track = findRotationTrack(sourceClip.tracks.get(joint));\r\n srcRotationTrackByNode.set(joint, track);\r\n collectTrackTimes(track, times);\r\n }\r\n for (let i = 0; i < dstSkeleton.joints.length; i++) {\r\n dstBindRotByNode.set(dstSkeleton.joints[i], dstSkeleton.bindPose[i].rotation);\r\n }\r\n for (const remap of remaps) {\r\n const track = findRotationTrack(sourceClip.tracks.get(remap.srcNode));\r\n rotationTracksByRemap.set(remap, track);\r\n remapsByDstNode.set(remap.dstNode, remap);\r\n }\r\n const inputs = new Float32Array([...times].sort((a, b) => a - b));\r\n const srcBindWorldRots = new Map<SceneNode, Quaternion>();\r\n const dstBindWorldRots = new Map<SceneNode, Quaternion>();\r\n const srcAnimWorldRots = new Map<SceneNode, Quaternion>();\r\n const dstAnimWorldRots = new Map<SceneNode, Quaternion>();\r\n const outputsByRemap = new Map<JointRetargetRemap, Float32Array>();\r\n const tmpLocalRot = new Quaternion();\r\n const tmpWorldDelta = new Quaternion();\r\n const tmpRootDelta = new Quaternion();\r\n const tmpParentInv = new Quaternion();\r\n const srcRootRotationInv = Quaternion.inverse(srcRootRotation);\r\n const dstRootRotationInv = Quaternion.inverse(dstRootRotation);\r\n\r\n for (const remap of remaps) {\r\n outputsByRemap.set(remap, new Float32Array(inputs.length * 4));\r\n }\r\n\r\n function getSrcBindWorldRot(node: SceneNode): Quaternion {\r\n let rot = srcBindWorldRots.get(node);\r\n if (!rot) {\r\n rot = (srcBindRotByNode.get(node) ?? Quaternion.identity()).clone();\r\n const parent = node.parent;\r\n if (parent && srcJointSet.has(parent)) {\r\n Quaternion.multiply(getSrcBindWorldRot(parent), rot, rot);\r\n } else {\r\n Quaternion.multiply(srcRootRotation, rot, rot);\r\n }\r\n srcBindWorldRots.set(node, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getDstBindWorldRot(node: SceneNode): Quaternion {\r\n let rot = dstBindWorldRots.get(node);\r\n if (!rot) {\r\n rot = (dstBindRotByNode.get(node) ?? Quaternion.identity()).clone();\r\n const parent = node.parent;\r\n if (parent && dstJointSet.has(parent)) {\r\n Quaternion.multiply(getDstBindWorldRot(parent), rot, rot);\r\n } else {\r\n Quaternion.multiply(dstRootRotation, rot, rot);\r\n }\r\n dstBindWorldRots.set(node, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getSrcAnimWorldRot(node: SceneNode, time: number): Quaternion {\r\n let rot = srcAnimWorldRots.get(node);\r\n if (!rot) {\r\n rot = new Quaternion();\r\n srcAnimWorldRots.set(node, rot);\r\n }\r\n const parent = node.parent;\r\n const parentWorldRot = parent && srcJointSet.has(parent) ? getSrcAnimWorldRot(parent, time) : null;\r\n sampleRotationTrack(\r\n srcRotationTrackByNode.get(node) ?? null,\r\n time,\r\n srcBindRotByNode.get(node) ?? Quaternion.identity(),\r\n tmpLocalRot\r\n );\r\n if (parentWorldRot) {\r\n Quaternion.multiply(parentWorldRot, tmpLocalRot, rot);\r\n } else {\r\n Quaternion.multiply(srcRootRotation, tmpLocalRot, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getDstAnimWorldRot(remap: JointRetargetRemap, time: number): Quaternion {\r\n let rot = dstAnimWorldRots.get(remap.dstNode);\r\n if (!rot) {\r\n rot = new Quaternion();\r\n dstAnimWorldRots.set(remap.dstNode, rot);\r\n }\r\n const srcBindWorldRot = getSrcBindWorldRot(remap.srcNode);\r\n const srcAnimWorldRot = getSrcAnimWorldRot(remap.srcNode, time);\r\n Quaternion.multiply(srcAnimWorldRot, Quaternion.inverse(srcBindWorldRot, tmpWorldDelta), tmpWorldDelta);\r\n if (rotationCorrection) {\r\n Quaternion.multiply(srcRootRotationInv, tmpWorldDelta, tmpRootDelta);\r\n Quaternion.multiply(tmpRootDelta, srcRootRotation, tmpRootDelta);\r\n applyHumanoidRotationCorrection(tmpRootDelta, rotationCorrection, tmpRootDelta);\r\n Quaternion.multiply(dstRootRotation, tmpRootDelta, tmpWorldDelta);\r\n Quaternion.multiply(tmpWorldDelta, dstRootRotationInv, tmpWorldDelta);\r\n }\r\n Quaternion.multiply(tmpWorldDelta, getDstBindWorldRot(remap.dstNode), rot);\r\n return rot;\r\n }\r\n\r\n function getDstParentAnimWorldRot(node: SceneNode, time: number): Quaternion | null {\r\n const parent = node.parent;\r\n if (!parent || !dstJointSet.has(parent)) {\r\n return dstRootRotation;\r\n }\r\n const mappedParent = remapsByDstNode.get(parent);\r\n if (mappedParent) {\r\n return getDstAnimWorldRot(mappedParent, time);\r\n }\r\n let rot = dstAnimWorldRots.get(parent);\r\n if (!rot) {\r\n rot = (dstBindRotByNode.get(parent) ?? Quaternion.identity()).clone();\r\n const parentWorldRot = getDstParentAnimWorldRot(parent, time);\r\n if (parentWorldRot) {\r\n Quaternion.multiply(parentWorldRot, rot, rot);\r\n }\r\n dstAnimWorldRots.set(parent, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n for (let i = 0; i < inputs.length; i++) {\r\n const time = inputs[i];\r\n srcAnimWorldRots.clear();\r\n dstAnimWorldRots.clear();\r\n for (const remap of remaps) {\r\n const dstAnimWorldRot = getDstAnimWorldRot(remap, time);\r\n const parentWorldRot = getDstParentAnimWorldRot(remap.dstNode, time);\r\n if (parentWorldRot) {\r\n Quaternion.multiply(Quaternion.inverse(parentWorldRot, tmpParentInv), dstAnimWorldRot, tmpLocalRot);\r\n } else {\r\n tmpLocalRot.set(dstAnimWorldRot);\r\n }\r\n tmpLocalRot.inplaceNormalize();\r\n outputsByRemap.get(remap)!.set(tmpLocalRot, i * 4);\r\n }\r\n }\r\n\r\n for (const remap of remaps) {\r\n if (!rotationTracksByRemap.get(remap)) {\r\n continue;\r\n }\r\n const outputs = new Float32Array(outputsByRemap.get(remap)!);\r\n const track = new NodeRotationTrack(\r\n new Interpolator('linear', 'quat', new Float32Array(inputs), outputs)\r\n );\r\n track.name = 'rotation';\r\n track.target = remap.dstNode.persistentId;\r\n track.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(remap.dstNode, track);\r\n }\r\n}\r\n\r\ntype ActiveAnimationInfo = {\r\n playback: AnimationPlayback;\r\n currentTime: number;\r\n repeat: number;\r\n repeatCounter: number;\r\n weight: number;\r\n targetWeight: number;\r\n speedRatio: number;\r\n firstFrame: boolean;\r\n started: boolean;\r\n paused: boolean;\r\n fadeIn: number;\r\n fadeOut: number;\r\n fadeOutStart: number;\r\n fadeToStart: number;\r\n fadeToDuration: number;\r\n fadeFromWeight: number;\r\n fadeTargetWeight: number;\r\n animateTime: number;\r\n stopReason: AnimationStopReason;\r\n completed: boolean;\r\n rangeStart: number | null;\r\n rangeEnd: number | null;\r\n};\r\n\r\n/**\r\n * Animation set\r\n *\r\n * Manages a collection of named animation clips for a model and orchestrates:\r\n * - Playback state (time, loops, speed, weights, fade-in/out).\r\n * - Blending across multiple tracks targeting the same property via weighted averages.\r\n * - Skeleton usage and application for clips that drive skeletal animation.\r\n * - Active track registration and cleanup as clips start/stop.\r\n *\r\n * Usage:\r\n * - Create or retrieve `AnimationClip`s by name.\r\n * - Start playback with `playAnimation(name, options)`.\r\n * - Advance animation with `update(deltaSeconds)`.\r\n * - Optionally adjust weight while playing with `setAnimationWeight(name, weight)`.\r\n *\r\n * Lifetime:\r\n * - Disposing the set releases references to the model, clips, and clears active state.\r\n *\r\n * @public\r\n */\r\nexport class AnimationSet extends makeObservable(Disposable)<AnimationSetEventMap>() implements IDisposable {\r\n /** @internal */\r\n private _model: SceneNode;\r\n /** @internal */\r\n private _animations: Partial<Record<string, AnimationClip>>;\r\n /** @internal */\r\n private _skeletons: DRef<SkinBinding>[];\r\n /** @internal */\r\n private _rigs: DRef<SkeletonRig>[];\r\n /** @internal */\r\n private readonly _activeTracks: Map<object, Map<unknown, AnimationTrack[]>>;\r\n /** @internal */\r\n private readonly _activeSkinBindings: Map<SkinBinding, number>;\r\n /** @internal */\r\n private readonly _activeRigs: Map<SkeletonRig, number>;\r\n /** @internal */\r\n private readonly _activeAnimations: Map<AnimationClip, ActiveAnimationInfo>;\r\n /**\r\n * Callbacks driven by the same logical clock as the animations (see {@link update}).\r\n *\r\n * Used by higher-level constructs (e.g. timeline runners) that need to advance\r\n * wall-clock-independent timers in sync with playback, so they pause/scale with the\r\n * game clock instead of running on real time.\r\n * @internal\r\n */\r\n private readonly _timelineTickers: Set<(deltaInSeconds: number) => void>;\r\n /**\r\n * Create an AnimationSet controlling the provided model.\r\n *\r\n * @param model - The SceneNode (model root) controlled by this animation set.\r\n */\r\n constructor(model: SceneNode) {\r\n super();\r\n this._model = model;\r\n this._animations = {};\r\n this._activeTracks = new Map();\r\n this._activeSkinBindings = new Map();\r\n this._activeRigs = new Map();\r\n this._activeAnimations = new Map();\r\n this._skeletons = [];\r\n this._rigs = [];\r\n this._timelineTickers = new Set();\r\n }\r\n /**\r\n * Register a callback advanced by {@link update} using the same delta time as the animations.\r\n * @internal\r\n */\r\n _registerTimelineTicker(ticker: (deltaInSeconds: number) => void) {\r\n this._timelineTickers.add(ticker);\r\n }\r\n /**\r\n * Unregister a callback previously registered with {@link _registerTimelineTicker}.\r\n * @internal\r\n */\r\n _unregisterTimelineTicker(ticker: (deltaInSeconds: number) => void) {\r\n this._timelineTickers.delete(ticker);\r\n }\r\n /**\r\n * The model (SceneNode) controlled by this animation set.\r\n */\r\n get model() {\r\n return this._model;\r\n }\r\n /**\r\n * Number of animation clips registered in this set.\r\n */\r\n get numAnimations() {\r\n return Object.getOwnPropertyNames(this._animations).length;\r\n }\r\n /**\r\n * The skeletons used by animations in this set.\r\n */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n /**\r\n * The shared rigs used by animations in this set.\r\n */\r\n get rigs() {\r\n return this._rigs;\r\n }\r\n /**\r\n * Per-skin bindings used by skinned meshes in this set.\r\n */\r\n get skinBindings() {\r\n return this._skeletons;\r\n }\r\n private resolveRigByAnimationBindingId(id: string): SkeletonRig | null {\r\n return this._model.findSkeletonRigById(id) ?? this._model.findSkinBindingById(id)?.rig ?? null;\r\n }\r\n private resolveClipRig(clip: AnimationClip): SkeletonRig | null {\r\n let rig: SkeletonRig | null = null;\r\n for (const id of clip.skeletons) {\r\n const nextRig = this.resolveRigByAnimationBindingId(id);\r\n if (!nextRig) {\r\n continue;\r\n }\r\n if (!rig) {\r\n rig = nextRig;\r\n } else if (rig !== nextRig) {\r\n return null;\r\n }\r\n }\r\n return rig;\r\n }\r\n /**\r\n * Retrieve an animation clip by name.\r\n *\r\n * @param name - Name of the animation.\r\n * @returns The clip if present; otherwise null.\r\n */\r\n get(name: string) {\r\n return this._animations[name] ?? null;\r\n }\r\n /**\r\n * Create and register a new animation clip.\r\n *\r\n * @param name - Unique name for the animation clip.\r\n * @param embedded - Whether the clip is embedded/owned (implementation-specific). Default false.\r\n * @returns The created clip, or null if the name is empty or not unique.\r\n */\r\n createAnimation(name: string, embedded = false) {\r\n if (!name || this._animations[name]) {\r\n console.error('Animation must have unique name');\r\n return null;\r\n } else {\r\n const animation = new AnimationClip(name, this, embedded);\r\n this._animations[name] = animation;\r\n this._model.scene?.queueUpdateNode(this._model);\r\n return animation;\r\n }\r\n }\r\n /**\r\n * Delete and dispose an animation clip by name.\r\n *\r\n * - If the animation is currently playing, it is first stopped (immediately).\r\n *\r\n * @param name - Name of the animation to remove.\r\n */\r\n deleteAnimation(name: string) {\r\n const animation = this._animations[name];\r\n if (animation) {\r\n this.stopAnimation(name);\r\n delete this._animations[name];\r\n animation.dispose();\r\n }\r\n }\r\n /**\r\n * Get the list of all registered animation names.\r\n *\r\n * @returns An array of clip names.\r\n */\r\n getAnimationNames() {\r\n return Object.keys(this._animations);\r\n }\r\n /**\r\n * Advance and apply active animations.\r\n *\r\n * Responsibilities per call:\r\n * - Update time cursor for each active clip (respecting speedRatio and looping).\r\n * - Enforce repeat limits and apply fade-out termination if configured.\r\n * - For each animated target, blend active tracks (weighted by clip weight × fade-in × fade-out)\r\n * and apply the resulting state to the target.\r\n * - Apply shared rig modifiers once, then update skin binding palettes.\r\n *\r\n * @param deltaInSeconds - Time step in seconds since last update.\r\n */\r\n update(deltaInSeconds: number) {\r\n this._activeAnimations.forEach((v, k) => {\r\n if (!v.started) {\r\n v.started = true;\r\n const event = this.createPlaybackEvent(v, k);\r\n v.playback._emitStart(event);\r\n this.dispatchEvent('playbackstart', event);\r\n }\r\n if (v.paused) {\r\n return;\r\n }\r\n if (v.fadeOut > 0 && v.fadeOutStart < 0) {\r\n v.fadeOutStart = v.animateTime;\r\n }\r\n if (v.completed) {\r\n v.animateTime += Math.abs(deltaInSeconds * v.speedRatio);\r\n if (v.fadeOut > 0 && v.animateTime - v.fadeOutStart >= v.fadeOut) {\r\n this.stopAnimation(k.name, { reason: v.stopReason });\r\n }\r\n return;\r\n }\r\n // Update animation time\r\n if (v.firstFrame) {\r\n v.firstFrame = false;\r\n } else {\r\n const previousTime = v.currentTime;\r\n const timeAdvance = deltaInSeconds * v.speedRatio;\r\n v.currentTime += timeAdvance;\r\n v.animateTime += timeAdvance;\r\n const direction: 1 | -1 = timeAdvance >= 0 ? 1 : -1;\r\n if (k.timeDuration > 0) {\r\n if (v.rangeEnd !== null && v.speedRatio >= 0 && v.currentTime >= v.rangeEnd) {\r\n v.currentTime = v.rangeEnd;\r\n v.playback._setTime(v.currentTime);\r\n this.completePlayback(k, v);\r\n return;\r\n } else if (v.rangeStart !== null && v.speedRatio < 0 && v.currentTime <= v.rangeStart) {\r\n v.currentTime = v.rangeStart;\r\n v.playback._setTime(v.currentTime);\r\n this.completePlayback(k, v);\r\n return;\r\n } else if (v.currentTime > k.timeDuration) {\r\n const loops = Math.max(1, Math.floor(v.currentTime / k.timeDuration));\r\n if (v.repeat !== 0 && v.repeatCounter + loops >= v.repeat) {\r\n v.repeatCounter += loops;\r\n v.currentTime = k.timeDuration;\r\n v.playback._setTime(v.currentTime);\r\n this.emitCrossedMarkers(v, k, previousTime, v.currentTime, direction);\r\n this.emitCrossedFrames(v, k, previousTime, v.currentTime, direction);\r\n this.completePlayback(k, v);\r\n return;\r\n }\r\n v.repeatCounter += loops;\r\n v.currentTime %= k.timeDuration;\r\n const event = this.createPlaybackEvent(v, k);\r\n v.playback._emitLoop(event);\r\n this.dispatchEvent('playbackloop', event);\r\n } else if (v.currentTime < 0) {\r\n const loops = Math.max(1, Math.ceil(-v.currentTime / k.timeDuration));\r\n if (v.repeat !== 0 && v.repeatCounter + loops >= v.repeat) {\r\n v.repeatCounter += loops;\r\n v.currentTime = 0;\r\n v.playback._setTime(v.currentTime);\r\n this.emitCrossedMarkers(v, k, previousTime, v.currentTime, direction);\r\n this.emitCrossedFrames(v, k, previousTime, v.currentTime, direction);\r\n this.completePlayback(k, v);\r\n return;\r\n }\r\n v.repeatCounter += loops;\r\n v.currentTime = ((v.currentTime % k.timeDuration) + k.timeDuration) % k.timeDuration;\r\n const event = this.createPlaybackEvent(v, k);\r\n v.playback._emitLoop(event);\r\n this.dispatchEvent('playbackloop', event);\r\n }\r\n }\r\n v.playback._setTime(v.currentTime);\r\n this.emitCrossedMarkers(v, k, previousTime, v.currentTime, direction);\r\n this.emitCrossedFrames(v, k, previousTime, v.currentTime, direction);\r\n if (v.repeat !== 0 && v.repeatCounter >= v.repeat) {\r\n this.completePlayback(k, v);\r\n } else if (v.fadeOut > 0) {\r\n if (v.animateTime - v.fadeOutStart >= v.fadeOut) {\r\n this.stopAnimation(k.name, { reason: v.stopReason });\r\n }\r\n }\r\n if (v.fadeToDuration > 0) {\r\n const t = Math.min(1, (v.animateTime - v.fadeToStart) / v.fadeToDuration);\r\n v.weight = v.fadeFromWeight + (v.fadeTargetWeight - v.fadeFromWeight) * t;\r\n v.playback._setWeight(v.weight);\r\n if (t >= 1) {\r\n v.fadeToDuration = 0;\r\n }\r\n }\r\n }\r\n });\r\n // Update tracks\r\n this._activeTracks.forEach((v, k) => {\r\n v.forEach((alltracks) => {\r\n // Only deal with tracks which have not been removed\r\n const tracks = alltracks.filter(\r\n (track) => track.animation && this.isPlayingAnimation(track.animation.name)\r\n );\r\n if (tracks.length > 0) {\r\n const weights = tracks.map((track) => {\r\n const info = this._activeAnimations.get(track.animation!)!;\r\n const weight = info.weight;\r\n const fadeIn = info.fadeIn === 0 ? 1 : Math.min(1, info.animateTime / info.fadeIn);\r\n let fadeOut = 1;\r\n if (info.fadeOut !== 0) {\r\n fadeOut = 1 - (info.animateTime - info.fadeOutStart) / info.fadeOut;\r\n }\r\n return weight * fadeIn * fadeOut;\r\n });\r\n const states = tracks.map((track) => {\r\n const info = this._activeAnimations.get(track.animation!)!;\r\n const t = (info.currentTime / track.animation!.timeDuration) * track.getDuration();\r\n return track.calculateState(k, t);\r\n });\r\n const state = weightedAverage(weights, states, (a, b, t) => {\r\n return tracks[0].mixState(a, b, t);\r\n });\r\n tracks[0].applyState(k, state);\r\n }\r\n });\r\n });\r\n // Update rigs once before computing per-skin palettes.\r\n this._rigs.forEach((v) => {\r\n v.get()?.apply(deltaInSeconds);\r\n });\r\n this._skeletons.forEach((v) => {\r\n v.get()?.apply();\r\n });\r\n // Advance logical-clock timers (e.g. timeline `wait` steps) with the same delta time,\r\n // so they stay in sync with playback and pause/scale with the game clock.\r\n if (this._timelineTickers.size > 0) {\r\n this._timelineTickers.forEach((ticker) => ticker(deltaInSeconds));\r\n }\r\n }\r\n /**\r\n * Check whether an animation is currently playing.\r\n *\r\n * @param name - Optional animation name. If omitted, returns true if any animation is playing.\r\n * @returns True if playing; otherwise false.\r\n */\r\n isPlayingAnimation(name?: string) {\r\n if (name) {\r\n const animation = this._animations[name];\r\n return !!animation && this._activeAnimations.has(animation);\r\n }\r\n return this._activeAnimations.size > 0;\r\n }\r\n /**\r\n * Get an animation clip by name.\r\n *\r\n * Alias of `get(name)` returning a nullable type.\r\n *\r\n * @param name - Name of the animation.\r\n * @returns The clip if present; otherwise null.\r\n */\r\n getAnimationClip(name: string) {\r\n return this._animations[name] ?? null;\r\n }\r\n /**\r\n * Set the runtime blend weight for a currently playing animation.\r\n *\r\n * Has no effect if the clip is not active.\r\n *\r\n * @param name - Name of the playing animation.\r\n * @param weight - New weight value used during blending.\r\n */\r\n setAnimationWeight(name: string, weight: number) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n info.weight = weight;\r\n info.targetWeight = weight;\r\n info.playback._setWeight(weight);\r\n }\r\n }\r\n /**\r\n * Create a playback handle without starting it.\r\n */\r\n createPlayback(name: string, options?: PlayAnimationOptions) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return null;\r\n }\r\n return new AnimationPlayback(this, ani, options);\r\n }\r\n /**\r\n * Start an animation and return its playback handle.\r\n */\r\n play(name: string, options?: PlayAnimationOptions) {\r\n const playback = this.createPlayback(name, options);\r\n playback?.play();\r\n return playback;\r\n }\r\n /**\r\n * Get currently active playbacks.\r\n */\r\n getPlaybacks(name?: string) {\r\n const playbacks: AnimationPlayback[] = [];\r\n this._activeAnimations.forEach((info, clip) => {\r\n if (!name || clip.name === name) {\r\n playbacks.push(info.playback);\r\n }\r\n });\r\n return playbacks;\r\n }\r\n /**\r\n * Get the currently active playback for a clip.\r\n */\r\n getPlayback(name: string) {\r\n const clip = this._animations[name];\r\n return clip ? (this._activeAnimations.get(clip)?.playback ?? null) : null;\r\n }\r\n /**\r\n * Start (or update) playback of an animation clip.\r\n *\r\n * Behavior:\r\n * - If the clip is already playing, stops it first.\r\n * - Otherwise initializes playback state (repeat counter, speed, weight, initial time).\r\n * - Registers clip tracks and skeletons into the active sets for blending and application.\r\n *\r\n * @param name - Name of the animation to play.\r\n * @param options - Playback options (repeat, speedRatio, fadeIn).\r\n */\r\n playAnimation(name: string, options?: PlayAnimationOptions) {\r\n this.play(name, options);\r\n }\r\n /**\r\n * Start a previously created playback.\r\n * @internal\r\n */\r\n startPlayback(playback: AnimationPlayback) {\r\n const ani = playback.clip;\r\n if (!ani) {\r\n return;\r\n }\r\n const options = playback._getOptions();\r\n const fadeIn = Math.max(options?.fadeIn ?? 0, 0);\r\n const repeat = options?.repeat ?? 0;\r\n const speedRatio = playback.speedRatio;\r\n const weight = playback.weight;\r\n const rangeStart = ani.resolveTimeRef(options?.range?.start);\r\n const rangeEnd = ani.resolveTimeRef(options?.range?.end);\r\n const syncSource = this.resolvePlaybackSyncSource(options?.sync);\r\n const initialTime = this.computePlaybackInitialTime(\r\n ani,\r\n speedRatio,\r\n rangeStart,\r\n rangeEnd,\r\n options?.sync,\r\n syncSource\r\n );\r\n if (this.isPlayingAnimation(ani.name)) {\r\n this.stopAnimation(ani.name, { reason: 'replaced' });\r\n }\r\n playback._setState('playing');\r\n playback._setTime(initialTime);\r\n this._activeAnimations.set(ani, {\r\n playback,\r\n repeat,\r\n weight,\r\n targetWeight: weight,\r\n speedRatio,\r\n fadeIn,\r\n fadeOut: 0,\r\n repeatCounter: 0,\r\n currentTime: initialTime,\r\n animateTime: 0,\r\n fadeOutStart: 0,\r\n fadeToStart: 0,\r\n fadeToDuration: 0,\r\n fadeFromWeight: weight,\r\n fadeTargetWeight: weight,\r\n firstFrame: true,\r\n started: false,\r\n paused: false,\r\n stopReason: 'manual',\r\n completed: false,\r\n rangeStart,\r\n rangeEnd\r\n });\r\n ani.tracks?.forEach((v, k) => {\r\n let nodeTracks = this._activeTracks.get(k);\r\n if (!nodeTracks) {\r\n nodeTracks = new Map();\r\n this._activeTracks.set(k, nodeTracks);\r\n }\r\n for (const track of v) {\r\n const blendId = track.getBlendId();\r\n let blendedTracks = nodeTracks.get(blendId);\r\n if (!blendedTracks) {\r\n blendedTracks = [];\r\n nodeTracks.set(blendId, blendedTracks);\r\n }\r\n blendedTracks.push(track);\r\n }\r\n });\r\n ani.skeletons?.forEach((v, k) => {\r\n const rig = this.model.findSkeletonRigById(k);\r\n if (rig) {\r\n const refcount = this._activeRigs.get(rig);\r\n this._activeRigs.set(rig, refcount ? refcount + 1 : 1);\r\n rig.playing = true;\r\n return;\r\n }\r\n const binding = this.model.findSkinBindingById(k);\r\n if (binding) {\r\n const refcount = this._activeSkinBindings.get(binding);\r\n this._activeSkinBindings.set(binding, refcount ? refcount + 1 : 1);\r\n binding.playing = true;\r\n const rigRefcount = this._activeRigs.get(binding.rig);\r\n this._activeRigs.set(binding.rig, rigRefcount ? rigRefcount + 1 : 1);\r\n binding.rig.playing = true;\r\n }\r\n });\r\n }\r\n\r\n private resolvePlaybackSyncSource(sync: AnimationPlaybackSyncOptions | undefined) {\r\n if (!sync?.target) {\r\n return null;\r\n }\r\n const playback = this.resolveActivePlayback(sync.target);\r\n if (!playback) {\r\n return null;\r\n }\r\n const info = this._activeAnimations.get(playback.clip);\r\n return info?.playback === playback ? { playback, info, clip: playback.clip } : null;\r\n }\r\n\r\n private resolveActivePlayback(target: string): AnimationPlayback | null {\r\n const named = this.getPlayback(target);\r\n if (named) {\r\n return named;\r\n }\r\n for (const info of this._activeAnimations.values()) {\r\n if (info.playback.id === target) {\r\n return info.playback;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private computePlaybackInitialTime(\r\n clip: AnimationClip,\r\n speedRatio: number,\r\n rangeStart: number | null,\r\n rangeEnd: number | null,\r\n sync: AnimationPlaybackSyncOptions | undefined,\r\n syncSource: { info: ActiveAnimationInfo; clip: AnimationClip } | null\r\n ) {\r\n const fallback = speedRatio < 0 ? (rangeEnd ?? rangeStart ?? clip.timeDuration) : (rangeStart ?? 0);\r\n if (!sync || !syncSource) {\r\n return fallback;\r\n }\r\n const destination = this.getPlaybackEffectiveRange(clip, rangeStart, rangeEnd);\r\n if (destination.duration <= 0) {\r\n return fallback;\r\n }\r\n const offset = Number.isFinite(sync.offset) ? (sync.offset ?? 0) : 0;\r\n const wrap = sync.wrap ?? true;\r\n if ((sync.mode ?? 'normalized') === 'time') {\r\n return this.constrainPlaybackTime(syncSource.info.currentTime + offset, destination, wrap);\r\n }\r\n const source = this.getPlaybackEffectiveRange(\r\n syncSource.clip,\r\n syncSource.info.rangeStart,\r\n syncSource.info.rangeEnd\r\n );\r\n if (source.duration <= 0) {\r\n return fallback;\r\n }\r\n const phase = (syncSource.info.currentTime - source.start) / source.duration + offset;\r\n return this.constrainPlaybackTime(destination.start + phase * destination.duration, destination, wrap);\r\n }\r\n\r\n private getPlaybackEffectiveRange(clip: AnimationClip, rangeStart: number | null, rangeEnd: number | null) {\r\n const start = rangeStart ?? 0;\r\n const end = rangeEnd ?? clip.timeDuration;\r\n return start <= end\r\n ? { start, end, duration: end - start }\r\n : { start: end, end: start, duration: start - end };\r\n }\r\n\r\n private constrainPlaybackTime(\r\n time: number,\r\n range: { start: number; end: number; duration: number },\r\n wrap: boolean\r\n ) {\r\n if (!Number.isFinite(time)) {\r\n return range.start;\r\n }\r\n if (!wrap) {\r\n return Math.max(range.start, Math.min(range.end, time));\r\n }\r\n if (time >= range.start && time < range.end) {\r\n return time;\r\n }\r\n const offset = (((time - range.start) % range.duration) + range.duration) % range.duration;\r\n return range.start + offset;\r\n }\r\n /**\r\n * Stop a playback handle.\r\n * @internal\r\n */\r\n stopPlayback(playback: AnimationPlayback, options?: StopAnimationOptions) {\r\n if (this._activeAnimations.get(playback.clip)?.playback === playback) {\r\n this.stopAnimation(playback.clip.name, options);\r\n }\r\n }\r\n /**\r\n * Pause a playback handle.\r\n * @internal\r\n */\r\n pausePlayback(playback: AnimationPlayback) {\r\n const info = this._activeAnimations.get(playback.clip);\r\n if (info?.playback === playback && !info.paused) {\r\n info.paused = true;\r\n playback._setState('paused');\r\n const event = this.createPlaybackEvent(info, playback.clip);\r\n playback._emitPause(event);\r\n this.dispatchEvent('playbackpause', event);\r\n }\r\n }\r\n /**\r\n * Resume a playback handle.\r\n * @internal\r\n */\r\n resumePlayback(playback: AnimationPlayback) {\r\n const info = this._activeAnimations.get(playback.clip);\r\n if (info?.playback === playback && info.paused) {\r\n info.paused = false;\r\n playback._setState('playing');\r\n const event = this.createPlaybackEvent(info, playback.clip);\r\n playback._emitResume(event);\r\n this.dispatchEvent('playbackresume', event);\r\n }\r\n }\r\n /**\r\n * Seek a playback handle.\r\n * @internal\r\n */\r\n seekPlayback(\r\n playback: AnimationPlayback,\r\n time: number,\r\n options?: { emitEvents?: boolean; apply?: boolean }\r\n ) {\r\n const clip = playback.clip;\r\n const info = this._activeAnimations.get(clip);\r\n const duration = clip.timeDuration;\r\n const clampedTime = duration > 0 ? Math.max(0, Math.min(duration, time)) : Math.max(0, time);\r\n const previousTime = info?.currentTime ?? playback.time;\r\n playback._setTime(clampedTime);\r\n if (info?.playback === playback) {\r\n info.currentTime = clampedTime;\r\n if (options?.emitEvents) {\r\n const direction: 1 | -1 = clampedTime >= previousTime ? 1 : -1;\r\n this.emitCrossedMarkers(info, clip, previousTime, clampedTime, direction);\r\n this.emitCrossedFrames(info, clip, previousTime, clampedTime, direction);\r\n }\r\n if (options?.apply) {\r\n this.update(0);\r\n }\r\n }\r\n }\r\n /**\r\n * Set playback weight.\r\n * @internal\r\n */\r\n setPlaybackWeight(playback: AnimationPlayback, weight: number) {\r\n playback._setWeight(weight);\r\n const info = this._activeAnimations.get(playback.clip);\r\n if (info?.playback === playback) {\r\n info.weight = weight;\r\n info.targetWeight = weight;\r\n }\r\n }\r\n /**\r\n * Set playback speed ratio.\r\n * @internal\r\n */\r\n setPlaybackSpeedRatio(playback: AnimationPlayback, speedRatio: number) {\r\n playback._setSpeedRatio(speedRatio);\r\n const info = this._activeAnimations.get(playback.clip);\r\n if (info?.playback === playback) {\r\n info.speedRatio = speedRatio;\r\n }\r\n }\r\n /**\r\n * Fade playback weight to a target value.\r\n * @internal\r\n */\r\n fadePlaybackTo(playback: AnimationPlayback, weight: number, duration: number) {\r\n const info = this._activeAnimations.get(playback.clip);\r\n if (info?.playback === playback) {\r\n info.fadeFromWeight = info.weight;\r\n info.fadeTargetWeight = weight;\r\n info.targetWeight = weight;\r\n info.fadeToStart = info.animateTime;\r\n info.fadeToDuration = Math.max(duration, 0);\r\n if (info.fadeToDuration === 0) {\r\n info.weight = weight;\r\n playback._setWeight(weight);\r\n }\r\n } else {\r\n playback._setWeight(weight);\r\n }\r\n }\r\n private createPlaybackEvent(info: ActiveAnimationInfo, clip: AnimationClip): AnimationPlaybackEvent {\r\n return {\r\n playback: info.playback,\r\n animationSet: this,\r\n clip,\r\n time: info.currentTime,\r\n normalizedTime: clip.timeDuration > 0 ? info.currentTime / clip.timeDuration : 0\r\n };\r\n }\r\n private completePlayback(clip: AnimationClip, info: ActiveAnimationInfo) {\r\n if (info.completed) {\r\n return;\r\n }\r\n const event = this.createPlaybackEvent(info, clip);\r\n const completionFadeOut = Math.max(info.playback._getOptions().completionFadeOut ?? 0, 0);\r\n info.playback._setState('completed');\r\n info.playback._emitComplete(event);\r\n this.dispatchEvent('playbackcomplete', event);\r\n if (completionFadeOut > 0) {\r\n info.completed = true;\r\n info.fadeOut = completionFadeOut;\r\n info.fadeOutStart = info.animateTime;\r\n info.stopReason = 'completed';\r\n return;\r\n }\r\n this.stopAnimation(clip.name, { reason: 'completed' });\r\n }\r\n private emitCrossedMarkers(\r\n info: ActiveAnimationInfo,\r\n clip: AnimationClip,\r\n fromTime: number,\r\n toTime: number,\r\n direction: 1 | -1\r\n ) {\r\n for (const marker of this.getCrossedMarkers(clip, fromTime, toTime, direction)) {\r\n const event: AnimationMarkerEvent = {\r\n ...this.createPlaybackEvent(info, clip),\r\n marker,\r\n direction\r\n };\r\n info.playback._emitMarker(event);\r\n this.dispatchEvent('marker', event);\r\n }\r\n }\r\n private emitCrossedFrames(\r\n info: ActiveAnimationInfo,\r\n clip: AnimationClip,\r\n fromTime: number,\r\n toTime: number,\r\n direction: 1 | -1\r\n ) {\r\n for (const frame of info.playback._getWatchedFrames()) {\r\n const frameTime = frame / clip.frameRate;\r\n const crossed =\r\n direction >= 0\r\n ? this.crossedForward(fromTime, toTime, frameTime, clip.timeDuration)\r\n : this.crossedBackward(fromTime, toTime, frameTime, clip.timeDuration);\r\n if (crossed) {\r\n const event: AnimationFrameEvent = {\r\n ...this.createPlaybackEvent(info, clip),\r\n frame\r\n };\r\n info.playback._emitFrame(event);\r\n this.dispatchEvent('frame', event);\r\n }\r\n }\r\n }\r\n private getCrossedMarkers(\r\n clip: AnimationClip,\r\n fromTime: number,\r\n toTime: number,\r\n direction: 1 | -1\r\n ): AnimationMarker[] {\r\n return clip.markers.filter((marker) => {\r\n const markerTime = clip.resolveMarkerTime(marker);\r\n if (markerTime === null) {\r\n return false;\r\n }\r\n return direction >= 0\r\n ? this.crossedForward(fromTime, toTime, markerTime, clip.timeDuration)\r\n : this.crossedBackward(fromTime, toTime, markerTime, clip.timeDuration);\r\n });\r\n }\r\n private crossedForward(fromTime: number, toTime: number, targetTime: number, duration: number) {\r\n return toTime >= fromTime\r\n ? targetTime > fromTime && targetTime <= toTime\r\n : (duration > 0 && targetTime > fromTime && targetTime <= duration) || targetTime <= toTime;\r\n }\r\n private crossedBackward(fromTime: number, toTime: number, targetTime: number, duration: number) {\r\n return toTime <= fromTime\r\n ? targetTime < fromTime && targetTime >= toTime\r\n : (duration > 0 && targetTime < fromTime && targetTime >= 0) || targetTime >= toTime;\r\n }\r\n /**\r\n * Stop playback of an animation clip.\r\n *\r\n * Behavior:\r\n * - If `options.fadeOut > 0`, marks the clip for fade-out; actual removal occurs after fade completes.\r\n * - If `fadeOut` is 0 or omitted, immediately:\r\n * - Removes the clip from active animations.\r\n * - Unregisters its tracks from active track maps.\r\n * - Decrements skeleton reference counts; resets and removes skeletons when refcount reaches 0.\r\n *\r\n * @param name - Name of the animation to stop.\r\n * @param options - Optional fade-out configuration.\r\n */\r\n stopAnimation(name: string, options?: StopAnimationOptions) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n const fadeOut = Math.max(options?.fadeOut ?? 0, 0);\r\n const reason = options?.reason ?? 'manual';\r\n if (fadeOut !== 0) {\r\n info.fadeOut = fadeOut;\r\n info.fadeOutStart = -1;\r\n info.stopReason = reason;\r\n info.playback._setState('stopping');\r\n } else {\r\n this._activeAnimations.delete(ani);\r\n this._activeTracks.forEach((v) => {\r\n v.forEach((tracks, id) => {\r\n v.set(\r\n id,\r\n tracks.filter((track) => track.animation !== ani)\r\n );\r\n });\r\n });\r\n ani.skeletons?.forEach((v, k) => {\r\n const rig = this.model.findSkeletonRigById(k);\r\n if (rig) {\r\n const refcount = this._activeRigs.get(rig)!;\r\n if (refcount === 1) {\r\n rig.reset();\r\n this._activeRigs.delete(rig);\r\n } else {\r\n this._activeRigs.set(rig, refcount - 1);\r\n }\r\n return;\r\n }\r\n const binding = this.model.findSkinBindingById(k);\r\n if (binding) {\r\n const refcount = this._activeSkinBindings.get(binding)!;\r\n if (refcount === 1) {\r\n binding.reset();\r\n this._activeSkinBindings.delete(binding);\r\n } else {\r\n this._activeSkinBindings.set(binding, refcount - 1);\r\n }\r\n const rigRefcount = this._activeRigs.get(binding.rig)!;\r\n if (rigRefcount === 1) {\r\n binding.rig.reset();\r\n this._activeRigs.delete(binding.rig);\r\n } else {\r\n this._activeRigs.set(binding.rig, rigRefcount - 1);\r\n }\r\n }\r\n });\r\n const event: AnimationPlaybackStopEvent = {\r\n ...this.createPlaybackEvent(info, ani),\r\n reason\r\n };\r\n if (reason !== 'completed') {\r\n info.playback._setState('stopped');\r\n }\r\n info.playback._emitStop(event);\r\n this.dispatchEvent('playbackstop', event);\r\n }\r\n }\r\n }\r\n /**\r\n * Create a skeletal-only masked clip from an existing clip in this set.\r\n *\r\n * The generated clip is a regular `AnimationClip`: it contains cloned node transform tracks\r\n * for the selected rig joints and can be played/blended through the normal animation system.\r\n * Non-skeletal tracks are skipped by default.\r\n *\r\n * @param sourceName - Name of the source clip.\r\n * @param targetName - Name of the generated clip.\r\n * @param options - Humanoid semantic or joint-name based mask options.\r\n * @returns The generated clip, or null on failure.\r\n */\r\n createSkeletalMaskedAnimation(\r\n sourceName: string,\r\n targetName: string,\r\n options: SkeletalAnimationMaskOptions\r\n ): AnimationClip | null {\r\n const sourceClip = this.get(sourceName);\r\n if (!sourceClip) {\r\n console.error(`createSkeletalMaskedAnimation: animation '${sourceName}' not found`);\r\n return null;\r\n }\r\n const rig = this.resolveClipRig(sourceClip);\r\n if (!rig) {\r\n console.error(`createSkeletalMaskedAnimation: source animation must resolve to exactly one rig`);\r\n return null;\r\n }\r\n return createSkeletalMaskedAnimationClip(this, sourceClip, targetName, rig, options);\r\n }\r\n /**\r\n * Copy a humanoid animation clip from another AnimationSet into this one via humanoid rig mapping.\r\n *\r\n * Prerequisites:\r\n * - Both source and destination skeletons must have a non-null `humanoidJointMapping`.\r\n * - Joints are matched by shared `HumanoidBodyRig` / `HumanoidHandRig` keys instead of joint names.\r\n * - The source clip must exist in `sourceSet` and must be driven by exactly one skeleton.\r\n *\r\n * @param sourceSet - The AnimationSet to copy from.\r\n * @param animationName - Name of the clip to copy.\r\n * @param targetName - Name for the new clip in this set. Defaults to `animationName`.\r\n * @returns The newly created AnimationClip, or null on failure.\r\n */\r\n copyHumanoidAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n options?: CopyHumanoidAnimationOptions\r\n ): AnimationClip | null;\r\n copyHumanoidAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetName?: string,\r\n options?: CopyHumanoidAnimationOptions\r\n ): AnimationClip | null;\r\n copyHumanoidAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetNameOrOptions?: string | CopyHumanoidAnimationOptions,\r\n copyOptions?: CopyHumanoidAnimationOptions\r\n ): AnimationClip | null {\r\n const options =\r\n typeof targetNameOrOptions === 'string' ? (copyOptions ?? {}) : (targetNameOrOptions ?? {});\r\n const destName =\r\n typeof targetNameOrOptions === 'string' ? targetNameOrOptions : (options.targetName ?? animationName);\r\n const rootMotion = options.rootMotion ?? 'scaled';\r\n const jointTranslations = options.jointTranslations ?? 'skip';\r\n const sourceClip = sourceSet.get(animationName);\r\n if (!sourceClip) {\r\n console.error(`copyHumanoidAnimationFrom: animation '${animationName}' not found in source set`);\r\n return null;\r\n }\r\n if (this._animations[destName]) {\r\n console.error(`copyHumanoidAnimationFrom: animation '${destName}' already exists in target set`);\r\n return null;\r\n }\r\n\r\n const srcSkeletonId = [...sourceClip.skeletons][0] ?? '';\r\n const srcSkeleton = sourceSet.resolveClipRig(sourceClip);\r\n if (!srcSkeleton) {\r\n console.error(\r\n `copyHumanoidAnimationFrom: source animation clip must resolve to exactly one humanoid rig`\r\n );\r\n return null;\r\n }\r\n\r\n // Check that source skeleton has humanoid mapping\r\n const srcHumanoidMapping = srcSkeleton.humanoidJointMapping;\r\n if (!srcHumanoidMapping) {\r\n console.error(`copyHumanoidAnimationFrom: source skeleton does not have a humanoid joint mapping`);\r\n return null;\r\n }\r\n\r\n const jointRemapsBySrcNode = new Map<SceneNode, JointRetargetRemap[]>();\r\n\r\n // Find a destination skeleton that has a humanoid mapping and share at least the body rig keys\r\n let srcJointsFiltered: SceneNode[] = [];\r\n let dstJointsFiltered: SceneNode[] = [];\r\n\r\n const dstSkeleton = this._rigs\r\n .map((ref) => ref.get())\r\n .find((sk) => {\r\n if (!sk) {\r\n return false;\r\n }\r\n // Check that destination skeleton has humanoid mapping\r\n const dstHumanoidMapping = sk.humanoidJointMapping;\r\n if (!dstHumanoidMapping) {\r\n return false;\r\n }\r\n const srcHips = srcHumanoidMapping.body[HumanoidBodyRig.Hips];\r\n const dstHips = dstHumanoidMapping.body[HumanoidBodyRig.Hips];\r\n if (!srcHips || !dstHips || !srcSkeleton.joints.includes(srcHips) || !sk.joints.includes(dstHips)) {\r\n return false;\r\n }\r\n\r\n // Collect matched (srcJoint, dstJoint) pairs via shared humanoid rig keys\r\n const srcMatched: SceneNode[] = [];\r\n const dstMatched: SceneNode[] = [];\r\n const addMatch = (srcJoint: SceneNode | undefined, dstJoint: SceneNode | undefined) => {\r\n if (srcJoint && dstJoint && srcSkeleton.joints.includes(srcJoint) && sk.joints.includes(dstJoint)) {\r\n srcMatched.push(srcJoint);\r\n dstMatched.push(dstJoint);\r\n }\r\n };\r\n\r\n // Match body rig joints\r\n for (const key of Object.keys(srcHumanoidMapping.body) as (keyof typeof srcHumanoidMapping.body)[]) {\r\n addMatch(srcHumanoidMapping.body[key], dstHumanoidMapping.body[key]);\r\n }\r\n\r\n // Match left hand rig joints only when both sides define them; skip silently if either is absent\r\n if (srcHumanoidMapping.leftHand && dstHumanoidMapping.leftHand) {\r\n for (const key of Object.keys(\r\n srcHumanoidMapping.leftHand\r\n ) as (keyof typeof srcHumanoidMapping.leftHand)[]) {\r\n addMatch(srcHumanoidMapping.leftHand[key], dstHumanoidMapping.leftHand[key]);\r\n }\r\n }\r\n\r\n // Match right hand rig joints only when both sides define them; skip silently if either is absent\r\n if (srcHumanoidMapping.rightHand && dstHumanoidMapping.rightHand) {\r\n for (const key of Object.keys(\r\n srcHumanoidMapping.rightHand\r\n ) as (keyof typeof srcHumanoidMapping.rightHand)[]) {\r\n addMatch(srcHumanoidMapping.rightHand[key], dstHumanoidMapping.rightHand[key]);\r\n }\r\n }\r\n\r\n if (srcMatched.length === 0) {\r\n return false;\r\n }\r\n\r\n srcJointsFiltered = srcMatched;\r\n dstJointsFiltered = dstMatched;\r\n return true;\r\n });\r\n\r\n if (!dstSkeleton) {\r\n console.error(\r\n `copyHumanoidAnimationFrom: no matching humanoid skeleton in target set for '${srcSkeletonId}'`\r\n );\r\n return null;\r\n }\r\n\r\n // Compute the world-space rotation of the parent chain above a motion node,\r\n // walking ALL ancestor nodes up to (but not including) the model root.\r\n // This must include non-joint nodes such as \"Armature\" in Mixamo rigs, which\r\n // carry a 90° X rotation that is NOT captured by humanoidRootRotation (which\r\n // only traverses nodes inside the skeleton joints list).\r\n function computeParentChainRotation(\r\n node: SceneNode,\r\n modelRoot: SceneNode,\r\n skeleton: SkeletonRig\r\n ): Quaternion {\r\n const result = Quaternion.identity();\r\n const jointSet = new Set(skeleton.joints);\r\n let p = node.parent;\r\n while (p && p !== modelRoot) {\r\n if (!jointSet.has(p)) {\r\n Quaternion.multiply(p.rotation, result, result);\r\n }\r\n p = p.parent;\r\n }\r\n return result;\r\n }\r\n\r\n const srcHipsNode = srcSkeleton.humanoidJointMapping!.body[HumanoidBodyRig.Hips];\r\n const dstHipsNode = dstSkeleton.humanoidJointMapping!.body[HumanoidBodyRig.Hips];\r\n const srcRootNode = srcSkeleton.rootJoint ?? srcHipsNode;\r\n const dstRootNode = dstSkeleton.rootJoint ?? dstHipsNode;\r\n const srcRootRot = computeParentChainRotation(srcRootNode, sourceSet.model, srcSkeleton);\r\n const dstRootRot = computeParentChainRotation(dstRootNode, this._model, dstSkeleton);\r\n const srcRootTranslationTrack = findTranslationTrack(sourceClip.tracks.get(srcRootNode));\r\n const srcAncestorTranslationTrackInfo = !srcRootTranslationTrack\r\n ? findAncestorTranslationTrack(sourceClip, srcRootNode, sourceSet.model)\r\n : null;\r\n const srcFallbackHipsTranslationTrack =\r\n !srcRootTranslationTrack && !srcAncestorTranslationTrackInfo && srcRootNode !== srcHipsNode\r\n ? findTranslationTrack(sourceClip.tracks.get(srcHipsNode))\r\n : null;\r\n const srcMotionTrack =\r\n srcRootTranslationTrack ?? srcAncestorTranslationTrackInfo?.track ?? srcFallbackHipsTranslationTrack;\r\n const srcMotionNode = srcRootTranslationTrack\r\n ? srcRootNode\r\n : srcAncestorTranslationTrackInfo\r\n ? srcAncestorTranslationTrackInfo.node\r\n : srcFallbackHipsTranslationTrack\r\n ? srcHipsNode\r\n : null;\r\n const srcMotionParentRot = srcMotionNode\r\n ? computeParentChainRotation(srcMotionNode, sourceSet.model, srcSkeleton)\r\n : srcRootRot;\r\n const rootTranslationRotation = Quaternion.multiply(Quaternion.inverse(dstRootRot), srcMotionParentRot);\r\n const rootTranslationScale =\r\n rootMotion === 'scaled'\r\n ? typeof options.rootMotionScale === 'number'\r\n ? options.rootMotionScale\r\n : options.rootMotionScale === 'none'\r\n ? 1\r\n : getHumanoidRootMotionScale(srcSkeleton, dstSkeleton)\r\n : 1;\r\n const jointRemaps: JointRetargetRemap[] = [];\r\n const jointRemapsByDstSkeleton = new Map<SkeletonRig, JointRetargetRemap[]>([[dstSkeleton, jointRemaps]]);\r\n const srcSignSkeletons = sourceSet._rigs.map((ref) => ref.get()).filter((sk): sk is SkeletonRig => !!sk);\r\n const dstSignSkeletons = this._rigs.map((ref) => ref.get()).filter((sk): sk is SkeletonRig => !!sk);\r\n const humanoidRotationCorrection = getHumanoidRotationCorrection(\r\n srcSkeleton,\r\n dstSkeleton,\r\n srcSignSkeletons,\r\n dstSignSkeletons\r\n );\r\n const addJointRemap = (\r\n targetSkeleton: SkeletonRig,\r\n srcJoint: SceneNode | undefined,\r\n dstJoint: SceneNode | undefined,\r\n applyRotationCorrection = true\r\n ) => {\r\n if (\r\n !srcJoint ||\r\n !dstJoint ||\r\n !srcSkeleton.joints.includes(srcJoint) ||\r\n !targetSkeleton.joints.includes(dstJoint)\r\n ) {\r\n return;\r\n }\r\n const remap = createJointRetargetRemap(\r\n srcSkeleton,\r\n targetSkeleton,\r\n srcJoint,\r\n dstJoint,\r\n undefined,\r\n undefined,\r\n humanoidRotationCorrection ?? undefined,\r\n undefined,\r\n applyRotationCorrection ? (humanoidRotationCorrection ?? undefined) : undefined\r\n );\r\n let targetRemaps = jointRemapsByDstSkeleton.get(targetSkeleton);\r\n if (!targetRemaps) {\r\n targetRemaps = [];\r\n jointRemapsByDstSkeleton.set(targetSkeleton, targetRemaps);\r\n }\r\n targetRemaps.push(remap);\r\n let srcRemaps = jointRemapsBySrcNode.get(srcJoint);\r\n if (!srcRemaps) {\r\n srcRemaps = [];\r\n jointRemapsBySrcNode.set(srcJoint, srcRemaps);\r\n }\r\n srcRemaps.push(remap);\r\n };\r\n const addHumanoidMappingRemaps = (targetSkeleton: SkeletonRig) => {\r\n const targetMapping = targetSkeleton.humanoidJointMapping;\r\n if (!targetMapping) {\r\n return;\r\n }\r\n const applyRotationCorrection = targetSkeleton === dstSkeleton;\r\n for (const key of Object.keys(srcHumanoidMapping.body) as (keyof typeof srcHumanoidMapping.body)[]) {\r\n addJointRemap(\r\n targetSkeleton,\r\n srcHumanoidMapping.body[key],\r\n targetMapping.body[key],\r\n applyRotationCorrection\r\n );\r\n }\r\n if (srcHumanoidMapping.leftHand && targetMapping.leftHand) {\r\n for (const key of Object.keys(\r\n srcHumanoidMapping.leftHand\r\n ) as (keyof typeof srcHumanoidMapping.leftHand)[]) {\r\n addJointRemap(\r\n targetSkeleton,\r\n srcHumanoidMapping.leftHand[key],\r\n targetMapping.leftHand[key],\r\n applyRotationCorrection\r\n );\r\n }\r\n }\r\n if (srcHumanoidMapping.rightHand && targetMapping.rightHand) {\r\n for (const key of Object.keys(\r\n srcHumanoidMapping.rightHand\r\n ) as (keyof typeof srcHumanoidMapping.rightHand)[]) {\r\n addJointRemap(\r\n targetSkeleton,\r\n srcHumanoidMapping.rightHand[key],\r\n targetMapping.rightHand[key],\r\n applyRotationCorrection\r\n );\r\n }\r\n }\r\n };\r\n // Build remap for matched joint pairs\r\n for (let fi = 0; fi < srcJointsFiltered.length; fi++) {\r\n addJointRemap(dstSkeleton, srcJointsFiltered[fi], dstJointsFiltered[fi], true);\r\n }\r\n for (const targetSkeleton of dstSignSkeletons) {\r\n if (targetSkeleton !== dstSkeleton) {\r\n addHumanoidMappingRemaps(targetSkeleton);\r\n }\r\n }\r\n\r\n const dstClip = this.createAnimation(destName);\r\n if (!dstClip) {\r\n return null;\r\n }\r\n dstClip.timeDuration = sourceClip.timeDuration;\r\n dstClip.weight = sourceClip.weight;\r\n dstClip.autoPlay = sourceClip.autoPlay;\r\n\r\n copyMorphTargetGroupTracks(sourceClip, dstClip, this._model);\r\n\r\n for (const [targetSkeleton, targetRemaps] of jointRemapsByDstSkeleton) {\r\n if (targetRemaps.length === 0) {\r\n continue;\r\n }\r\n const hasCopyableTrack =\r\n targetSkeleton === dstSkeleton ||\r\n targetRemaps.some((remap) => {\r\n const srcTracks = sourceClip.tracks.get(remap.srcNode);\r\n if (!srcTracks) {\r\n return false;\r\n }\r\n for (const srcTrack of srcTracks) {\r\n if (srcTrack instanceof NodeRotationTrack || srcTrack instanceof NodeEulerRotationTrack) {\r\n return true;\r\n }\r\n if (\r\n srcTrack instanceof NodeTranslationTrack &&\r\n remap.srcNode !== srcRootNode &&\r\n srcTrack !== srcMotionTrack &&\r\n jointTranslations === 'preserve'\r\n ) {\r\n return true;\r\n }\r\n if (srcTrack instanceof NodeScaleTrack) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n if (!hasCopyableTrack) {\r\n continue;\r\n }\r\n dstClip.addSkeleton(targetSkeleton.persistentId);\r\n const targetRootNode =\r\n targetSkeleton.rootJoint ??\r\n targetSkeleton.humanoidJointMapping?.body[HumanoidBodyRig.Hips] ??\r\n targetRemaps[0].dstNode;\r\n const targetRootRot =\r\n targetRootNode === dstRootNode\r\n ? dstRootRot\r\n : computeParentChainRotation(targetRootNode, this._model, targetSkeleton);\r\n bakeHumanoidRotationTracks(\r\n sourceClip,\r\n srcSkeleton,\r\n targetSkeleton,\r\n srcRootRot,\r\n targetRootRot,\r\n dstClip,\r\n targetRemaps,\r\n humanoidRotationCorrection\r\n );\r\n }\r\n\r\n if (rootMotion !== 'none') {\r\n const dstRootBindPose = getRigBindPoseForNode(dstSkeleton, dstRootNode);\r\n let dstRootTrack: NodeTranslationTrack | null = null;\r\n if (rootMotion === 'locked') {\r\n dstRootTrack = createConstantTranslationTrack(dstRootBindPose.position);\r\n } else if (srcMotionTrack && srcMotionNode) {\r\n const srcMotionBindPose = getRigBindPoseForNode(srcSkeleton, srcMotionNode);\r\n const rootRemap = createTranslationRetargetRemap(\r\n srcMotionNode,\r\n dstRootNode,\r\n srcMotionBindPose.position,\r\n dstRootBindPose.position,\r\n dstSkeleton.joints.indexOf(dstRootNode),\r\n rootTranslationScale,\r\n rootTranslationRotation,\r\n humanoidRotationCorrection ?? undefined,\r\n options.lockRootMotionAxes,\r\n humanoidRotationCorrection ?? undefined\r\n );\r\n dstRootTrack = retargetTranslationTrack(srcMotionTrack, rootRemap);\r\n }\r\n if (dstRootTrack) {\r\n dstRootTrack.name = srcMotionTrack?.name ?? 'translation';\r\n dstRootTrack.target = dstRootNode.persistentId;\r\n dstRootTrack.jointIndex = dstSkeleton.joints.indexOf(dstRootNode);\r\n dstClip.addTrack(dstRootNode, dstRootTrack);\r\n }\r\n }\r\n\r\n for (const [srcNode, srcRemaps] of jointRemapsBySrcNode) {\r\n const srcTracks = sourceClip.tracks.get(srcNode);\r\n if (!srcTracks) {\r\n // Not every humanoid joint must have a track; skip silently\r\n continue;\r\n }\r\n for (const remap of srcRemaps) {\r\n const dstNode = remap.dstNode;\r\n for (const srcTrack of srcTracks) {\r\n let dstTrack: AnimationTrack;\r\n if (srcTrack instanceof NodeRotationTrack || srcTrack instanceof NodeEulerRotationTrack) {\r\n continue;\r\n } else if (srcTrack instanceof NodeTranslationTrack) {\r\n if (srcNode === srcRootNode || srcTrack === srcMotionTrack || jointTranslations !== 'preserve') {\r\n continue;\r\n }\r\n dstTrack = retargetTranslationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeScaleTrack) {\r\n dstTrack = new NodeScaleTrack(cloneInterpolator(srcTrack.interpolator));\r\n } else {\r\n console.warn(\r\n `copyHumanoidAnimationFrom: unsupported track type '${srcTrack.constructor.name}', skipping`\r\n );\r\n continue;\r\n }\r\n\r\n dstTrack.name = srcTrack.name;\r\n dstTrack.target = dstNode.persistentId;\r\n dstTrack.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(dstNode, dstTrack);\r\n }\r\n }\r\n }\r\n\r\n return dstClip;\r\n }\r\n /**\r\n * Copy an animation clip from another AnimationSet into this one.\r\n *\r\n * Prerequisites:\r\n * - Both sets must reference skeletons with identical joint names and counts.\r\n * - The source clip must exist in `sourceSet`.\r\n *\r\n * @param sourceSet - The AnimationSet to copy from.\r\n * @param animationName - Name of the clip to copy.\r\n * @param targetName - Name for the new clip in this set. Defaults to `animationName`.\r\n * @param excludeJoint - Optional predicate; joints whose name returns true are excluded from\r\n * skeleton structure matching.\r\n * @returns The newly created AnimationClip, or null on failure.\r\n *\r\n * @deprecated Use AnimationSet.copyHumanoidAnimationFrom instead.\r\n */\r\n copyAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetName?: string,\r\n excludeJoint?: (jointName: string) => boolean\r\n ): AnimationClip | null {\r\n const destName = targetName ?? animationName;\r\n const sourceClip = sourceSet.get(animationName);\r\n if (!sourceClip) {\r\n console.error(`copyAnimationFrom: animation '${animationName}' not found in source set`);\r\n return null;\r\n }\r\n if (this._animations[destName]) {\r\n console.error(`copyAnimationFrom: animation '${destName}' already exists in target set`);\r\n return null;\r\n }\r\n\r\n const srcSkeletonId = [...sourceClip.skeletons][0] ?? '';\r\n const srcSkeleton = sourceSet.resolveClipRig(sourceClip);\r\n if (!srcSkeleton) {\r\n console.error(`copyAnimationFrom: source animation clip must resolve to exactly one rig`);\r\n return null;\r\n }\r\n const nodeMap = new Map<object, SceneNode>();\r\n const jointRemapBySrcNode = new Map<object, JointRetargetRemap>();\r\n\r\n const jointsFiltered = srcSkeleton.joints.filter((j) => !excludeJoint?.(j.name));\r\n const srcRootNode = findRootJoint(jointsFiltered);\r\n if (!srcRootNode) {\r\n console.error(`copyAnimationFrom: cannot determine the root joint for source skeleton`);\r\n return null;\r\n }\r\n // Build filtered joint lists for matching (exclude joints rejected by filterJoint)\r\n const srcJointsFiltered = sortJoints(srcRootNode, jointsFiltered);\r\n if (!srcJointsFiltered) {\r\n console.error(`copyAnimationFrom: invalid source skeleton structure`);\r\n return null;\r\n }\r\n let dstJointsFiltered: SceneNode[] = [];\r\n const dstSkeleton = this._rigs\r\n .map((ref) => ref.get())\r\n .find((sk) => {\r\n if (!sk) {\r\n return false;\r\n }\r\n const jointsFiltered = sk.joints.filter((j) => !excludeJoint?.(j.name));\r\n if (jointsFiltered.length !== srcJointsFiltered.length) {\r\n return false;\r\n }\r\n const rootNode = findRootJoint(jointsFiltered);\r\n if (!rootNode) {\r\n return false;\r\n }\r\n const sortedJointsFiltered = sortJoints(rootNode, jointsFiltered);\r\n if (\r\n sortedJointsFiltered &&\r\n srcJointsFiltered.every((j, i) => j.name === sortedJointsFiltered[i].name)\r\n ) {\r\n dstJointsFiltered = sortedJointsFiltered;\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (!dstJointsFiltered || !dstSkeleton) {\r\n console.error(`copyAnimationFrom: no matching skeleton in target set for '${srcSkeletonId}'`);\r\n return null;\r\n }\r\n // Build remap only for joints that pass the filter\r\n for (let fi = 0; fi < srcJointsFiltered.length; fi++) {\r\n const srcJoint = srcJointsFiltered[fi];\r\n const dstJoint = dstJointsFiltered[fi];\r\n nodeMap.set(srcJoint, dstJoint);\r\n jointRemapBySrcNode.set(\r\n srcJoint,\r\n createJointRetargetRemap(srcSkeleton, dstSkeleton, srcJoint, dstJoint)\r\n );\r\n }\r\n\r\n const dstClip = this.createAnimation(destName);\r\n if (!dstClip) {\r\n return null;\r\n }\r\n dstClip.timeDuration = sourceClip.timeDuration;\r\n dstClip.weight = sourceClip.weight;\r\n dstClip.autoPlay = sourceClip.autoPlay;\r\n\r\n // Register destination skeleton\r\n dstClip.addSkeleton(dstSkeleton.persistentId);\r\n copyMorphTargetGroupTracks(sourceClip, dstClip, this._model);\r\n\r\n for (const srcNode of srcJointsFiltered) {\r\n const srcTracks = sourceClip.tracks.get(srcNode);\r\n if (!srcTracks) {\r\n console.error(`copyAnimationFrom: no track for joint: ${srcNode.name}`);\r\n return null;\r\n }\r\n const dstNode = nodeMap.get(srcNode)!;\r\n const remap = jointRemapBySrcNode.get(srcNode)!;\r\n\r\n for (const srcTrack of srcTracks) {\r\n let dstTrack: AnimationTrack;\r\n if (srcTrack instanceof NodeRotationTrack) {\r\n dstTrack = retargetRotationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeEulerRotationTrack) {\r\n dstTrack = retargetEulerToRotationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeTranslationTrack) {\r\n dstTrack = retargetTranslationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeScaleTrack) {\r\n dstTrack = new NodeScaleTrack(cloneInterpolator(srcTrack.interpolator));\r\n } else {\r\n console.warn(`copyAnimationFrom: unsupported track type '${srcTrack.constructor.name}', skipping`);\r\n continue;\r\n }\r\n\r\n dstTrack.name = srcTrack.name;\r\n dstTrack.target = dstNode.persistentId;\r\n dstTrack.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(dstNode, dstTrack);\r\n }\r\n }\r\n\r\n return dstClip;\r\n\r\n function findRootJoint(joints: SceneNode[]) {\r\n let root: Nullable<SceneNode> = null;\r\n for (const joint of joints) {\r\n if (!root) {\r\n root = joint;\r\n }\r\n while (!root!.isParentOf(joint)) {\r\n root = root!.parent;\r\n }\r\n if (!root) {\r\n break;\r\n }\r\n }\r\n if (!root || !joints.includes(root)) {\r\n return null;\r\n }\r\n return root;\r\n }\r\n\r\n function sortJoints(root: SceneNode, joints: SceneNode[]): Nullable<SceneNode[]> {\r\n const ordered: SceneNode[] = [];\r\n const visited = new Set<SceneNode>();\r\n function visit(joint: SceneNode) {\r\n if (visited.has(joint)) {\r\n return true;\r\n }\r\n if (!joints.includes(joint)) {\r\n return false;\r\n }\r\n if (joint !== root) {\r\n visit(joint.parent!);\r\n }\r\n visited.add(joint);\r\n ordered.push(joint);\r\n return true;\r\n }\r\n for (const joint of joints) {\r\n if (!visit(joint)) {\r\n return null;\r\n }\r\n }\r\n return ordered;\r\n }\r\n }\r\n\r\n /**\r\n * Reset all skeleton modifiers\r\n */\r\n resetSkeletonModifiers() {\r\n for (const sk of this._skeletons) {\r\n for (const modifier of sk.get()!.modifiers) {\r\n modifier.reset();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the animation set and release owned resources.\r\n *\r\n * - Disposes the weak reference to the model.\r\n * - Disposes all registered animation clips.\r\n * - Clears active animations, tracks, and skeleton references.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n for (const k in this._animations) {\r\n this._animations[k]!.dispose();\r\n }\r\n this._animations = {};\r\n this._activeAnimations.clear();\r\n this._activeSkinBindings.clear();\r\n this._activeRigs.clear();\r\n this._activeTracks.clear();\r\n }\r\n}\r\n"],"names":["nextAnimationPlaybackId","AnimationPlayback","Observable","animationSet","clip","options","_animationSet","_clip","_options","_id","id","_state","_speedRatio","speedRatio","_weight","weight","_time","timeDuration","_layer","layer","_priority","priority","_interruptible","interruptible","_frameWaiters","Map","state","time","value","seek","normalizedTime","setPlaybackWeight","setPlaybackSpeedRatio","play","startPlayback","pause","pausePlayback","resume","resumePlayback","stop","stopPlayback","seekPlayback","fadeTo","duration","fadePlaybackTo","crossFadeTo","name","Math","max","fadeOut","reason","fadeIn","waitForComplete","Promise","resolve","once","waitForMarker","idOrName","undefined","handler","event","marker","off","on","waitForFrame","frame","waiters","get","settled","wrappedResolve","current","set","filter","item","push","_getOptions","_setState","_setTime","_setWeight","_setSpeedRatio","_getWatchedFrames","keys","_emitStart","dispatchEvent","_emitLoop","_emitMarker","_emitFrame","delete","forEach","_emitComplete","_emitStop","_emitPause","_emitResume","cloneInterpolator","src","Interpolator","mode","target","inputs","Float32Array","outputs","createJointRetargetRemap","srcSkeleton","dstSkeleton","srcJoint","dstJoint","translationRotation","translationScale","translationCorrection","translationAxisLocks","rotationCorrection","si","joints","indexOf","di","srcBindPose","bindPose","dstBindPose","srcLen","position","magnitude","dstLen","dstNode","dstJointIndex","srcNode","srcBindRotInv","Quaternion","inverse","rotation","dstBindRot","clone","srcBindPos","dstBindPos","createTranslationRetargetRemap","identity","getBindPosition","skeleton","joint","index","getSkeletonLocalBindTransform","node","jointSet","cache","transform","getRigBindPoseForNode","parent","has","parentTransform","addBy","multiply","getHumanoidLateralXSign","mapping","humanoidJointMapping","pairs","HumanoidBodyRig","LeftShoulder","RightShoulder","LeftUpperArm","RightUpperArm","LeftLowerArm","RightLowerArm","LeftHand","RightHand","LeftUpperLeg","RightUpperLeg","LeftLowerLeg","RightLowerLeg","LeftFoot","RightFoot","LeftToes","RightToes","Set","score","leftKey","rightKey","left","body","right","dx","x","abs","getHumanoidForwardZSign","footKey","toesKey","foot","toes","dz","z","getHumanoidSignFromSkeletons","skeletons","getSign","getHumanoidRotationCorrection","srcSignSkeletons","dstSignSkeletons","srcLateralXSign","dstLateralXSign","srcForwardZSign","dstForwardZSign","axisXSign","axisZSign","determinant","y","getBindPoseForJoint","rootJoint","rootBindPose","scale","getBindDistanceToAncestor","ancestor","distance","bindPosition","getHumanoidLegLength","side","hips","Hips","getHumanoidRootMotionScale","srcLeftLeg","srcRightLeg","dstLeftLeg","dstRightLeg","srcLegLength","dstLegLength","findTranslationTrack","tracks","find","track","NodeTranslationTrack","findAncestorTranslationTrack","modelRoot","copyMorphTargetGroupTracks","sourceClip","targetClip","values","MorphTargetGroupTrack","cloned","persistentId","addTrack","applyTranslationAxisLocks","bindValue","locks","applyTranslationTangentAxisLocks","retargetRotation","qSrcAnim","remap","out","applyHumanoidRotationCorrection","inplaceNormalize","retargetRotationTangent","qSrcTangent","q","correction","setXYZW","w","applyHumanoidTranslationCorrection","setXYZ","retargetTranslationValue","srcValue","subBy","scaleBy","retargetTranslationTangent","retargetRotationTrack","isCubic","interpolator","frameStride","numFrames","length","srcOutputs","newOutputs","t","f","base","subarray","NodeRotationTrack","retargetEulerToRotationTrack","srcInputs","fromEulerAngle","retargetTranslationTrack","v","Vector3","createConstantTranslationTrack","findRotationTrack","NodeEulerRotationTrack","collectTrackTimes","times","add","sampleRotationTrack","fallback","calculateState","bakeHumanoidRotationTracks","srcRootRotation","dstRootRotation","dstClip","remaps","rotationTracksByRemap","remapsByDstNode","srcJointSet","dstJointSet","srcBindRotByNode","dstBindRotByNode","srcRotationTrackByNode","i","sort","a","b","srcBindWorldRots","dstBindWorldRots","srcAnimWorldRots","dstAnimWorldRots","outputsByRemap","tmpLocalRot","tmpWorldDelta","tmpRootDelta","tmpParentInv","srcRootRotationInv","dstRootRotationInv","getSrcBindWorldRot","rot","getDstBindWorldRot","getSrcAnimWorldRot","parentWorldRot","getDstAnimWorldRot","srcBindWorldRot","srcAnimWorldRot","getDstParentAnimWorldRot","mappedParent","clear","dstAnimWorldRot","jointIndex","AnimationSet","makeObservable","Disposable","model","_model","_animations","_activeTracks","_activeSkinBindings","_activeRigs","_activeAnimations","_skeletons","_rigs","_timelineTickers","_registerTimelineTicker","ticker","_unregisterTimelineTicker","numAnimations","Object","getOwnPropertyNames","rigs","skinBindings","resolveRigByAnimationBindingId","findSkeletonRigById","findSkinBindingById","rig","resolveClipRig","nextRig","createAnimation","embedded","console","error","animation","AnimationClip","scene","queueUpdateNode","deleteAnimation","stopAnimation","dispose","getAnimationNames","update","deltaInSeconds","k","started","createPlaybackEvent","playback","paused","fadeOutStart","animateTime","completed","stopReason","firstFrame","previousTime","currentTime","timeAdvance","direction","rangeEnd","completePlayback","rangeStart","loops","floor","repeat","repeatCounter","emitCrossedMarkers","emitCrossedFrames","ceil","fadeToDuration","min","fadeToStart","fadeFromWeight","fadeTargetWeight","alltracks","isPlayingAnimation","weights","map","info","states","getDuration","weightedAverage","mixState","applyState","apply","size","getAnimationClip","setAnimationWeight","ani","targetWeight","createPlayback","getPlaybacks","playbacks","getPlayback","playAnimation","resolveTimeRef","range","start","end","syncSource","resolvePlaybackSyncSource","sync","initialTime","computePlaybackInitialTime","nodeTracks","blendId","getBlendId","blendedTracks","refcount","playing","binding","rigRefcount","resolveActivePlayback","named","destination","getPlaybackEffectiveRange","offset","Number","isFinite","wrap","constrainPlaybackTime","source","phase","clampedTime","emitEvents","completionFadeOut","fromTime","toTime","getCrossedMarkers","frameTime","frameRate","crossed","crossedForward","crossedBackward","markers","markerTime","resolveMarkerTime","targetTime","reset","createSkeletalMaskedAnimation","sourceName","targetName","createSkeletalMaskedAnimationClip","copyHumanoidAnimationFrom","sourceSet","animationName","targetNameOrOptions","copyOptions","destName","rootMotion","jointTranslations","srcSkeletonId","srcHumanoidMapping","jointRemapsBySrcNode","srcJointsFiltered","dstJointsFiltered","ref","sk","dstHumanoidMapping","srcHips","dstHips","includes","srcMatched","dstMatched","addMatch","key","leftHand","rightHand","computeParentChainRotation","result","p","srcHipsNode","dstHipsNode","srcRootNode","dstRootNode","srcRootRot","dstRootRot","srcRootTranslationTrack","srcAncestorTranslationTrackInfo","srcFallbackHipsTranslationTrack","srcMotionTrack","srcMotionNode","srcMotionParentRot","rootTranslationRotation","rootTranslationScale","rootMotionScale","jointRemaps","jointRemapsByDstSkeleton","humanoidRotationCorrection","addJointRemap","targetSkeleton","applyRotationCorrection","targetRemaps","srcRemaps","addHumanoidMappingRemaps","targetMapping","fi","autoPlay","hasCopyableTrack","some","srcTracks","srcTrack","NodeScaleTrack","addSkeleton","targetRootNode","targetRootRot","dstRootBindPose","dstRootTrack","srcMotionBindPose","rootRemap","lockRootMotionAxes","dstTrack","warn","copyAnimationFrom","excludeJoint","nodeMap","jointRemapBySrcNode","jointsFiltered","j","findRootJoint","sortJoints","rootNode","sortedJointsFiltered","every","root","isParentOf","ordered","visited","visit","resetSkeletonModifiers","modifier","modifiers","onDispose"],"mappings":"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"}