@aura3d/engine 1.0.2 → 1.0.5

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 (296) hide show
  1. package/README.md +331 -16
  2. package/dist/animation/AnimationClipEvents.d.ts +57 -0
  3. package/dist/animation/AnimationClipEvents.d.ts.map +1 -0
  4. package/dist/animation/AnimationClipEvents.js +171 -0
  5. package/dist/animation/AnimationClipEvents.js.map +1 -0
  6. package/dist/animation/AnimationClipRegistry.d.ts +76 -0
  7. package/dist/animation/AnimationClipRegistry.d.ts.map +1 -0
  8. package/dist/animation/AnimationClipRegistry.js +130 -0
  9. package/dist/animation/AnimationClipRegistry.js.map +1 -0
  10. package/dist/animation/AnimationController.d.ts +168 -0
  11. package/dist/animation/AnimationController.d.ts.map +1 -0
  12. package/dist/animation/AnimationController.js +619 -0
  13. package/dist/animation/AnimationController.js.map +1 -0
  14. package/dist/animation/HumanoidRetargeting.d.ts +76 -0
  15. package/dist/animation/HumanoidRetargeting.d.ts.map +1 -0
  16. package/dist/animation/HumanoidRetargeting.js +331 -0
  17. package/dist/animation/HumanoidRetargeting.js.map +1 -0
  18. package/dist/animation/browser-index.d.ts +18 -0
  19. package/dist/animation/browser-index.d.ts.map +1 -1
  20. package/dist/animation/browser-index.js +13 -0
  21. package/dist/animation/browser-index.js.map +1 -1
  22. package/dist/animation/index.d.ts +16 -1
  23. package/dist/animation/index.d.ts.map +1 -1
  24. package/dist/animation/index.js +11 -1
  25. package/dist/animation/index.js.map +1 -1
  26. package/dist/animation/threejs-compatibility/AnimationDiagnostics.d.ts.map +1 -1
  27. package/dist/animation/threejs-compatibility/AnimationDiagnostics.js +3 -5
  28. package/dist/animation/threejs-compatibility/AnimationDiagnostics.js.map +1 -1
  29. package/dist/assets/GLTFAnimationRuntime.js +1 -1
  30. package/dist/assets/GLTFLoader.js +1 -1
  31. package/dist/aura3d-cli/cli.js +194 -8
  32. package/dist/aura3d-cli/cli.js.map +1 -1
  33. package/dist/aura3d-cli/index.d.ts +280 -3
  34. package/dist/aura3d-cli/index.d.ts.map +1 -1
  35. package/dist/aura3d-cli/index.js +886 -4
  36. package/dist/aura3d-cli/index.js.map +1 -1
  37. package/dist/aura3d-cli/pull-bridge.d.ts +95 -0
  38. package/dist/aura3d-cli/pull-bridge.d.ts.map +1 -0
  39. package/dist/aura3d-cli/pull-bridge.js +247 -0
  40. package/dist/aura3d-cli/pull-bridge.js.map +1 -0
  41. package/dist/create-aura3d/index.d.ts +1 -1
  42. package/dist/create-aura3d/index.d.ts.map +1 -1
  43. package/dist/create-aura3d/index.js +9 -2
  44. package/dist/create-aura3d/index.js.map +1 -1
  45. package/dist/editor-runtime/ProjectSerializer.d.ts +74 -1
  46. package/dist/editor-runtime/ProjectSerializer.d.ts.map +1 -1
  47. package/dist/editor-runtime/ProjectSerializer.js +123 -6
  48. package/dist/editor-runtime/ProjectSerializer.js.map +1 -1
  49. package/dist/editor-runtime/TimelineModel.d.ts +18 -0
  50. package/dist/editor-runtime/TimelineModel.d.ts.map +1 -1
  51. package/dist/editor-runtime/TimelineModel.js +67 -3
  52. package/dist/editor-runtime/TimelineModel.js.map +1 -1
  53. package/dist/editor-runtime/TimelineRuntimeBridge.d.ts +98 -0
  54. package/dist/editor-runtime/TimelineRuntimeBridge.d.ts.map +1 -0
  55. package/dist/editor-runtime/TimelineRuntimeBridge.js +186 -0
  56. package/dist/editor-runtime/TimelineRuntimeBridge.js.map +1 -0
  57. package/dist/editor-runtime/index.d.ts +3 -1
  58. package/dist/editor-runtime/index.d.ts.map +1 -1
  59. package/dist/editor-runtime/index.js +1 -0
  60. package/dist/editor-runtime/index.js.map +1 -1
  61. package/dist/engine/agent-api/AnimationController.d.ts +607 -0
  62. package/dist/engine/agent-api/AnimationController.d.ts.map +1 -0
  63. package/dist/engine/agent-api/AnimationController.js +2192 -0
  64. package/dist/engine/agent-api/AnimationController.js.map +1 -0
  65. package/dist/engine/agent-api/AssetEvidence.d.ts +88 -0
  66. package/dist/engine/agent-api/AssetEvidence.d.ts.map +1 -0
  67. package/dist/engine/agent-api/AssetEvidence.js +157 -0
  68. package/dist/engine/agent-api/AssetEvidence.js.map +1 -0
  69. package/dist/engine/agent-api/AuraAppHandle.d.ts +55 -0
  70. package/dist/engine/agent-api/AuraAppHandle.d.ts.map +1 -0
  71. package/dist/engine/agent-api/AuraAppHandle.js +15 -0
  72. package/dist/engine/agent-api/AuraAppHandle.js.map +1 -0
  73. package/dist/engine/agent-api/AuraVoiceBridge.d.ts +96 -0
  74. package/dist/engine/agent-api/AuraVoiceBridge.d.ts.map +1 -0
  75. package/dist/engine/agent-api/AuraVoiceBridge.js +370 -0
  76. package/dist/engine/agent-api/AuraVoiceBridge.js.map +1 -0
  77. package/dist/engine/agent-api/CartoonDirector.d.ts +95 -0
  78. package/dist/engine/agent-api/CartoonDirector.d.ts.map +1 -0
  79. package/dist/engine/agent-api/CartoonDirector.js +342 -0
  80. package/dist/engine/agent-api/CartoonDirector.js.map +1 -0
  81. package/dist/engine/agent-api/CartoonPerformance.d.ts +149 -0
  82. package/dist/engine/agent-api/CartoonPerformance.d.ts.map +1 -0
  83. package/dist/engine/agent-api/CartoonPerformance.js +317 -0
  84. package/dist/engine/agent-api/CartoonPerformance.js.map +1 -0
  85. package/dist/engine/agent-api/CartoonRenderQueue.d.ts +132 -0
  86. package/dist/engine/agent-api/CartoonRenderQueue.d.ts.map +1 -0
  87. package/dist/engine/agent-api/CartoonRenderQueue.js +385 -0
  88. package/dist/engine/agent-api/CartoonRenderQueue.js.map +1 -0
  89. package/dist/engine/agent-api/CharacterAssembly.d.ts +126 -0
  90. package/dist/engine/agent-api/CharacterAssembly.d.ts.map +1 -0
  91. package/dist/engine/agent-api/CharacterAssembly.js +280 -0
  92. package/dist/engine/agent-api/CharacterAssembly.js.map +1 -0
  93. package/dist/engine/agent-api/DialoguePerformance.d.ts +150 -0
  94. package/dist/engine/agent-api/DialoguePerformance.d.ts.map +1 -0
  95. package/dist/engine/agent-api/DialoguePerformance.js +335 -0
  96. package/dist/engine/agent-api/DialoguePerformance.js.map +1 -0
  97. package/dist/engine/agent-api/FrameLoop.d.ts +70 -0
  98. package/dist/engine/agent-api/FrameLoop.d.ts.map +1 -0
  99. package/dist/engine/agent-api/FrameLoop.js +165 -0
  100. package/dist/engine/agent-api/FrameLoop.js.map +1 -0
  101. package/dist/engine/agent-api/GameAssetValidation.d.ts +279 -0
  102. package/dist/engine/agent-api/GameAssetValidation.d.ts.map +1 -0
  103. package/dist/engine/agent-api/GameAssetValidation.js +719 -0
  104. package/dist/engine/agent-api/GameAssetValidation.js.map +1 -0
  105. package/dist/engine/agent-api/GameEvidence.d.ts +148 -0
  106. package/dist/engine/agent-api/GameEvidence.d.ts.map +1 -0
  107. package/dist/engine/agent-api/GameEvidence.js +269 -0
  108. package/dist/engine/agent-api/GameEvidence.js.map +1 -0
  109. package/dist/engine/agent-api/GameRuntime.d.ts +931 -0
  110. package/dist/engine/agent-api/GameRuntime.d.ts.map +1 -0
  111. package/dist/engine/agent-api/GameRuntime.js +2229 -0
  112. package/dist/engine/agent-api/GameRuntime.js.map +1 -0
  113. package/dist/engine/agent-api/GameSceneBridge.d.ts +54 -0
  114. package/dist/engine/agent-api/GameSceneBridge.d.ts.map +1 -0
  115. package/dist/engine/agent-api/GameSceneBridge.js +110 -0
  116. package/dist/engine/agent-api/GameSceneBridge.js.map +1 -0
  117. package/dist/engine/agent-api/PromptAnimationContract.d.ts +278 -0
  118. package/dist/engine/agent-api/PromptAnimationContract.d.ts.map +1 -0
  119. package/dist/engine/agent-api/PromptAnimationContract.js +238 -0
  120. package/dist/engine/agent-api/PromptAnimationContract.js.map +1 -0
  121. package/dist/engine/agent-api/PromptAnimationEvidence.d.ts +183 -0
  122. package/dist/engine/agent-api/PromptAnimationEvidence.d.ts.map +1 -0
  123. package/dist/engine/agent-api/PromptAnimationEvidence.js +454 -0
  124. package/dist/engine/agent-api/PromptAnimationEvidence.js.map +1 -0
  125. package/dist/engine/agent-api/RuntimeNodeHandle.d.ts +100 -0
  126. package/dist/engine/agent-api/RuntimeNodeHandle.d.ts.map +1 -0
  127. package/dist/engine/agent-api/RuntimeNodeHandle.js +36 -0
  128. package/dist/engine/agent-api/RuntimeNodeHandle.js.map +1 -0
  129. package/dist/engine/agent-api/ShotTimeline.d.ts +179 -0
  130. package/dist/engine/agent-api/ShotTimeline.d.ts.map +1 -0
  131. package/dist/engine/agent-api/ShotTimeline.js +264 -0
  132. package/dist/engine/agent-api/ShotTimeline.js.map +1 -0
  133. package/dist/engine/agent-api/VisemeController.d.ts +89 -0
  134. package/dist/engine/agent-api/VisemeController.d.ts.map +1 -0
  135. package/dist/engine/agent-api/VisemeController.js +207 -0
  136. package/dist/engine/agent-api/VisemeController.js.map +1 -0
  137. package/dist/engine/agent-api/game-kits/fighting.d.ts +123 -0
  138. package/dist/engine/agent-api/game-kits/fighting.d.ts.map +1 -0
  139. package/dist/engine/agent-api/game-kits/fighting.js +483 -0
  140. package/dist/engine/agent-api/game-kits/fighting.js.map +1 -0
  141. package/dist/engine/agent-api/game-kits/index.d.ts +15 -0
  142. package/dist/engine/agent-api/game-kits/index.d.ts.map +1 -0
  143. package/dist/engine/agent-api/game-kits/index.js +6 -0
  144. package/dist/engine/agent-api/game-kits/index.js.map +1 -0
  145. package/dist/engine/agent-api/humanoid-walk-runtime.d.ts +18 -81
  146. package/dist/engine/agent-api/humanoid-walk-runtime.d.ts.map +1 -1
  147. package/dist/engine/agent-api/humanoid-walk-runtime.js +4 -279
  148. package/dist/engine/agent-api/humanoid-walk-runtime.js.map +1 -1
  149. package/dist/engine/agent-api/index.d.ts +490 -4
  150. package/dist/engine/agent-api/index.d.ts.map +1 -1
  151. package/dist/engine/agent-api/index.js +759 -1802
  152. package/dist/engine/agent-api/index.js.map +1 -1
  153. package/dist/engine/agent-api/particle-fountain-runtime.d.ts +5 -80
  154. package/dist/engine/agent-api/particle-fountain-runtime.d.ts.map +1 -1
  155. package/dist/engine/agent-api/particle-fountain-runtime.js +7 -291
  156. package/dist/engine/agent-api/particle-fountain-runtime.js.map +1 -1
  157. package/dist/engine/agent-api/product-viewer-runtime.d.ts +17 -107
  158. package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
  159. package/dist/engine/agent-api/product-viewer-runtime.js +4 -330
  160. package/dist/engine/agent-api/product-viewer-runtime.js.map +1 -1
  161. package/dist/index.d.ts +1 -0
  162. package/dist/index.js +1 -0
  163. package/dist/physics/CollisionVolumes.d.ts +57 -0
  164. package/dist/physics/CollisionVolumes.d.ts.map +1 -0
  165. package/dist/physics/CollisionVolumes.js +159 -0
  166. package/dist/physics/CollisionVolumes.js.map +1 -0
  167. package/dist/physics/HitboxWorld.d.ts +229 -0
  168. package/dist/physics/HitboxWorld.d.ts.map +1 -0
  169. package/dist/physics/HitboxWorld.js +640 -0
  170. package/dist/physics/HitboxWorld.js.map +1 -0
  171. package/dist/physics/KinematicBody.d.ts +157 -0
  172. package/dist/physics/KinematicBody.d.ts.map +1 -0
  173. package/dist/physics/KinematicBody.js +405 -0
  174. package/dist/physics/KinematicBody.js.map +1 -0
  175. package/dist/physics/KinematicWorld.d.ts +58 -0
  176. package/dist/physics/KinematicWorld.d.ts.map +1 -0
  177. package/dist/physics/KinematicWorld.js +246 -0
  178. package/dist/physics/KinematicWorld.js.map +1 -0
  179. package/dist/physics/index.d.ts +4 -0
  180. package/dist/physics/index.d.ts.map +1 -1
  181. package/dist/physics/index.js +4 -0
  182. package/dist/physics/index.js.map +1 -1
  183. package/dist/rendering/ForwardPass.js +2 -2
  184. package/dist/rendering/ShaderLibrary.js +2 -2
  185. package/dist/rendering/SkinnedLitMaterial.js +3 -3
  186. package/dist/rendering/SkinnedUnlitMaterial.js +3 -3
  187. package/dist/scene/Renderable.js +2 -2
  188. package/dist/scripting/VisualGraph.d.ts +2 -1
  189. package/dist/scripting/VisualGraph.d.ts.map +1 -1
  190. package/dist/scripting/VisualGraph.js +118 -1
  191. package/dist/scripting/VisualGraph.js.map +1 -1
  192. package/dist/scripting/VisualGraphContext.d.ts +123 -0
  193. package/dist/scripting/VisualGraphContext.d.ts.map +1 -0
  194. package/dist/scripting/VisualGraphContext.js +2 -0
  195. package/dist/scripting/VisualGraphContext.js.map +1 -0
  196. package/dist/scripting/VisualGraphExecutor.d.ts +6 -1
  197. package/dist/scripting/VisualGraphExecutor.d.ts.map +1 -1
  198. package/dist/scripting/VisualGraphExecutor.js +364 -7
  199. package/dist/scripting/VisualGraphExecutor.js.map +1 -1
  200. package/dist/scripting/VisualNodeCatalog.d.ts +1 -1
  201. package/dist/scripting/VisualNodeCatalog.d.ts.map +1 -1
  202. package/dist/scripting/VisualNodeCatalog.js +61 -1
  203. package/dist/scripting/VisualNodeCatalog.js.map +1 -1
  204. package/dist/scripting/index.d.ts +1 -0
  205. package/dist/scripting/index.d.ts.map +1 -1
  206. package/dist/scripting/index.js.map +1 -1
  207. package/package.json +193 -121
  208. package/templates/product-viewer/src/main.ts +1 -0
  209. package/dist/three-compat/ThreeApiInventory.d.ts +0 -18
  210. package/dist/three-compat/ThreeApiInventory.d.ts.map +0 -1
  211. package/dist/three-compat/ThreeApiInventory.js +0 -99
  212. package/dist/three-compat/ThreeApiInventory.js.map +0 -1
  213. package/dist/three-compat/ThreeCompatibilityMatrix.d.ts +0 -30
  214. package/dist/three-compat/ThreeCompatibilityMatrix.d.ts.map +0 -1
  215. package/dist/three-compat/ThreeCompatibilityMatrix.js +0 -69
  216. package/dist/three-compat/ThreeCompatibilityMatrix.js.map +0 -1
  217. package/dist/three-compat/animation/index.d.ts +0 -3
  218. package/dist/three-compat/animation/index.d.ts.map +0 -1
  219. package/dist/three-compat/animation/index.js +0 -2
  220. package/dist/three-compat/animation/index.js.map +0 -1
  221. package/dist/three-compat/cameras/index.d.ts +0 -24
  222. package/dist/three-compat/cameras/index.d.ts.map +0 -1
  223. package/dist/three-compat/cameras/index.js +0 -44
  224. package/dist/three-compat/cameras/index.js.map +0 -1
  225. package/dist/three-compat/controls/index.d.ts +0 -3
  226. package/dist/three-compat/controls/index.d.ts.map +0 -1
  227. package/dist/three-compat/controls/index.js +0 -2
  228. package/dist/three-compat/controls/index.js.map +0 -1
  229. package/dist/three-compat/core/Object3DCompat.d.ts +0 -62
  230. package/dist/three-compat/core/Object3DCompat.d.ts.map +0 -1
  231. package/dist/three-compat/core/Object3DCompat.js +0 -112
  232. package/dist/three-compat/core/Object3DCompat.js.map +0 -1
  233. package/dist/three-compat/core/RaycasterCompat.d.ts +0 -18
  234. package/dist/three-compat/core/RaycasterCompat.d.ts.map +0 -1
  235. package/dist/three-compat/core/RaycasterCompat.js +0 -28
  236. package/dist/three-compat/core/RaycasterCompat.js.map +0 -1
  237. package/dist/three-compat/core/SceneCompat.d.ts +0 -8
  238. package/dist/three-compat/core/SceneCompat.d.ts.map +0 -1
  239. package/dist/three-compat/core/SceneCompat.js +0 -8
  240. package/dist/three-compat/core/SceneCompat.js.map +0 -1
  241. package/dist/three-compat/geometries/index.d.ts +0 -67
  242. package/dist/three-compat/geometries/index.d.ts.map +0 -1
  243. package/dist/three-compat/geometries/index.js +0 -114
  244. package/dist/three-compat/geometries/index.js.map +0 -1
  245. package/dist/three-compat/helpers/index.d.ts +0 -40
  246. package/dist/three-compat/helpers/index.d.ts.map +0 -1
  247. package/dist/three-compat/helpers/index.js +0 -129
  248. package/dist/three-compat/helpers/index.js.map +0 -1
  249. package/dist/three-compat/index.d.ts +0 -32
  250. package/dist/three-compat/index.d.ts.map +0 -1
  251. package/dist/three-compat/index.js +0 -22
  252. package/dist/three-compat/index.js.map +0 -1
  253. package/dist/three-compat/lights/index.d.ts +0 -35
  254. package/dist/three-compat/lights/index.d.ts.map +0 -1
  255. package/dist/three-compat/lights/index.js +0 -39
  256. package/dist/three-compat/lights/index.js.map +0 -1
  257. package/dist/three-compat/loaders/index.d.ts +0 -54
  258. package/dist/three-compat/loaders/index.d.ts.map +0 -1
  259. package/dist/three-compat/loaders/index.js +0 -79
  260. package/dist/three-compat/loaders/index.js.map +0 -1
  261. package/dist/three-compat/materials/index.d.ts +0 -70
  262. package/dist/three-compat/materials/index.d.ts.map +0 -1
  263. package/dist/three-compat/materials/index.js +0 -85
  264. package/dist/three-compat/materials/index.js.map +0 -1
  265. package/dist/three-compat/math/index.d.ts +0 -34
  266. package/dist/three-compat/math/index.d.ts.map +0 -1
  267. package/dist/three-compat/math/index.js +0 -90
  268. package/dist/three-compat/math/index.js.map +0 -1
  269. package/dist/three-compat/migration/CompatibilityWarnings.d.ts +0 -6
  270. package/dist/three-compat/migration/CompatibilityWarnings.d.ts.map +0 -1
  271. package/dist/three-compat/migration/CompatibilityWarnings.js +0 -8
  272. package/dist/three-compat/migration/CompatibilityWarnings.js.map +0 -1
  273. package/dist/three-compat/migration/ImportMap.d.ts +0 -2
  274. package/dist/three-compat/migration/ImportMap.d.ts.map +0 -1
  275. package/dist/three-compat/migration/ImportMap.js +0 -10
  276. package/dist/three-compat/migration/ImportMap.js.map +0 -1
  277. package/dist/three-compat/migration/ThreeToA3DAdapter.d.ts +0 -8
  278. package/dist/three-compat/migration/ThreeToA3DAdapter.d.ts.map +0 -1
  279. package/dist/three-compat/migration/ThreeToA3DAdapter.js +0 -20
  280. package/dist/three-compat/migration/ThreeToA3DAdapter.js.map +0 -1
  281. package/dist/three-compat/postprocessing/index.d.ts +0 -2
  282. package/dist/three-compat/postprocessing/index.d.ts.map +0 -1
  283. package/dist/three-compat/postprocessing/index.js +0 -2
  284. package/dist/three-compat/postprocessing/index.js.map +0 -1
  285. package/dist/three-compat/render-targets/index.d.ts +0 -17
  286. package/dist/three-compat/render-targets/index.d.ts.map +0 -1
  287. package/dist/three-compat/render-targets/index.js +0 -29
  288. package/dist/three-compat/render-targets/index.js.map +0 -1
  289. package/dist/three-compat/shaders/index.d.ts +0 -3
  290. package/dist/three-compat/shaders/index.d.ts.map +0 -1
  291. package/dist/three-compat/shaders/index.js +0 -3
  292. package/dist/three-compat/shaders/index.js.map +0 -1
  293. package/dist/three-compat/textures/index.d.ts +0 -19
  294. package/dist/three-compat/textures/index.d.ts.map +0 -1
  295. package/dist/three-compat/textures/index.js +0 -24
  296. package/dist/three-compat/textures/index.js.map +0 -1
package/README.md CHANGED
@@ -5,13 +5,40 @@
5
5
  [![license: MIT](https://img.shields.io/badge/license-MIT-green.svg)](./LICENSE)
6
6
  [![TypeScript](https://img.shields.io/badge/TypeScript-browser%203D-3178c6.svg)](https://www.typescriptlang.org/)
7
7
 
8
- Aura3D is an AI-native TypeScript 3D SDK for browser 3D apps, prompt-to-code scenes, GLB/glTF product viewers, WebGL/WebGPU experiences, Vite templates, typed asset workflows, diagnostics, screenshots, and static deployment checks.
8
+ Aura3D is an AI-native TypeScript 3D SDK for browser 3D apps, prompt-to-code scenes, GLB/glTF product viewers, browser-native games, Vite templates, typed asset workflows, diagnostics, screenshots, and static deployment checks.
9
9
 
10
10
  Describe the scene. Keep the TypeScript. Ship the browser app.
11
11
 
12
- Aura3D is built for developers and AI coding agents that need real 3D software, not a blank canvas and renderer glue. It gives agents maintained scene kits, typed GLB/glTF assets, product-viewer workflows, route-health diagnostics, screenshot evidence, and deployment checks through a public TypeScript API.
12
+ Aura3D is built for developers and AI coding agents that need real 3D software, not a blank canvas and renderer glue. It gives agents maintained scene kits, typed GLB/glTF assets, product-viewer workflows, browser-game workflows, route-health diagnostics, screenshot evidence, and deployment checks through a public TypeScript API.
13
13
 
14
- Use Aura3D when you are evaluating browser 3D libraries, Three.js alternatives, Babylon.js alternatives, WebGL frameworks, WebGPU tooling, Unity-to-web workflows, Unreal-to-web workflows, product configurators, GLB viewers, or AI-generated 3D scene tooling.
14
+ Use Aura3D when you are building browser 3D apps, prompt-authored scenes, product configurators, GLB viewers, browser-native game showcases, static-deployed interactive websites, or AI-generated 3D scene tooling.
15
+
16
+ ## Current release
17
+
18
+ `@aura3d/engine@1.0.5` is the current release candidate for browser-native game routes, visible GLB animation runtime evidence, prompt-cartoon playback, AuraVoice timing packages, typed assets, diagnostics, screenshots, and readiness evidence. The root engine runtime remains free of Three.js imports; Three.js migration support lives in the separately installed `@aura3d/three-compat` package.
19
+
20
+ Registry status before publish: npm `latest` still points at `@aura3d/engine@1.0.3`, and `@aura3d/cli` / `create-aura3d` must be published before the `npx ...@latest` commands below work for external users. Do not claim the 1.0.5 release is live until registry verification passes.
21
+
22
+ ## Aura3D 1.0.5 asset catalog
23
+
24
+ Aura3D 1.0.5 includes the catalog-first asset workflow for AI coding agents. When a prompt names a real object, agents should search the hosted Aura3D catalog before writing scene code:
25
+
26
+ ```bash
27
+ npx @aura3d/cli@latest assets search "battle-worn knight helmet"
28
+ npx @aura3d/cli@latest assets resolve "battle-worn knight helmet" --name helmet
29
+ ```
30
+
31
+ The resolver pulls only verified auto-pullable candidates into the existing typed asset pipeline, then scene code uses `model(assets.helmet)`. Unverified or marketplace candidates stay as deep-links until the user approves and supplies the asset.
32
+ ## Aura3D 1.0.5 runtime launch track
33
+
34
+ Aura3D 1.0.5 is the active runtime and animation evidence foundation for the next public showcase wave:
35
+
36
+ - `game runtime`: mutable runtime nodes, app-owned frame loops, input, kinematic bodies, hitboxes, combat events, camera direction, effects, and evidence for browser-native game routes.
37
+ - `fighting-game template`: `npx create-aura3d@latest my-fighter --template fighting-game` scaffolds a public-API playable starter using typed assets, `app.input(...)`, `app.onFrame(...)`, `game.kinematicBody(...)`, `game.combatWorld(...)`, and `app.evidence(...)`.
38
+ - `prompt animation`: `npx create-aura3d@latest my-episode --template prompt-cartoon-channel` scaffolds structured episode plans, storyboards, shot timelines, captions, visemes, render queues, and evidence for prompt-authored cartoon/video workflows. The shorter `cartoon-channel` template name remains supported.
39
+ - `AuraVoice bridge`: AuraVoice owns script/audio/caption/viseme timing; Aura3D owns typed scene generation, character performance, camera choreography, rendering, screenshots, and visual evidence.
40
+
41
+ Aura Clash requires Aura3D 1.0.5 runtime and animation evidence before it should be marketed as a polished public game showcase. Until the runtime, screenshot, route, GLB, package-smoke, and visual approval gates pass, Aura Clash remains a development showcase proving the direction of the public API.
15
42
 
16
43
  ## Install
17
44
 
@@ -46,11 +73,26 @@ import { createAuraApp, sceneKits } from "@aura3d/engine";
46
73
  - AI-generated 3D scenes that remain editable TypeScript.
47
74
  - Browser 3D apps built with a stable SDK instead of improvised renderer glue.
48
75
  - Typed GLB/glTF product viewers, product configurators, and model showcases.
76
+ - Browser-native games with playable routes, HUDs, input, evidence, tests, and deploy-ready output.
49
77
  - Prompt-to-3D workflows for AI coding agents, Cursor, Claude, Codex, and other assistants.
50
78
  - WebGL/WebGPU-ready examples with maintained scene kits and diagnostics.
51
79
  - Vite 3D starter apps with route health, screenshot tests, and deploy checks.
52
80
  - Static-deployed 3D websites where proof, screenshots, and reliability matter.
53
- - Teams comparing Three.js, Babylon.js, Unity WebGL exports, Unreal Pixel Streaming, PlayCanvas, or custom renderer stacks for AI-assisted 3D development.
81
+
82
+ ## Flagship game showcase
83
+
84
+ AuraClash is the active Aura3D game-runtime proof target: an original 1v1 browser arena fighter built with `@aura3d/engine` public APIs.
85
+
86
+ The showcase includes:
87
+
88
+ - typed or validated stylized fighter assets;
89
+ - typed asset members from `src/aura-assets.ts`;
90
+ - `model(assets.x)` runtime usage;
91
+ - arena primitives, lighting, effects, camera composition, and material polish;
92
+ - arcade movement, hitboxes, guard state, meter, AI pressure, and results;
93
+ - evidence routes, accessibility settings, poster capture, Playwright contracts, sitemap and robots integration, and marketing homepage placement.
94
+
95
+ Open the source route at `apps/aura-clash-showcase/`.
54
96
 
55
97
  ## 30-second product viewer
56
98
 
@@ -68,6 +110,269 @@ createAuraApp("#app", {
68
110
 
69
111
  The safe API uses generated refs such as `assets.robot`. Do not write `model("robot")`, hand-written GLB URLs, or invented asset ids.
70
112
 
113
+ ## Aura3D 1.0.5 game runtime example
114
+
115
+ Add typed assets before writing model code:
116
+
117
+ ```bash
118
+ npx @aura3d/cli@latest assets add ./assets/fighter.glb --name fighter
119
+ npx @aura3d/cli@latest assets add ./assets/opponent.glb --name opponent
120
+ ```
121
+
122
+ Then use the public game facade and stage builders:
123
+
124
+ ```ts
125
+ import {
126
+ AnimationController,
127
+ createAuraApp,
128
+ game,
129
+ games,
130
+ lights,
131
+ model,
132
+ scene
133
+ } from "@aura3d/engine";
134
+ import { assets } from "./aura-assets";
135
+
136
+ const stage = games.fighting.stagePreset("neon-dojo");
137
+ const stageIssues = games.fighting.validateStage(stage);
138
+
139
+ const fighting = game.fighting({
140
+ playerId: "player",
141
+ opponentId: "opponent",
142
+ stage: { width: stage.combatBounds.maxX - stage.combatBounds.minX },
143
+ autoListen: true
144
+ });
145
+
146
+ const app = createAuraApp("#app", {
147
+ scene: stage.nodes
148
+ .reduce((builder, node) => builder.add(node), scene())
149
+ .add(model(assets.fighter).runtime(game.runtimeNode("player", { tags: ["fighter", "local"] })))
150
+ .add(model(assets.opponent).runtime(game.runtimeNode("opponent", { tags: ["fighter", "ai"] })))
151
+ .add(lights.studio())
152
+ });
153
+
154
+ const player = app.nodes.require("player");
155
+ const opponent = app.nodes.require("opponent");
156
+ const animation = new AnimationController({
157
+ clipRegistry: assets.fighter,
158
+ requiredClips: ["Idle", "Walk", "LightPunch"],
159
+ suppressRootMotion: true
160
+ });
161
+
162
+ const touchLayout = game.touchControls({
163
+ width: window.innerWidth,
164
+ height: window.innerHeight,
165
+ buttons: [
166
+ { action: "jump", label: "Jump", binding: "TouchJump" },
167
+ { action: "light", label: "Light", binding: "TouchLight" }
168
+ ]
169
+ });
170
+
171
+ const jumpAssist = game.jumpAssist({ coyoteMs: 100, bufferMs: 120 });
172
+ const hud = game.hud.bindings([
173
+ game.hud.health({ actorId: "player", label: "Player health" }),
174
+ game.hud.health({ actorId: "opponent", label: "Opponent health" }),
175
+ game.hud.timer({ valuePath: "round.timeRemaining" }),
176
+ game.hud.debugToggle({ action: "debug", statePath: "debug.visible" })
177
+ ]);
178
+ const accessibility = [
179
+ game.accessibility.label({ targetId: "player-health", label: "Player health", live: true }),
180
+ game.accessibility.pauseControls({ actions: ["pause", "Escape"], resumeActions: ["pause", "Enter"], menuId: "pause-menu" })
181
+ ];
182
+
183
+ app.onFrame(({ dt }) => {
184
+ const snapshot = fighting.update(dt);
185
+ animation.update(dt);
186
+
187
+ jumpAssist.update(dt, {
188
+ grounded: fighting.bodies.player.grounded,
189
+ jumpPressed: fighting.input.pressed("jump")
190
+ });
191
+ if (jumpAssist.consume()) fighting.bodies.player.jump();
192
+
193
+ if (fighting.input.pressed("light")) {
194
+ animation.crossFade("LightPunch", 0.08, { restart: true });
195
+ }
196
+
197
+ player.setPosition(snapshot.player.position[0], snapshot.player.position[1], snapshot.player.position[2]);
198
+ opponent.setPosition(snapshot.opponent.position[0], snapshot.opponent.position[1], snapshot.opponent.position[2]);
199
+ });
200
+
201
+ const replayPlan = game.inputReplay(fighting.input.recorded(), { fps: 60, label: "round-1" });
202
+ const replayInput = game.input({
203
+ actions: fighting.controls.actions,
204
+ axes: fighting.controls.axes,
205
+ autoListen: false
206
+ });
207
+ const replayDriver = game.inputReplayDriver(replayInput, replayPlan);
208
+
209
+ const colliders = [
210
+ game.collider.capsule({ id: "player-body", center: fighting.bodies.player.position, radius: 0.34, height: 1.7 }),
211
+ game.collider.capsule({ id: "opponent-body", center: fighting.bodies.opponent.position, radius: 0.34, height: 1.7 })
212
+ ];
213
+ const overlay = game.debug.overlay({
214
+ runtime: app.runtime,
215
+ input: fighting.input,
216
+ bodies: [fighting.bodies.player, fighting.bodies.opponent],
217
+ combat: fighting.combat,
218
+ effects: fighting.effects,
219
+ camera: fighting.camera,
220
+ colliders,
221
+ warnings: stageIssues.map((issue) => issue.message)
222
+ });
223
+
224
+ const evidence = app.evidence({
225
+ input: fighting.input,
226
+ bodies: [fighting.bodies.player, fighting.bodies.opponent],
227
+ combat: fighting.combat,
228
+ effects: fighting.effects,
229
+ camera: fighting.camera,
230
+ hud,
231
+ accessibility,
232
+ stage: { id: stage.id, safeZones: true, bounds: stage.combatBounds, warnings: stageIssues.map((issue) => issue.message) }
233
+ });
234
+
235
+ console.log(touchLayout.controls.length, replayDriver.snapshot(), overlay.sections, evidence.systems);
236
+ ```
237
+
238
+ ## Aura3D 1.0.5 prompt-cartoon and AuraVoice example
239
+
240
+ Prompt-cartoon routes use typed assets, contract artifacts, shot playback, captions, visemes, and AuraVoice timing packages.
241
+
242
+ ```ts
243
+ import {
244
+ collectPromptAnimationEvidence,
245
+ compilePromptEpisodePlan,
246
+ createAudioStemManifest,
247
+ createAuraApp,
248
+ createAuraVoiceBridgePackage,
249
+ createAuraVoiceVisemeTrack,
250
+ createCartoonRenderOutputPackageMetadata,
251
+ createGlbBlendshapeVisemeCue,
252
+ createPrimitiveMouthVisemeCues,
253
+ createShotPlaybackPlan,
254
+ evaluatePromptAnimationPublishReadiness,
255
+ game,
256
+ installShotPlayback,
257
+ lights,
258
+ model,
259
+ scene,
260
+ sampleAuraVoiceBridgeAtTime,
261
+ validateAuraVoiceBridgePackage
262
+ } from "@aura3d/engine";
263
+ import { assets } from "./aura-assets";
264
+
265
+ const plan = compilePromptEpisodePlan({
266
+ episodeId: "moon-garden",
267
+ title: "Moon Garden Helpers",
268
+ prompt: "Two robots clean a glowing moon garden.",
269
+ language: "en",
270
+ runtime: { duration: 30, frameRate: 30, resolution: { width: 1280, height: 720 }, maxTimingDriftFrames: 1 },
271
+ characters: [
272
+ { id: "miko", name: "Miko", role: "hero", asset: assets.miko },
273
+ { id: "luma", name: "Luma", role: "sidekick", asset: assets.luma }
274
+ ],
275
+ locations: [{ id: "moon-garden", name: "Moon Garden", mood: "soft neon bedtime" }],
276
+ beats: [
277
+ {
278
+ id: "beat-001",
279
+ locationId: "moon-garden",
280
+ summary: "Miko and Luma clean the glowing weeds.",
281
+ visualIntent: "Two readable typed characters, safe captions, and gentle light.",
282
+ duration: 8,
283
+ characters: ["miko", "luma"],
284
+ dialogue: [{ speakerId: "miko", text: "The moon garden is glowing again.", emotion: "curious" }]
285
+ }
286
+ ],
287
+ route: "/episodes/moon-garden"
288
+ });
289
+
290
+ const visemes = createAuraVoiceVisemeTrack({
291
+ episodeId: plan.episodePlan.episodeId,
292
+ language: plan.episodePlan.language,
293
+ frameRate: plan.shotTimeline.frameRate,
294
+ cues: plan.dialogueTrack.lines.flatMap((line) =>
295
+ createPrimitiveMouthVisemeCues({
296
+ characterId: line.speakerId,
297
+ speakerId: line.speakerId,
298
+ lineId: line.lineId,
299
+ startTime: line.startTime,
300
+ endTime: line.endTime
301
+ }).map((cue) => createGlbBlendshapeVisemeCue(cue))
302
+ )
303
+ });
304
+
305
+ const audioStems = createAudioStemManifest({
306
+ episodeId: plan.episodePlan.episodeId,
307
+ duration: plan.dialogueTrack.duration,
308
+ stems: plan.dialogueTrack.lines.map((line) => ({
309
+ id: `audio:${line.lineId}`,
310
+ role: "dialogue",
311
+ path: line.audioFile ?? `assets/audio/${line.language}/${line.lineId}.wav`,
312
+ startTime: line.startTime,
313
+ duration: line.endTime - line.startTime,
314
+ language: line.language
315
+ }))
316
+ });
317
+
318
+ const renderOutputPackage = createCartoonRenderOutputPackageMetadata({
319
+ episodePlan: plan.episodePlan,
320
+ shotTimeline: plan.shotTimeline,
321
+ renderQueue: plan.renderQueue
322
+ });
323
+
324
+ const bridge = createAuraVoiceBridgePackage({
325
+ episodePlan: plan.episodePlan,
326
+ storyboard: plan.storyboard,
327
+ shotTimeline: plan.shotTimeline,
328
+ dialogueTrack: plan.dialogueTrack,
329
+ captionTrack: plan.captionTrack,
330
+ visemes,
331
+ audioStems,
332
+ renderQueue: plan.renderQueue,
333
+ renderOutputPackage
334
+ });
335
+ const bridgeIssues = validateAuraVoiceBridgePackage(bridge);
336
+
337
+ const playback = createShotPlaybackPlan({
338
+ timeline: plan.shotTimeline,
339
+ performance: plan.performance,
340
+ captions: plan.captionTrack,
341
+ visemes,
342
+ runtimeNodeByCharacterId: { miko: "miko", luma: "luma" },
343
+ loop: true
344
+ });
345
+
346
+ const app = createAuraApp("#app", {
347
+ scene: scene()
348
+ .add(model(assets.miko).runtime(game.runtimeNode("miko", { tags: ["character"] })))
349
+ .add(model(assets.luma).runtime(game.runtimeNode("luma", { tags: ["character"] })))
350
+ .add(lights.studio())
351
+ });
352
+ installShotPlayback(app, playback);
353
+
354
+ const sample = sampleAuraVoiceBridgeAtTime(bridge, 3);
355
+ const evidence = collectPromptAnimationEvidence({
356
+ bridgePackage: bridge,
357
+ screenshots: [
358
+ {
359
+ id: "shot-001",
360
+ time: sample.time,
361
+ path: "artifacts/screenshots/shot-001.png",
362
+ hash: "sha256:replace-with-rendered-screenshot-hash",
363
+ width: 1280,
364
+ height: 720
365
+ }
366
+ ],
367
+ routeHealth: { status: "pass" }
368
+ });
369
+ const readiness = evaluatePromptAnimationPublishReadiness(evidence);
370
+
371
+ console.log(bridgeIssues, evidence.publishReady, readiness.ready);
372
+ ```
373
+
374
+ Do not publish placeholder screenshot hashes. Deterministic render output must replace the placeholder before a prompt-cartoon or AuraVoice route is called publish-ready.
375
+
71
376
  ## Prompt-to-3D scene kits
72
377
 
73
378
  Use scene kits when an AI prompt asks for generated 3D systems rather than a supplied model.
@@ -97,20 +402,13 @@ Maintained scene-kit families include physics playgrounds, particle fountains, s
97
402
  - `@aura3d/cli`: typed GLB/glTF asset workflow, diagnostics, and deploy checks.
98
403
  - `@aura3d/react`: optional thin React adapter.
99
404
  - `create-aura3d`: Vite templates for product viewers, cinematic scenes, and mini-games.
405
+ - `@aura3d/three-compat`: optional migration compatibility package, installed separately when a Three.js migration workflow needs it.
100
406
 
101
- ## Aura3D vs Three.js, Babylon.js, Unity, and Unreal
102
-
103
- Aura3D is built for the AI-assisted browser 3D era. It gives teams a higher-level TypeScript workflow than renderer-first libraries and a lighter web-native path than heavyweight game-engine exports.
104
-
105
- Use Aura3D when you want:
407
+ ## Production browser 3D workflow
106
408
 
107
- - A Three.js alternative focused on prompt-to-code scenes, typed assets, and deployable browser output.
108
- - A Babylon.js alternative for teams that want AI agents to build real TypeScript scenes without hand-rolling every system.
109
- - A faster product-viewer and 3D website workflow than Unity WebGL export pipelines.
110
- - A web-first alternative to Unreal-heavy runtime delivery for interactive product, data, and cinematic scenes.
111
- - A source-code-first SDK where agents generate maintainable TypeScript instead of opaque scene blobs.
409
+ Aura3D is built for the AI-assisted browser 3D era. It gives teams a source-code-first TypeScript workflow where agents generate maintainable scenes, game routes, product viewers, and deployable interactive websites.
112
410
 
113
- Aura3D combines scene kits, GLB/glTF asset typing, product viewers, physics scenes, particles, material labs, data worlds, route diagnostics, screenshot workflows, and static deployment into one agent-ready SDK.
411
+ Aura3D combines scene kits, GLB/glTF asset typing, product viewers, browser-game systems, physics scenes, particles, material labs, data worlds, route diagnostics, screenshot workflows, and static deployment into one agent-ready SDK.
114
412
 
115
413
  ## Documentation
116
414
 
@@ -129,7 +427,24 @@ pnpm run check:release
129
427
 
130
428
  Use release checks to confirm package integrity, generated assets, examples, and static deployment output before shipping.
131
429
 
430
+ Aura3D 1.0.5 route-specific readiness commands:
431
+
432
+ ```bash
433
+ npx @aura3d/cli@latest assets validate-game
434
+ npx @aura3d/cli@latest assets validate-cartoon
435
+ npx @aura3d/cli@latest check-deploy --dist dist
436
+ pnpm game-runtime:docs
437
+ pnpm game-runtime:template
438
+ pnpm game-runtime:package
439
+ pnpm game-runtime:release
440
+ pnpm prompt-animation:docs
441
+ pnpm prompt-animation:template
442
+ pnpm prompt-animation:package
443
+ pnpm prompt-animation:release
444
+ ```
445
+
446
+ Do not mark a game, prompt-cartoon, or AuraVoice route launch-ready from source evidence alone. Asset readiness, package smoke, browser route health, deterministic screenshots, visual review, accessibility proof, and deployment checks must also pass.
447
+
132
448
  ## Contributing
133
449
 
134
450
  Star the repo if you want AI-native browser 3D tooling for TypeScript, WebGL, WebGPU, GLB/glTF assets, product viewers, prompt-to-3D scenes, and deployable 3D websites. Open issues with the prompt, package version, asset source or license, commands run, route-health output, screenshots, and deploy context.
135
-
@@ -0,0 +1,57 @@
1
+ export type AnimationPlaybackDirection = 1 | -1;
2
+ export type AnimationClipEventType = "marker" | "hitbox" | "hurtbox" | "footstep" | "sfx" | "vfx" | "camera" | "state" | "custom" | (string & {});
3
+ export interface AnimationClipEvent<TName extends string = string, TPayload = unknown> {
4
+ readonly id?: string;
5
+ readonly name: TName;
6
+ readonly type?: AnimationClipEventType;
7
+ readonly time: number;
8
+ readonly duration?: number;
9
+ readonly payload?: TPayload;
10
+ readonly once?: boolean;
11
+ readonly tags?: readonly string[];
12
+ }
13
+ export interface AnimationClipEventSource<TEvent extends AnimationClipEvent = AnimationClipEvent> {
14
+ readonly id: string;
15
+ readonly duration: number;
16
+ readonly events?: readonly TEvent[];
17
+ }
18
+ export interface AnimationClipEventSamplingOptions {
19
+ readonly from: number;
20
+ readonly to: number;
21
+ readonly duration?: number;
22
+ readonly loop?: boolean;
23
+ readonly direction?: AnimationPlaybackDirection;
24
+ readonly includeStart?: boolean;
25
+ readonly includeEnd?: boolean;
26
+ readonly loopCount?: number;
27
+ readonly playbackTime?: number;
28
+ }
29
+ export interface AnimationClipEventInvocation<TEvent extends AnimationClipEvent = AnimationClipEvent, TClipId extends string = string> {
30
+ readonly clipId: TClipId;
31
+ readonly event: TEvent;
32
+ readonly time: number;
33
+ readonly previousTime: number;
34
+ readonly localTime: number;
35
+ readonly normalizedTime: number;
36
+ readonly loopCount: number;
37
+ readonly direction: AnimationPlaybackDirection;
38
+ readonly playbackTime?: number;
39
+ }
40
+ export type AnimationClipEventListener<TPayload> = (payload: TPayload) => void;
41
+ export type AnimationClipEventUnsubscribe = () => void;
42
+ export declare class AnimationEventDispatcher<TEventMap = Record<string, unknown>> {
43
+ private readonly listeners;
44
+ on<K extends Extract<keyof TEventMap, string>>(type: K, listener: AnimationClipEventListener<TEventMap[K]>): AnimationClipEventUnsubscribe;
45
+ once<K extends Extract<keyof TEventMap, string>>(type: K, listener: AnimationClipEventListener<TEventMap[K]>): AnimationClipEventUnsubscribe;
46
+ off<K extends Extract<keyof TEventMap, string>>(type: K, listener: AnimationClipEventListener<TEventMap[K]>): void;
47
+ emit<K extends Extract<keyof TEventMap, string>>(type: K, payload: TEventMap[K]): void;
48
+ clear(type?: Extract<keyof TEventMap, string>): void;
49
+ listenerCount(type?: Extract<keyof TEventMap, string>): number;
50
+ }
51
+ export declare function createAnimationClipEvent<TName extends string, TPayload = unknown>(name: TName, time: number, options?: Omit<AnimationClipEvent<TName, TPayload>, "name" | "time">): AnimationClipEvent<TName, TPayload>;
52
+ export declare function normalizeClipEvents<TEvent extends AnimationClipEvent>(events?: readonly TEvent[]): readonly TEvent[];
53
+ export declare function animationClipEventKey(clipId: string, event: AnimationClipEvent): string;
54
+ export declare function sampleClipEvents<TEvent extends AnimationClipEvent, TClipId extends string = string>(source: AnimationClipEventSource<TEvent> & {
55
+ readonly id: TClipId;
56
+ }, options: AnimationClipEventSamplingOptions): AnimationClipEventInvocation<TEvent, TClipId>[];
57
+ //# sourceMappingURL=AnimationClipEvents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationClipEvents.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/AnimationClipEvents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ export class AnimationEventDispatcher {
2
+ listeners = new Map();
3
+ on(type, listener) {
4
+ const listeners = this.listeners.get(type) ?? new Set();
5
+ listeners.add(listener);
6
+ this.listeners.set(type, listeners);
7
+ return () => {
8
+ this.off(type, listener);
9
+ };
10
+ }
11
+ once(type, listener) {
12
+ const unsubscribe = this.on(type, (payload) => {
13
+ unsubscribe();
14
+ listener(payload);
15
+ });
16
+ return unsubscribe;
17
+ }
18
+ off(type, listener) {
19
+ const listeners = this.listeners.get(type);
20
+ if (!listeners)
21
+ return;
22
+ listeners.delete(listener);
23
+ if (listeners.size === 0) {
24
+ this.listeners.delete(type);
25
+ }
26
+ }
27
+ emit(type, payload) {
28
+ const listeners = this.listeners.get(type);
29
+ if (!listeners)
30
+ return;
31
+ for (const listener of [...listeners]) {
32
+ listener(payload);
33
+ }
34
+ }
35
+ clear(type) {
36
+ if (type) {
37
+ this.listeners.delete(type);
38
+ return;
39
+ }
40
+ this.listeners.clear();
41
+ }
42
+ listenerCount(type) {
43
+ if (type) {
44
+ return this.listeners.get(type)?.size ?? 0;
45
+ }
46
+ let count = 0;
47
+ for (const listeners of this.listeners.values()) {
48
+ count += listeners.size;
49
+ }
50
+ return count;
51
+ }
52
+ }
53
+ export function createAnimationClipEvent(name, time, options = {}) {
54
+ return {
55
+ ...options,
56
+ name,
57
+ time
58
+ };
59
+ }
60
+ export function normalizeClipEvents(events = []) {
61
+ return [...events].sort((a, b) => {
62
+ if (a.time !== b.time)
63
+ return a.time - b.time;
64
+ return a.name.localeCompare(b.name);
65
+ });
66
+ }
67
+ export function animationClipEventKey(clipId, event) {
68
+ return `${clipId}:${event.id ?? event.name}:${event.type ?? "marker"}:${event.time}`;
69
+ }
70
+ export function sampleClipEvents(source, options) {
71
+ const events = normalizeClipEvents(source.events);
72
+ if (events.length === 0)
73
+ return [];
74
+ const duration = sanitizeDuration(options.duration ?? source.duration);
75
+ const direction = options.direction ?? (options.to >= options.from ? 1 : -1);
76
+ const includeStart = options.includeStart ?? false;
77
+ const includeEnd = options.includeEnd ?? true;
78
+ const loopCount = options.loopCount ?? 0;
79
+ const playbackTime = options.playbackTime;
80
+ if (duration === 0) {
81
+ return events
82
+ .filter((event) => event.time === 0 && includesBoundary(includeStart, includeEnd))
83
+ .map((event) => createInvocation(source.id, event, options.from, 0, duration, loopCount, direction, playbackTime));
84
+ }
85
+ const from = normalizeLocalTime(options.from, duration, options.loop ?? false);
86
+ const to = normalizeLocalTime(options.to, duration, options.loop ?? false);
87
+ const segments = createSamplingSegments(from, to, duration, options.loop ?? false, direction);
88
+ const invocations = [];
89
+ for (let segmentIndex = 0; segmentIndex < segments.length; segmentIndex += 1) {
90
+ const segment = segments[segmentIndex];
91
+ const segmentIncludeStart = segmentIndex === 0 ? includeStart : true;
92
+ const segmentIncludeEnd = segmentIndex === segments.length - 1 ? includeEnd : true;
93
+ const matching = events.filter((event) => eventInSegment(event.time, segment.start, segment.end, segmentIncludeStart, segmentIncludeEnd));
94
+ if (direction === -1) {
95
+ matching.reverse();
96
+ }
97
+ for (const event of matching) {
98
+ invocations.push(createInvocation(source.id, event, options.from, event.time, duration, loopCount + segment.loopOffset, direction, playbackTime));
99
+ }
100
+ }
101
+ return invocations;
102
+ }
103
+ function createSamplingSegments(from, to, duration, loop, direction) {
104
+ if (!loop) {
105
+ return [
106
+ {
107
+ start: Math.min(from, to),
108
+ end: Math.max(from, to),
109
+ loopOffset: 0
110
+ }
111
+ ];
112
+ }
113
+ if (direction === 1) {
114
+ if (to >= from) {
115
+ return [{ start: from, end: to, loopOffset: 0 }];
116
+ }
117
+ return [
118
+ { start: from, end: duration, loopOffset: 0 },
119
+ { start: 0, end: to, loopOffset: 1 }
120
+ ];
121
+ }
122
+ if (to <= from) {
123
+ return [{ start: to, end: from, loopOffset: 0 }];
124
+ }
125
+ return [
126
+ { start: 0, end: from, loopOffset: 0 },
127
+ { start: to, end: duration, loopOffset: 1 }
128
+ ];
129
+ }
130
+ function createInvocation(clipId, event, previousTime, localTime, duration, loopCount, direction, playbackTime) {
131
+ return {
132
+ clipId,
133
+ event,
134
+ time: event.time,
135
+ previousTime,
136
+ localTime,
137
+ normalizedTime: duration > 0 ? event.time / duration : 0,
138
+ loopCount,
139
+ direction,
140
+ playbackTime
141
+ };
142
+ }
143
+ function eventInSegment(time, start, end, includeStart, includeEnd) {
144
+ const startsAfter = includeStart ? time >= start : time > start;
145
+ const endsBefore = includeEnd ? time <= end : time < end;
146
+ return startsAfter && endsBefore;
147
+ }
148
+ function includesBoundary(includeStart, includeEnd) {
149
+ return includeStart || includeEnd;
150
+ }
151
+ function normalizeLocalTime(time, duration, loop) {
152
+ if (!Number.isFinite(time))
153
+ return 0;
154
+ if (!loop)
155
+ return clamp(time, 0, duration);
156
+ return positiveModulo(time, duration);
157
+ }
158
+ function sanitizeDuration(duration) {
159
+ if (!Number.isFinite(duration) || duration <= 0)
160
+ return 0;
161
+ return duration;
162
+ }
163
+ function positiveModulo(value, divisor) {
164
+ if (divisor <= 0)
165
+ return 0;
166
+ return ((value % divisor) + divisor) % divisor;
167
+ }
168
+ function clamp(value, min, max) {
169
+ return Math.min(max, Math.max(min, value));
170
+ }
171
+ //# sourceMappingURL=AnimationClipEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationClipEvents.js","sourceRoot":"","sources":["../../../../packages/animation/src/AnimationClipEvents.ts"],"names":[],"mappings":"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"}