@aura3d/animation 1.0.6

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 (187) hide show
  1. package/README.md +19 -0
  2. package/dist/AnimationAction.d.ts +40 -0
  3. package/dist/AnimationAction.d.ts.map +1 -0
  4. package/dist/AnimationAction.js +143 -0
  5. package/dist/AnimationAction.js.map +1 -0
  6. package/dist/AnimationClip.d.ts +24 -0
  7. package/dist/AnimationClip.d.ts.map +1 -0
  8. package/dist/AnimationClip.js +45 -0
  9. package/dist/AnimationClip.js.map +1 -0
  10. package/dist/AnimationClipEvents.d.ts +57 -0
  11. package/dist/AnimationClipEvents.d.ts.map +1 -0
  12. package/dist/AnimationClipEvents.js +171 -0
  13. package/dist/AnimationClipEvents.js.map +1 -0
  14. package/dist/AnimationClipRegistry.d.ts +76 -0
  15. package/dist/AnimationClipRegistry.d.ts.map +1 -0
  16. package/dist/AnimationClipRegistry.js +130 -0
  17. package/dist/AnimationClipRegistry.js.map +1 -0
  18. package/dist/AnimationController.d.ts +168 -0
  19. package/dist/AnimationController.d.ts.map +1 -0
  20. package/dist/AnimationController.js +619 -0
  21. package/dist/AnimationController.js.map +1 -0
  22. package/dist/AnimationEvents.d.ts +10 -0
  23. package/dist/AnimationEvents.d.ts.map +1 -0
  24. package/dist/AnimationEvents.js +26 -0
  25. package/dist/AnimationEvents.js.map +1 -0
  26. package/dist/AnimationLayer.d.ts +27 -0
  27. package/dist/AnimationLayer.d.ts.map +1 -0
  28. package/dist/AnimationLayer.js +53 -0
  29. package/dist/AnimationLayer.js.map +1 -0
  30. package/dist/AnimationMixer.d.ts +54 -0
  31. package/dist/AnimationMixer.d.ts.map +1 -0
  32. package/dist/AnimationMixer.js +319 -0
  33. package/dist/AnimationMixer.js.map +1 -0
  34. package/dist/AnimationStateGraph.d.ts +2 -0
  35. package/dist/AnimationStateGraph.d.ts.map +1 -0
  36. package/dist/AnimationStateGraph.js +2 -0
  37. package/dist/AnimationStateGraph.js.map +1 -0
  38. package/dist/AnimationStateMachine.d.ts +59 -0
  39. package/dist/AnimationStateMachine.d.ts.map +1 -0
  40. package/dist/AnimationStateMachine.js +154 -0
  41. package/dist/AnimationStateMachine.js.map +1 -0
  42. package/dist/AnimationTrack.d.ts +23 -0
  43. package/dist/AnimationTrack.d.ts.map +1 -0
  44. package/dist/AnimationTrack.js +124 -0
  45. package/dist/AnimationTrack.js.map +1 -0
  46. package/dist/BlendTree.d.ts +23 -0
  47. package/dist/BlendTree.d.ts.map +1 -0
  48. package/dist/BlendTree.js +68 -0
  49. package/dist/BlendTree.js.map +1 -0
  50. package/dist/Bone.d.ts +20 -0
  51. package/dist/Bone.d.ts.map +1 -0
  52. package/dist/Bone.js +24 -0
  53. package/dist/Bone.js.map +1 -0
  54. package/dist/CrowdAnimation.d.ts +13 -0
  55. package/dist/CrowdAnimation.d.ts.map +1 -0
  56. package/dist/CrowdAnimation.js +14 -0
  57. package/dist/CrowdAnimation.js.map +1 -0
  58. package/dist/ECSAnimationBridge.d.ts +9 -0
  59. package/dist/ECSAnimationBridge.d.ts.map +1 -0
  60. package/dist/ECSAnimationBridge.js +24 -0
  61. package/dist/ECSAnimationBridge.js.map +1 -0
  62. package/dist/HumanoidRetargeting.d.ts +76 -0
  63. package/dist/HumanoidRetargeting.d.ts.map +1 -0
  64. package/dist/HumanoidRetargeting.js +331 -0
  65. package/dist/HumanoidRetargeting.js.map +1 -0
  66. package/dist/IK.d.ts +24 -0
  67. package/dist/IK.d.ts.map +1 -0
  68. package/dist/IK.js +76 -0
  69. package/dist/IK.js.map +1 -0
  70. package/dist/Keyframe.d.ts +50 -0
  71. package/dist/Keyframe.d.ts.map +1 -0
  72. package/dist/Keyframe.js +118 -0
  73. package/dist/Keyframe.js.map +1 -0
  74. package/dist/LocomotionController.d.ts +47 -0
  75. package/dist/LocomotionController.d.ts.map +1 -0
  76. package/dist/LocomotionController.js +106 -0
  77. package/dist/LocomotionController.js.map +1 -0
  78. package/dist/MotionMatchingFixtures.d.ts +58 -0
  79. package/dist/MotionMatchingFixtures.d.ts.map +1 -0
  80. package/dist/MotionMatchingFixtures.js +175 -0
  81. package/dist/MotionMatchingFixtures.js.map +1 -0
  82. package/dist/MotionQuality.d.ts +36 -0
  83. package/dist/MotionQuality.d.ts.map +1 -0
  84. package/dist/MotionQuality.js +117 -0
  85. package/dist/MotionQuality.js.map +1 -0
  86. package/dist/Retargeting.d.ts +12 -0
  87. package/dist/Retargeting.d.ts.map +1 -0
  88. package/dist/Retargeting.js +19 -0
  89. package/dist/Retargeting.js.map +1 -0
  90. package/dist/RootMotion.d.ts +21 -0
  91. package/dist/RootMotion.d.ts.map +1 -0
  92. package/dist/RootMotion.js +84 -0
  93. package/dist/RootMotion.js.map +1 -0
  94. package/dist/SceneAnimationBridge.d.ts +18 -0
  95. package/dist/SceneAnimationBridge.d.ts.map +1 -0
  96. package/dist/SceneAnimationBridge.js +69 -0
  97. package/dist/SceneAnimationBridge.js.map +1 -0
  98. package/dist/SecondaryAnimationFixtures.d.ts +55 -0
  99. package/dist/SecondaryAnimationFixtures.d.ts.map +1 -0
  100. package/dist/SecondaryAnimationFixtures.js +147 -0
  101. package/dist/SecondaryAnimationFixtures.js.map +1 -0
  102. package/dist/Skeleton.d.ts +9 -0
  103. package/dist/Skeleton.d.ts.map +1 -0
  104. package/dist/Skeleton.js +31 -0
  105. package/dist/Skeleton.js.map +1 -0
  106. package/dist/Skinning.d.ts +7 -0
  107. package/dist/Skinning.d.ts.map +1 -0
  108. package/dist/Skinning.js +12 -0
  109. package/dist/Skinning.js.map +1 -0
  110. package/dist/browser-index.d.ts +39 -0
  111. package/dist/browser-index.d.ts.map +1 -0
  112. package/dist/browser-index.js +34 -0
  113. package/dist/browser-index.js.map +1 -0
  114. package/dist/index.d.ts +40 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +35 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/threejs-compatibility/AnimationAction.d.ts +16 -0
  119. package/dist/threejs-compatibility/AnimationAction.d.ts.map +1 -0
  120. package/dist/threejs-compatibility/AnimationAction.js +25 -0
  121. package/dist/threejs-compatibility/AnimationAction.js.map +1 -0
  122. package/dist/threejs-compatibility/AnimationClip.d.ts +14 -0
  123. package/dist/threejs-compatibility/AnimationClip.d.ts.map +1 -0
  124. package/dist/threejs-compatibility/AnimationClip.js +11 -0
  125. package/dist/threejs-compatibility/AnimationClip.js.map +1 -0
  126. package/dist/threejs-compatibility/AnimationDiagnostics.d.ts +44 -0
  127. package/dist/threejs-compatibility/AnimationDiagnostics.d.ts.map +1 -0
  128. package/dist/threejs-compatibility/AnimationDiagnostics.js +29 -0
  129. package/dist/threejs-compatibility/AnimationDiagnostics.js.map +1 -0
  130. package/dist/threejs-compatibility/AnimationMixer.d.ts +9 -0
  131. package/dist/threejs-compatibility/AnimationMixer.d.ts.map +1 -0
  132. package/dist/threejs-compatibility/AnimationMixer.js +24 -0
  133. package/dist/threejs-compatibility/AnimationMixer.js.map +1 -0
  134. package/dist/threejs-compatibility/MorphTargetMixer.d.ts +10 -0
  135. package/dist/threejs-compatibility/MorphTargetMixer.d.ts.map +1 -0
  136. package/dist/threejs-compatibility/MorphTargetMixer.js +10 -0
  137. package/dist/threejs-compatibility/MorphTargetMixer.js.map +1 -0
  138. package/dist/threejs-compatibility/Skeleton.d.ts +10 -0
  139. package/dist/threejs-compatibility/Skeleton.d.ts.map +1 -0
  140. package/dist/threejs-compatibility/Skeleton.js +8 -0
  141. package/dist/threejs-compatibility/Skeleton.js.map +1 -0
  142. package/dist/threejs-compatibility/SkinnedMesh.d.ts +11 -0
  143. package/dist/threejs-compatibility/SkinnedMesh.d.ts.map +1 -0
  144. package/dist/threejs-compatibility/SkinnedMesh.js +16 -0
  145. package/dist/threejs-compatibility/SkinnedMesh.js.map +1 -0
  146. package/dist/threejs-compatibility/index.d.ts +12 -0
  147. package/dist/threejs-compatibility/index.d.ts.map +1 -0
  148. package/dist/threejs-compatibility/index.js +8 -0
  149. package/dist/threejs-compatibility/index.js.map +1 -0
  150. package/package.json +17 -0
  151. package/src/AnimationAction.ts +166 -0
  152. package/src/AnimationClip.ts +63 -0
  153. package/src/AnimationClipEvents.ts +320 -0
  154. package/src/AnimationClipRegistry.ts +280 -0
  155. package/src/AnimationController.ts +967 -0
  156. package/src/AnimationEvents.ts +34 -0
  157. package/src/AnimationLayer.ts +73 -0
  158. package/src/AnimationMixer.ts +366 -0
  159. package/src/AnimationStateGraph.ts +8 -0
  160. package/src/AnimationStateMachine.ts +217 -0
  161. package/src/AnimationTrack.ts +176 -0
  162. package/src/BlendTree.ts +89 -0
  163. package/src/Bone.ts +35 -0
  164. package/src/CrowdAnimation.ts +25 -0
  165. package/src/ECSAnimationBridge.ts +30 -0
  166. package/src/HumanoidRetargeting.ts +476 -0
  167. package/src/IK.ts +107 -0
  168. package/src/Keyframe.ts +159 -0
  169. package/src/LocomotionController.ts +149 -0
  170. package/src/MotionMatchingFixtures.ts +254 -0
  171. package/src/MotionQuality.ts +156 -0
  172. package/src/Retargeting.ts +29 -0
  173. package/src/RootMotion.ts +124 -0
  174. package/src/SceneAnimationBridge.ts +80 -0
  175. package/src/SecondaryAnimationFixtures.ts +212 -0
  176. package/src/Skeleton.ts +34 -0
  177. package/src/Skinning.ts +18 -0
  178. package/src/browser-index.ts +55 -0
  179. package/src/index.ts +56 -0
  180. package/src/threejs-compatibility/AnimationAction.ts +27 -0
  181. package/src/threejs-compatibility/AnimationClip.ts +16 -0
  182. package/src/threejs-compatibility/AnimationDiagnostics.ts +42 -0
  183. package/src/threejs-compatibility/AnimationMixer.ts +24 -0
  184. package/src/threejs-compatibility/MorphTargetMixer.ts +16 -0
  185. package/src/threejs-compatibility/Skeleton.ts +9 -0
  186. package/src/threejs-compatibility/SkinnedMesh.ts +12 -0
  187. package/src/threejs-compatibility/index.ts +11 -0
@@ -0,0 +1,26 @@
1
+ export function eventsBetween(markers, clipName, fromTime, toTime, duration, looped) {
2
+ const events = [];
3
+ if (duration <= 0) {
4
+ return events;
5
+ }
6
+ if (!looped || toTime >= fromTime) {
7
+ for (const marker of markers) {
8
+ if (marker.time > fromTime && marker.time <= toTime) {
9
+ events.push({ ...marker, clipName });
10
+ }
11
+ }
12
+ return events;
13
+ }
14
+ const lateEvents = [];
15
+ const earlyEvents = [];
16
+ for (const marker of markers) {
17
+ if (marker.time > fromTime && marker.time <= duration) {
18
+ lateEvents.push({ ...marker, clipName });
19
+ }
20
+ else if (marker.time >= 0 && marker.time <= toTime) {
21
+ earlyEvents.push({ ...marker, clipName });
22
+ }
23
+ }
24
+ return [...lateEvents, ...earlyEvents];
25
+ }
26
+ //# sourceMappingURL=AnimationEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationEvents.js","sourceRoot":"","sources":["../../../../packages/animation/src/AnimationEvents.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,aAAa,CAAC,OAAwC,EAAE,QAAgB,EAAE,QAAgB,EAAE,MAAc,EAAE,QAAgB,EAAE,MAAe;IAC3J,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;QAClC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,IAAI,GAAG,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,MAAM,WAAW,GAAqB,EAAE,CAAC;IACzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,IAAI,GAAG,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;YACtD,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC;YACrD,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,WAAW,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { AnimationAction } from "./AnimationAction.js";
2
+ export type AnimationLayerSnapshot = {
3
+ readonly name: string;
4
+ readonly weight: number;
5
+ readonly additive: boolean;
6
+ readonly mask: readonly string[];
7
+ readonly actions: readonly string[];
8
+ };
9
+ export type AnimationLayerOptions = {
10
+ readonly weight?: number;
11
+ readonly additive?: boolean;
12
+ readonly mask?: readonly string[];
13
+ };
14
+ export declare class AnimationLayer {
15
+ readonly name: string;
16
+ weight: number;
17
+ additive: boolean;
18
+ readonly mask: readonly string[];
19
+ readonly actions: AnimationAction[];
20
+ private readonly baseWeights;
21
+ constructor(name: string, weightOrOptions?: number | AnimationLayerOptions);
22
+ add(action: AnimationAction): void;
23
+ applyWeight(): void;
24
+ capturesTarget(target: string): boolean;
25
+ snapshot(): AnimationLayerSnapshot;
26
+ }
27
+ //# sourceMappingURL=AnimationLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationLayer.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/AnimationLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,CAAC;AAEF,qBAAa,cAAc;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,CAAM;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0C;gBAE1D,IAAI,EAAE,MAAM,EAAE,eAAe,GAAE,MAAM,GAAG,qBAAyB;IAmB7E,GAAG,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAOlC,WAAW,IAAI,IAAI;IAMnB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAOvC,QAAQ,IAAI,sBAAsB;CASnC"}
@@ -0,0 +1,53 @@
1
+ export class AnimationLayer {
2
+ name;
3
+ weight;
4
+ additive;
5
+ mask;
6
+ actions = [];
7
+ baseWeights = new WeakMap();
8
+ constructor(name, weightOrOptions = 1) {
9
+ if (name.trim().length === 0) {
10
+ throw new Error("AnimationLayer name cannot be empty.");
11
+ }
12
+ this.name = name;
13
+ const options = typeof weightOrOptions === "number" ? { weight: weightOrOptions } : weightOrOptions;
14
+ this.weight = options.weight ?? 1;
15
+ this.additive = options.additive ?? false;
16
+ this.mask = [...(options.mask ?? [])];
17
+ if (!Number.isFinite(this.weight) || this.weight < 0) {
18
+ throw new Error("AnimationLayer weight must be finite and non-negative.");
19
+ }
20
+ for (const entry of this.mask) {
21
+ if (entry.trim().length === 0) {
22
+ throw new Error("AnimationLayer mask entries cannot be empty.");
23
+ }
24
+ }
25
+ }
26
+ add(action) {
27
+ if (!this.actions.includes(action)) {
28
+ this.actions.push(action);
29
+ this.baseWeights.set(action, action.weight);
30
+ }
31
+ }
32
+ applyWeight() {
33
+ for (const action of this.actions) {
34
+ action.setWeight((this.baseWeights.get(action) ?? action.weight) * this.weight);
35
+ }
36
+ }
37
+ capturesTarget(target) {
38
+ if (this.mask.length === 0) {
39
+ return true;
40
+ }
41
+ return this.mask.some((entry) => target === entry || target.startsWith(`${entry}.`));
42
+ }
43
+ snapshot() {
44
+ return {
45
+ name: this.name,
46
+ weight: this.weight,
47
+ additive: this.additive,
48
+ mask: [...this.mask],
49
+ actions: this.actions.map((action) => action.clip.name)
50
+ };
51
+ }
52
+ }
53
+ //# sourceMappingURL=AnimationLayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationLayer.js","sourceRoot":"","sources":["../../../../packages/animation/src/AnimationLayer.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,cAAc;IAChB,IAAI,CAAS;IACtB,MAAM,CAAS;IACf,QAAQ,CAAU;IACT,IAAI,CAAoB;IACxB,OAAO,GAAsB,EAAE,CAAC;IACxB,WAAW,GAAG,IAAI,OAAO,EAA2B,CAAC;IAEtE,YAAY,IAAY,EAAE,kBAAkD,CAAC;QAC3E,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,OAAO,GAAG,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;QACpG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,MAAuB;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,WAAW;QACT,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,cAAc,CAAC,MAAc;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,QAAQ;QACN,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YACpB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SACxD,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,54 @@
1
+ import { AnimationAction, type AnimationActionSnapshot } from "./AnimationAction.js";
2
+ import type { AnimationClip } from "./AnimationClip.js";
3
+ import type { AnimationEvent } from "./AnimationEvents.js";
4
+ import type { AnimationLayer, AnimationLayerSnapshot } from "./AnimationLayer.js";
5
+ import { type AnimationValue } from "./Keyframe.js";
6
+ import { type RootMotionSample } from "./RootMotion.js";
7
+ export type AnimationTarget = {
8
+ setAnimationValue?: (target: string, value: AnimationValue) => void;
9
+ applyRootMotion?: (sample: RootMotionSample) => void;
10
+ position?: [number, number, number];
11
+ };
12
+ export type AnimationMixerOptions = {
13
+ readonly applyRootMotion?: boolean;
14
+ readonly rootMotionTrack?: string;
15
+ readonly rootMotionScale?: number;
16
+ };
17
+ export type AnimationMixerSnapshot = {
18
+ readonly timeScale: number;
19
+ readonly actionCount: number;
20
+ readonly actions: readonly AnimationActionSnapshot[];
21
+ readonly layers: readonly AnimationLayerSnapshot[];
22
+ readonly values: Readonly<Record<string, AnimationValue>>;
23
+ readonly applyErrors: readonly AnimationApplyError[];
24
+ };
25
+ export type AnimationApplyError = {
26
+ readonly target: string;
27
+ readonly message: string;
28
+ };
29
+ export declare class AnimationMixer {
30
+ private readonly options;
31
+ readonly target: AnimationTarget | undefined;
32
+ timeScale: number;
33
+ private readonly actions;
34
+ private readonly layers;
35
+ private readonly values;
36
+ private applyErrors;
37
+ private readonly eventListeners;
38
+ private disposed;
39
+ constructor(target?: AnimationTarget, options?: AnimationMixerOptions);
40
+ play(clip: AnimationClip): AnimationAction;
41
+ addAction(action: AnimationAction): void;
42
+ addLayer(layer: AnimationLayer): void;
43
+ stopAll(): void;
44
+ crossFade(from: AnimationAction, to: AnimationAction, duration: number): void;
45
+ update(delta: number): readonly AnimationEvent[];
46
+ getValue(target: string): AnimationValue | undefined;
47
+ onEvent(listener: (event: AnimationEvent) => void): () => void;
48
+ snapshot(): AnimationMixerSnapshot;
49
+ dispose(): void;
50
+ private assertAlive;
51
+ private applyActionRootMotion;
52
+ private layersForAction;
53
+ }
54
+ //# sourceMappingURL=AnimationMixer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationMixer.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/AnimationMixer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,319 @@
1
+ import { AnimationAction } from "./AnimationAction.js";
2
+ import { cloneAnimationValue, normalizeQuat, slerpQuat } from "./Keyframe.js";
3
+ import { applyRootMotion, extractRootMotion } from "./RootMotion.js";
4
+ export class AnimationMixer {
5
+ options;
6
+ target;
7
+ timeScale = 1;
8
+ actions = [];
9
+ layers = [];
10
+ values = new Map();
11
+ applyErrors = [];
12
+ eventListeners = new Set();
13
+ disposed = false;
14
+ constructor(target, options = {}) {
15
+ this.options = options;
16
+ this.target = target;
17
+ }
18
+ play(clip) {
19
+ this.assertAlive();
20
+ const action = new AnimationAction(clip).play();
21
+ this.actions.push(action);
22
+ return action;
23
+ }
24
+ addAction(action) {
25
+ this.assertAlive();
26
+ if (!this.actions.includes(action)) {
27
+ this.actions.push(action);
28
+ }
29
+ }
30
+ addLayer(layer) {
31
+ this.assertAlive();
32
+ if (!this.layers.includes(layer)) {
33
+ this.layers.push(layer);
34
+ }
35
+ }
36
+ stopAll() {
37
+ this.assertAlive();
38
+ for (const action of this.actions) {
39
+ action.stop();
40
+ }
41
+ }
42
+ crossFade(from, to, duration) {
43
+ this.assertAlive();
44
+ from.fadeTo(0, duration);
45
+ to.play().fadeTo(1, duration);
46
+ this.addAction(to);
47
+ }
48
+ update(delta) {
49
+ this.assertAlive();
50
+ if (!Number.isFinite(delta) || delta < 0) {
51
+ throw new Error("AnimationMixer delta must be finite and non-negative.");
52
+ }
53
+ const events = [];
54
+ const accumulators = new Map();
55
+ for (const action of this.actions) {
56
+ const previousTime = action.time;
57
+ const actionEvents = action.update(delta * this.timeScale);
58
+ if (actionEvents.length > 0) {
59
+ events.push(...actionEvents);
60
+ }
61
+ if (!action.playing && action.weight <= 0) {
62
+ continue;
63
+ }
64
+ this.applyActionRootMotion(action, previousTime);
65
+ for (const track of action.clip.tracks) {
66
+ const sample = track.sample(action.time);
67
+ for (const layer of this.layersForAction(action)) {
68
+ if (layer.capturesTarget(track.target)) {
69
+ blendInto(accumulators, track.target, track.valueType, sample, action.weight * layer.weight, layer.additive);
70
+ }
71
+ }
72
+ }
73
+ }
74
+ this.values.clear();
75
+ this.applyErrors = [];
76
+ for (const [target, accumulator] of accumulators) {
77
+ const value = finalizeTargetBlend(accumulator);
78
+ this.values.set(target, value);
79
+ try {
80
+ this.target?.setAnimationValue?.(target, value);
81
+ }
82
+ catch (error) {
83
+ this.applyErrors.push({
84
+ target,
85
+ message: error instanceof Error ? error.message : String(error)
86
+ });
87
+ }
88
+ }
89
+ for (const event of events) {
90
+ for (const listener of Array.from(this.eventListeners)) {
91
+ listener(event);
92
+ }
93
+ }
94
+ return events;
95
+ }
96
+ getValue(target) {
97
+ const value = this.values.get(target);
98
+ return value === undefined ? undefined : cloneAnimationValue(value);
99
+ }
100
+ onEvent(listener) {
101
+ this.assertAlive();
102
+ this.eventListeners.add(listener);
103
+ return () => this.eventListeners.delete(listener);
104
+ }
105
+ snapshot() {
106
+ const values = {};
107
+ for (const [target, value] of this.values) {
108
+ values[target] = cloneAnimationValue(value);
109
+ }
110
+ return {
111
+ timeScale: this.timeScale,
112
+ actionCount: this.actions.length,
113
+ actions: this.actions.map((action) => action.snapshot()),
114
+ layers: this.layers.map((layer) => layer.snapshot()),
115
+ values,
116
+ applyErrors: this.applyErrors.map((error) => ({ ...error }))
117
+ };
118
+ }
119
+ dispose() {
120
+ this.actions.length = 0;
121
+ this.layers.length = 0;
122
+ this.values.clear();
123
+ this.applyErrors = [];
124
+ this.eventListeners.clear();
125
+ this.disposed = true;
126
+ }
127
+ assertAlive() {
128
+ if (this.disposed) {
129
+ throw new Error("AnimationMixer has been disposed.");
130
+ }
131
+ }
132
+ applyActionRootMotion(action, previousTime) {
133
+ if (!this.options.applyRootMotion || action.weight <= 0)
134
+ return;
135
+ const rootMotionTarget = this.options.rootMotionTrack ?? "root.position";
136
+ if (!action.clip.tracks.some((track) => track.target === rootMotionTarget))
137
+ return;
138
+ const sample = extractRootMotion(action.clip, {
139
+ fromTime: previousTime,
140
+ toTime: action.time,
141
+ loop: action.loopMode === "repeat",
142
+ target: rootMotionTarget
143
+ });
144
+ const scaledSample = action.weight === 1
145
+ ? sample
146
+ : {
147
+ ...sample,
148
+ delta: [
149
+ sample.delta[0] * action.weight,
150
+ sample.delta[1] * action.weight,
151
+ sample.delta[2] * action.weight
152
+ ]
153
+ };
154
+ this.target?.applyRootMotion?.(scaledSample);
155
+ if (this.target?.position) {
156
+ applyRootMotion(this.target, scaledSample, this.options.rootMotionScale ?? 1);
157
+ }
158
+ }
159
+ layersForAction(action) {
160
+ if (this.layers.length === 0) {
161
+ return UNMASKED_LAYERS;
162
+ }
163
+ const owningLayers = this.layers.filter((layer) => layer.actions.includes(action));
164
+ return owningLayers.length > 0 ? owningLayers : UNMASKED_LAYERS;
165
+ }
166
+ }
167
+ const UNMASKED_LAYER = {
168
+ name: "default",
169
+ weight: 1,
170
+ additive: false,
171
+ mask: [],
172
+ actions: [],
173
+ capturesTarget: () => true,
174
+ snapshot: () => ({ name: "default", weight: 1, additive: false, mask: [], actions: [] })
175
+ };
176
+ const UNMASKED_LAYERS = [UNMASKED_LAYER];
177
+ function blendInto(accumulators, target, type, value, weight, additive) {
178
+ if (weight <= 0) {
179
+ return;
180
+ }
181
+ const current = accumulators.get(target);
182
+ if (!current) {
183
+ const accumulator = { type };
184
+ if (additive) {
185
+ accumulator.additive = additiveContribution(type, value, weight);
186
+ }
187
+ else {
188
+ accumulator.base = { value: cloneAnimationValue(value), weight, type };
189
+ }
190
+ accumulators.set(target, accumulator);
191
+ return;
192
+ }
193
+ if (current.type !== type) {
194
+ throw new Error(`Cannot blend ${type} animation track into existing ${current.type} target ${target}.`);
195
+ }
196
+ if (additive) {
197
+ current.additive = current.additive === undefined
198
+ ? additiveContribution(type, value, weight)
199
+ : combineAdditive(type, current.additive, value, weight);
200
+ return;
201
+ }
202
+ if (!current.base) {
203
+ current.base = { value: cloneAnimationValue(value), weight, type };
204
+ return;
205
+ }
206
+ blendBase(current.base, type, value, weight);
207
+ }
208
+ function blendBase(current, type, value, weight) {
209
+ const total = current.weight + weight;
210
+ const t = weight / total;
211
+ if (type === "scalar") {
212
+ current.value = current.value + (value - current.value) * t;
213
+ }
214
+ else if (type === "vector3") {
215
+ const a = current.value;
216
+ const b = value;
217
+ current.value = [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t];
218
+ }
219
+ else if (type === "quaternion") {
220
+ current.value = slerpQuat(current.value, value, t);
221
+ }
222
+ else if (type === "number-array") {
223
+ const a = current.value;
224
+ const b = value;
225
+ if (a.length !== b.length) {
226
+ throw new Error("Cannot blend number-array animation values with different lengths.");
227
+ }
228
+ current.value = a.map((component, index) => component + (b[index] - component) * t);
229
+ }
230
+ else {
231
+ current.value = cloneAnimationValue(value);
232
+ }
233
+ current.weight = total;
234
+ }
235
+ function finalizeTargetBlend(accumulator) {
236
+ const base = accumulator.base
237
+ ? finalizeBaseBlend(accumulator.base)
238
+ : accumulator.additive !== undefined
239
+ ? additiveNeutral(accumulator.type, accumulator.additive)
240
+ : undefined;
241
+ if (base === undefined) {
242
+ throw new Error("Animation target accumulator has no sampled value.");
243
+ }
244
+ if (accumulator.additive === undefined) {
245
+ return base;
246
+ }
247
+ return applyAdditive(accumulator.type, base, accumulator.additive);
248
+ }
249
+ function finalizeBaseBlend(accumulator) {
250
+ if (accumulator.type === "quaternion") {
251
+ return normalizeQuat(accumulator.value);
252
+ }
253
+ return cloneAnimationValue(accumulator.value);
254
+ }
255
+ function additiveContribution(type, value, weight) {
256
+ if (type === "scalar") {
257
+ return value * weight;
258
+ }
259
+ if (type === "vector3") {
260
+ const vector = value;
261
+ return [vector[0] * weight, vector[1] * weight, vector[2] * weight];
262
+ }
263
+ if (type === "number-array") {
264
+ return value.map((component) => component * weight);
265
+ }
266
+ if (type === "quaternion") {
267
+ return slerpQuat([0, 0, 0, 1], normalizeQuat(value), weight);
268
+ }
269
+ throw new Error("Additive animation layers require numeric, vector, quaternion, or number-array tracks.");
270
+ }
271
+ function combineAdditive(type, current, value, weight) {
272
+ return applyAdditive(type, current, additiveContribution(type, value, weight));
273
+ }
274
+ function applyAdditive(type, base, delta) {
275
+ if (type === "scalar") {
276
+ return base + delta;
277
+ }
278
+ if (type === "vector3") {
279
+ const a = base;
280
+ const b = delta;
281
+ return [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
282
+ }
283
+ if (type === "number-array") {
284
+ const a = base;
285
+ const b = delta;
286
+ if (a.length !== b.length) {
287
+ throw new Error("Cannot add number-array animation values with different lengths.");
288
+ }
289
+ return a.map((component, index) => component + b[index]);
290
+ }
291
+ if (type === "quaternion") {
292
+ return normalizeQuat(multiplyQuat(base, delta));
293
+ }
294
+ throw new Error("Additive animation layers require numeric, vector, quaternion, or number-array tracks.");
295
+ }
296
+ function additiveNeutral(type, value) {
297
+ if (type === "scalar") {
298
+ return 0;
299
+ }
300
+ if (type === "vector3") {
301
+ return [0, 0, 0];
302
+ }
303
+ if (type === "number-array") {
304
+ return value.map(() => 0);
305
+ }
306
+ if (type === "quaternion") {
307
+ return [0, 0, 0, 1];
308
+ }
309
+ throw new Error("Additive animation layers require numeric, vector, quaternion, or number-array tracks.");
310
+ }
311
+ function multiplyQuat(a, b) {
312
+ return [
313
+ a[3] * b[0] + a[0] * b[3] + a[1] * b[2] - a[2] * b[1],
314
+ a[3] * b[1] - a[0] * b[2] + a[1] * b[3] + a[2] * b[0],
315
+ a[3] * b[2] + a[0] * b[1] - a[1] * b[0] + a[2] * b[3],
316
+ a[3] * b[3] - a[0] * b[0] - a[1] * b[1] - a[2] * b[2]
317
+ ];
318
+ }
319
+ //# sourceMappingURL=AnimationMixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationMixer.js","sourceRoot":"","sources":["../../../../packages/animation/src/AnimationMixer.ts"],"names":[],"mappings":"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AAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACtD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { AnimationStateMachine as AnimationStateGraph, type AnimationState, type AnimationStateMachineGraphSnapshot, type AnimationStateMachineGraphState, type AnimationStateMachineGraphTransition, type StateTransition } from "./AnimationStateMachine.js";
2
+ //# sourceMappingURL=AnimationStateGraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationStateGraph.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/AnimationStateGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,IAAI,mBAAmB,EAC5C,KAAK,cAAc,EACnB,KAAK,kCAAkC,EACvC,KAAK,+BAA+B,EACpC,KAAK,oCAAoC,EACzC,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { AnimationStateMachine as AnimationStateGraph } from "./AnimationStateMachine.js";
2
+ //# sourceMappingURL=AnimationStateGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationStateGraph.js","sourceRoot":"","sources":["../../../../packages/animation/src/AnimationStateGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,IAAI,mBAAmB,EAM7C,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,59 @@
1
+ export type StateTransition = {
2
+ readonly to: string;
3
+ readonly label?: string;
4
+ readonly priority?: number;
5
+ readonly exitTime?: number;
6
+ readonly consumeParameters?: readonly string[];
7
+ readonly condition: (parameters: Readonly<Record<string, number | boolean | string>>) => boolean;
8
+ };
9
+ export type AnimationState = {
10
+ readonly name: string;
11
+ readonly duration?: number;
12
+ readonly oneShot?: boolean;
13
+ readonly terminal?: boolean;
14
+ readonly onComplete?: string;
15
+ readonly completedParameter?: string;
16
+ readonly resetParametersOnEnter?: readonly string[];
17
+ readonly transitions?: readonly StateTransition[];
18
+ };
19
+ export type AnimationStateMachineGraphState = {
20
+ readonly name: string;
21
+ readonly current: boolean;
22
+ readonly transitionCount: number;
23
+ readonly duration?: number;
24
+ readonly oneShot?: boolean;
25
+ readonly terminal?: boolean;
26
+ readonly completed?: boolean;
27
+ readonly onComplete?: string;
28
+ };
29
+ export type AnimationStateMachineGraphTransition = {
30
+ readonly from: string;
31
+ readonly to: string;
32
+ readonly index: number;
33
+ readonly priority: number;
34
+ readonly label: string;
35
+ readonly exitTime?: number;
36
+ readonly consumeParameters?: readonly string[];
37
+ };
38
+ export type AnimationStateMachineGraphSnapshot = {
39
+ readonly currentState: string;
40
+ readonly stateTime: number;
41
+ readonly parameters: Readonly<Record<string, number | boolean | string>>;
42
+ readonly states: readonly AnimationStateMachineGraphState[];
43
+ readonly transitions: readonly AnimationStateMachineGraphTransition[];
44
+ };
45
+ export declare class AnimationStateMachine {
46
+ readonly states: Map<string, AnimationState>;
47
+ readonly parameters: Record<string, number | boolean | string>;
48
+ currentState: string;
49
+ stateTime: number;
50
+ constructor(states: readonly AnimationState[], initialState: string);
51
+ setParameter(name: string, value: number | boolean | string): void;
52
+ update(delta?: number): string;
53
+ graphSnapshot(): AnimationStateMachineGraphSnapshot;
54
+ debugGraph(): string;
55
+ private requireState;
56
+ private transitionTo;
57
+ private resetParametersForState;
58
+ }
59
+ //# sourceMappingURL=AnimationStateMachine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationStateMachine.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/AnimationStateMachine.ts"],"names":[],"mappings":"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"}