@needle-tools/engine 5.1.0-canary.30cc545 → 5.1.0-canary.40da791

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 (341) hide show
  1. package/.needle/generated/needle-bindings.gen.d.ts +5 -0
  2. package/CHANGELOG.md +91 -0
  3. package/SKILL.md +4 -1
  4. package/components.needle.json +1 -1
  5. package/dist/{needle-engine.bundle-d_9mSxN4.js → needle-engine.bundle-Cu2B9CsR.js} +16112 -15269
  6. package/dist/needle-engine.bundle-ZoVUaB89.umd.cjs +1733 -0
  7. package/dist/needle-engine.bundle-hBWUJPxm.min.js +1733 -0
  8. package/dist/needle-engine.d.ts +1527 -384
  9. package/dist/needle-engine.js +573 -569
  10. package/dist/needle-engine.min.js +1 -1
  11. package/dist/needle-engine.umd.cjs +1 -1
  12. package/dist/three.js +1 -0
  13. package/dist/three.min.js +21 -21
  14. package/dist/three.umd.cjs +16 -16
  15. package/lib/engine/api.d.ts +8 -1
  16. package/lib/engine/api.js +6 -0
  17. package/lib/engine/api.js.map +1 -1
  18. package/lib/engine/codegen/register_types.js +10 -18
  19. package/lib/engine/codegen/register_types.js.map +1 -1
  20. package/lib/engine/debug/debug_spatial_console.d.ts +2 -0
  21. package/lib/engine/debug/debug_spatial_console.js +10 -7
  22. package/lib/engine/debug/debug_spatial_console.js.map +1 -1
  23. package/lib/engine/engine_addressables.d.ts +2 -0
  24. package/lib/engine/engine_addressables.js +6 -3
  25. package/lib/engine/engine_addressables.js.map +1 -1
  26. package/lib/engine/engine_audio.d.ts +68 -0
  27. package/lib/engine/engine_audio.js +172 -0
  28. package/lib/engine/engine_audio.js.map +1 -1
  29. package/lib/engine/engine_camera.fit.js +16 -4
  30. package/lib/engine/engine_camera.fit.js.map +1 -1
  31. package/lib/engine/engine_components.js +1 -1
  32. package/lib/engine/engine_components.js.map +1 -1
  33. package/lib/engine/engine_context.d.ts +41 -27
  34. package/lib/engine/engine_context.js +57 -30
  35. package/lib/engine/engine_context.js.map +1 -1
  36. package/lib/engine/engine_context_eventbus.d.ts +47 -0
  37. package/lib/engine/engine_context_eventbus.js +47 -0
  38. package/lib/engine/engine_context_eventbus.js.map +1 -0
  39. package/lib/engine/engine_disposable.d.ts +172 -0
  40. package/lib/engine/engine_disposable.js +136 -0
  41. package/lib/engine/engine_disposable.js.map +1 -0
  42. package/lib/engine/engine_gameobject.d.ts +1 -10
  43. package/lib/engine/engine_gameobject.js +22 -120
  44. package/lib/engine/engine_gameobject.js.map +1 -1
  45. package/lib/engine/engine_gltf_builtin_components.js +7 -69
  46. package/lib/engine/engine_gltf_builtin_components.js.map +1 -1
  47. package/lib/engine/engine_init.js +16 -1
  48. package/lib/engine/engine_init.js.map +1 -1
  49. package/lib/engine/engine_input.d.ts +24 -5
  50. package/lib/engine/engine_input.js +3 -2
  51. package/lib/engine/engine_input.js.map +1 -1
  52. package/lib/engine/engine_instantiate_resolve.d.ts +42 -0
  53. package/lib/engine/engine_instantiate_resolve.js +372 -0
  54. package/lib/engine/engine_instantiate_resolve.js.map +1 -0
  55. package/lib/engine/engine_license.d.ts +2 -0
  56. package/lib/engine/engine_license.js +14 -6
  57. package/lib/engine/engine_license.js.map +1 -1
  58. package/lib/engine/engine_lifecycle_functions_internal.js +5 -0
  59. package/lib/engine/engine_lifecycle_functions_internal.js.map +1 -1
  60. package/lib/engine/engine_mainloop_utils.js +7 -4
  61. package/lib/engine/engine_mainloop_utils.js.map +1 -1
  62. package/lib/engine/engine_networking.d.ts +51 -37
  63. package/lib/engine/engine_networking.js +132 -82
  64. package/lib/engine/engine_networking.js.map +1 -1
  65. package/lib/engine/engine_networking.transport.websocket.d.ts +15 -0
  66. package/lib/engine/engine_networking.transport.websocket.js +38 -0
  67. package/lib/engine/engine_networking.transport.websocket.js.map +1 -0
  68. package/lib/engine/engine_networking_blob.js +1 -1
  69. package/lib/engine/engine_networking_blob.js.map +1 -1
  70. package/lib/engine/engine_networking_instantiate.js +2 -2
  71. package/lib/engine/engine_networking_instantiate.js.map +1 -1
  72. package/lib/engine/engine_networking_types.d.ts +39 -1
  73. package/lib/engine/engine_networking_types.js +7 -0
  74. package/lib/engine/engine_networking_types.js.map +1 -1
  75. package/lib/engine/engine_physics_rapier.d.ts +21 -3
  76. package/lib/engine/engine_physics_rapier.js +94 -25
  77. package/lib/engine/engine_physics_rapier.js.map +1 -1
  78. package/lib/engine/engine_scenedata.d.ts +13 -17
  79. package/lib/engine/engine_scenedata.js +58 -31
  80. package/lib/engine/engine_scenedata.js.map +1 -1
  81. package/lib/engine/engine_serialization_builtin_serializer.d.ts +10 -16
  82. package/lib/engine/engine_serialization_builtin_serializer.js +56 -46
  83. package/lib/engine/engine_serialization_builtin_serializer.js.map +1 -1
  84. package/lib/engine/engine_serialization_core.d.ts +1 -0
  85. package/lib/engine/engine_serialization_core.js +7 -0
  86. package/lib/engine/engine_serialization_core.js.map +1 -1
  87. package/lib/engine/engine_ssr.d.ts +2 -0
  88. package/lib/engine/engine_ssr.js +2 -0
  89. package/lib/engine/engine_ssr.js.map +1 -1
  90. package/lib/engine/engine_types.d.ts +31 -11
  91. package/lib/engine/engine_types.js +1 -1
  92. package/lib/engine/engine_types.js.map +1 -1
  93. package/lib/engine/engine_util_decorator.js +7 -2
  94. package/lib/engine/engine_util_decorator.js.map +1 -1
  95. package/lib/engine/engine_utils.d.ts +1 -1
  96. package/lib/engine/engine_utils.js +19 -5
  97. package/lib/engine/engine_utils.js.map +1 -1
  98. package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +1 -1
  99. package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js.map +1 -1
  100. package/lib/engine/webcomponents/jsx.d.ts +51 -0
  101. package/lib/engine/webcomponents/logo-element.js.map +1 -1
  102. package/lib/engine/webcomponents/needle menu/needle-menu.d.ts +3 -4
  103. package/lib/engine/webcomponents/needle menu/needle-menu.js +1 -1
  104. package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
  105. package/lib/engine/webcomponents/needle-button.js.map +1 -1
  106. package/lib/engine/webcomponents/needle-engine.d.ts +10 -4
  107. package/lib/engine/webcomponents/needle-engine.js +1 -1
  108. package/lib/engine/webcomponents/needle-engine.js.map +1 -1
  109. package/lib/engine/xr/NeedleXRSession.d.ts +3 -2
  110. package/lib/engine/xr/NeedleXRSession.js +50 -14
  111. package/lib/engine/xr/NeedleXRSession.js.map +1 -1
  112. package/lib/engine/xr/events.d.ts +1 -1
  113. package/lib/engine/xr/events.js.map +1 -1
  114. package/lib/engine-components/Animation.js +17 -16
  115. package/lib/engine-components/Animation.js.map +1 -1
  116. package/lib/engine-components/AnimationBuilder.d.ts +158 -0
  117. package/lib/engine-components/AnimationBuilder.js +305 -0
  118. package/lib/engine-components/AnimationBuilder.js.map +1 -0
  119. package/lib/engine-components/Animator.d.ts +6 -0
  120. package/lib/engine-components/Animator.js +23 -13
  121. package/lib/engine-components/Animator.js.map +1 -1
  122. package/lib/engine-components/AnimatorController.builder.d.ts +191 -0
  123. package/lib/engine-components/AnimatorController.builder.js +263 -0
  124. package/lib/engine-components/AnimatorController.builder.js.map +1 -0
  125. package/lib/engine-components/AnimatorController.d.ts +4 -119
  126. package/lib/engine-components/AnimatorController.js +37 -233
  127. package/lib/engine-components/AnimatorController.js.map +1 -1
  128. package/lib/engine-components/AudioSource.d.ts +19 -3
  129. package/lib/engine-components/AudioSource.js +121 -68
  130. package/lib/engine-components/AudioSource.js.map +1 -1
  131. package/lib/engine-components/Collider.d.ts +18 -9
  132. package/lib/engine-components/Collider.js +61 -14
  133. package/lib/engine-components/Collider.js.map +1 -1
  134. package/lib/engine-components/Component.d.ts +72 -9
  135. package/lib/engine-components/Component.js +114 -10
  136. package/lib/engine-components/Component.js.map +1 -1
  137. package/lib/engine-components/ContactShadows.d.ts +1 -0
  138. package/lib/engine-components/ContactShadows.js +14 -1
  139. package/lib/engine-components/ContactShadows.js.map +1 -1
  140. package/lib/engine-components/DragControls.d.ts +7 -0
  141. package/lib/engine-components/DragControls.js +19 -7
  142. package/lib/engine-components/DragControls.js.map +1 -1
  143. package/lib/engine-components/DropListener.js +3 -0
  144. package/lib/engine-components/DropListener.js.map +1 -1
  145. package/lib/engine-components/EventList.d.ts +31 -9
  146. package/lib/engine-components/EventList.js +37 -76
  147. package/lib/engine-components/EventList.js.map +1 -1
  148. package/lib/engine-components/Joints.d.ts +4 -2
  149. package/lib/engine-components/Joints.js +19 -3
  150. package/lib/engine-components/Joints.js.map +1 -1
  151. package/lib/engine-components/Light.d.ts +6 -8
  152. package/lib/engine-components/Light.js +48 -27
  153. package/lib/engine-components/Light.js.map +1 -1
  154. package/lib/engine-components/Networking.d.ts +1 -1
  155. package/lib/engine-components/Networking.js +1 -1
  156. package/lib/engine-components/OrbitControls.d.ts +0 -2
  157. package/lib/engine-components/OrbitControls.js +30 -12
  158. package/lib/engine-components/OrbitControls.js.map +1 -1
  159. package/lib/engine-components/ReflectionProbe.js +2 -0
  160. package/lib/engine-components/ReflectionProbe.js.map +1 -1
  161. package/lib/engine-components/RigidBody.d.ts +12 -4
  162. package/lib/engine-components/RigidBody.js +18 -4
  163. package/lib/engine-components/RigidBody.js.map +1 -1
  164. package/lib/engine-components/SceneSwitcher.js +3 -0
  165. package/lib/engine-components/SceneSwitcher.js.map +1 -1
  166. package/lib/engine-components/SeeThrough.js +2 -2
  167. package/lib/engine-components/SeeThrough.js.map +1 -1
  168. package/lib/engine-components/api.d.ts +2 -1
  169. package/lib/engine-components/api.js +2 -1
  170. package/lib/engine-components/api.js.map +1 -1
  171. package/lib/engine-components/codegen/components.d.ts +7 -13
  172. package/lib/engine-components/codegen/components.js +7 -13
  173. package/lib/engine-components/codegen/components.js.map +1 -1
  174. package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +1 -1
  175. package/lib/engine-components/postprocessing/VolumeParameter.d.ts +2 -0
  176. package/lib/engine-components/postprocessing/VolumeParameter.js +4 -1
  177. package/lib/engine-components/postprocessing/VolumeParameter.js.map +1 -1
  178. package/lib/engine-components/timeline/PlayableDirector.d.ts +21 -11
  179. package/lib/engine-components/timeline/PlayableDirector.js +75 -67
  180. package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
  181. package/lib/engine-components/timeline/SignalAsset.d.ts +3 -1
  182. package/lib/engine-components/timeline/SignalAsset.js +1 -0
  183. package/lib/engine-components/timeline/SignalAsset.js.map +1 -1
  184. package/lib/engine-components/timeline/TimelineBuilder.d.ts +413 -0
  185. package/lib/engine-components/timeline/TimelineBuilder.js +506 -0
  186. package/lib/engine-components/timeline/TimelineBuilder.js.map +1 -0
  187. package/lib/engine-components/timeline/TimelineModels.d.ts +2 -1
  188. package/lib/engine-components/timeline/TimelineModels.js +3 -0
  189. package/lib/engine-components/timeline/TimelineModels.js.map +1 -1
  190. package/lib/engine-components/timeline/TimelineTracks.d.ts +37 -6
  191. package/lib/engine-components/timeline/TimelineTracks.js +92 -26
  192. package/lib/engine-components/timeline/TimelineTracks.js.map +1 -1
  193. package/lib/engine-components/timeline/index.d.ts +2 -1
  194. package/lib/engine-components/timeline/index.js +2 -0
  195. package/lib/engine-components/timeline/index.js.map +1 -1
  196. package/lib/engine-components/ui/Canvas.d.ts +1 -1
  197. package/lib/engine-components/ui/Canvas.js +2 -8
  198. package/lib/engine-components/ui/Canvas.js.map +1 -1
  199. package/lib/engine-components/ui/Text.d.ts +1 -0
  200. package/lib/engine-components/ui/Text.js +10 -7
  201. package/lib/engine-components/ui/Text.js.map +1 -1
  202. package/lib/engine-components/web/CursorFollow.d.ts +0 -1
  203. package/lib/engine-components/web/CursorFollow.js +21 -13
  204. package/lib/engine-components/web/CursorFollow.js.map +1 -1
  205. package/lib/engine-components/webxr/WebXRImageTracking.js +4 -0
  206. package/lib/engine-components/webxr/WebXRImageTracking.js.map +1 -1
  207. package/lib/needle-engine.d.ts +2 -0
  208. package/lib/needle-engine.js +2 -0
  209. package/lib/needle-engine.js.map +1 -1
  210. package/package.json +3 -83
  211. package/plugins/common/license.js +5 -2
  212. package/plugins/common/worker.js +9 -4
  213. package/plugins/dts-generator/dts.codegen.js +255 -50
  214. package/plugins/dts-generator/dts.scan.js +37 -9
  215. package/plugins/dts-generator/dts.writer.js +1 -1
  216. package/plugins/dts-generator/glb.discovery.js +140 -23
  217. package/plugins/dts-generator/glb.extractor.js +48 -8
  218. package/plugins/dts-generator/glb.reader.js +80 -27
  219. package/plugins/dts-generator/index.js +1 -1
  220. package/plugins/types/needle-bindings.d.ts +25 -14
  221. package/plugins/types/userconfig.d.ts +12 -0
  222. package/plugins/vite/asap.js +18 -9
  223. package/plugins/vite/dependencies.js +29 -10
  224. package/plugins/vite/dependency-watcher.d.ts +2 -2
  225. package/plugins/vite/dependency-watcher.js +5 -6
  226. package/plugins/vite/drop.d.ts +2 -2
  227. package/plugins/vite/drop.js +3 -4
  228. package/plugins/vite/dts-generator.d.ts +2 -2
  229. package/plugins/vite/dts-generator.js +43 -9
  230. package/plugins/vite/editor-connection.js +3 -3
  231. package/plugins/vite/index.d.ts +9 -3
  232. package/plugins/vite/index.js +23 -10
  233. package/plugins/vite/license.js +19 -1
  234. package/plugins/vite/local-files-core.js +3 -3
  235. package/plugins/vite/local-files-utils.d.ts +3 -1
  236. package/plugins/vite/local-files-utils.js +29 -5
  237. package/plugins/vite/meta.js +4 -2
  238. package/plugins/vite/poster.d.ts +2 -2
  239. package/plugins/vite/poster.js +3 -5
  240. package/plugins/vite/reload.d.ts +2 -2
  241. package/plugins/vite/reload.js +23 -23
  242. package/plugins/vite/server.js +2 -1
  243. package/src/engine/api.ts +11 -1
  244. package/src/engine/codegen/register_types.ts +10 -18
  245. package/src/engine/debug/debug_spatial_console.ts +10 -7
  246. package/src/engine/engine_addressables.ts +6 -3
  247. package/src/engine/engine_audio.ts +184 -0
  248. package/src/engine/engine_camera.fit.ts +15 -4
  249. package/src/engine/engine_components.ts +1 -1
  250. package/src/engine/engine_context.ts +67 -37
  251. package/src/engine/engine_context_eventbus.ts +73 -0
  252. package/src/engine/engine_disposable.ts +214 -0
  253. package/src/engine/engine_gameobject.ts +54 -159
  254. package/src/engine/engine_gltf_builtin_components.ts +7 -76
  255. package/src/engine/engine_init.ts +15 -1
  256. package/src/engine/engine_input.ts +28 -7
  257. package/src/engine/engine_instantiate_resolve.ts +407 -0
  258. package/src/engine/engine_license.ts +12 -10
  259. package/src/engine/engine_lifecycle_functions_internal.ts +7 -0
  260. package/src/engine/engine_mainloop_utils.ts +7 -4
  261. package/src/engine/engine_networking.transport.websocket.ts +45 -0
  262. package/src/engine/engine_networking.ts +161 -137
  263. package/src/engine/engine_networking_blob.ts +1 -1
  264. package/src/engine/engine_networking_instantiate.ts +2 -2
  265. package/src/engine/engine_networking_types.ts +41 -1
  266. package/src/engine/engine_physics_rapier.ts +102 -33
  267. package/src/engine/engine_scenedata.ts +56 -30
  268. package/src/engine/engine_serialization_builtin_serializer.ts +64 -52
  269. package/src/engine/engine_serialization_core.ts +9 -0
  270. package/src/engine/engine_ssr.ts +3 -0
  271. package/src/engine/engine_types.ts +48 -27
  272. package/src/engine/engine_util_decorator.ts +7 -2
  273. package/src/engine/engine_utils.ts +16 -5
  274. package/src/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +1 -1
  275. package/src/engine/webcomponents/jsx.d.ts +51 -0
  276. package/src/engine/webcomponents/logo-element.ts +1 -0
  277. package/src/engine/webcomponents/needle menu/needle-menu.ts +3 -2
  278. package/src/engine/webcomponents/needle-button.ts +1 -0
  279. package/src/engine/webcomponents/needle-engine.ts +11 -4
  280. package/src/engine/xr/NeedleXRSession.ts +48 -13
  281. package/src/engine/xr/events.ts +1 -1
  282. package/src/engine-components/Animation.ts +19 -16
  283. package/src/engine-components/AnimationBuilder.ts +472 -0
  284. package/src/engine-components/Animator.ts +24 -12
  285. package/src/engine-components/AnimatorController.builder.ts +387 -0
  286. package/src/engine-components/AnimatorController.ts +24 -292
  287. package/src/engine-components/AudioSource.ts +130 -79
  288. package/src/engine-components/Collider.ts +66 -18
  289. package/src/engine-components/Component.ts +118 -20
  290. package/src/engine-components/ContactShadows.ts +15 -1
  291. package/src/engine-components/DragControls.ts +18 -11
  292. package/src/engine-components/DropListener.ts +3 -0
  293. package/src/engine-components/EventList.ts +45 -83
  294. package/src/engine-components/Joints.ts +20 -4
  295. package/src/engine-components/Light.ts +49 -27
  296. package/src/engine-components/Networking.ts +1 -1
  297. package/src/engine-components/OrbitControls.ts +34 -14
  298. package/src/engine-components/ReflectionProbe.ts +2 -0
  299. package/src/engine-components/RigidBody.ts +18 -4
  300. package/src/engine-components/SceneSwitcher.ts +3 -0
  301. package/src/engine-components/SeeThrough.ts +2 -2
  302. package/src/engine-components/api.ts +2 -1
  303. package/src/engine-components/codegen/components.ts +7 -13
  304. package/src/engine-components/postprocessing/VolumeParameter.ts +4 -1
  305. package/src/engine-components/timeline/PlayableDirector.ts +83 -81
  306. package/src/engine-components/timeline/SignalAsset.ts +4 -1
  307. package/src/engine-components/timeline/TimelineBuilder.ts +824 -0
  308. package/src/engine-components/timeline/TimelineModels.ts +5 -1
  309. package/src/engine-components/timeline/TimelineTracks.ts +96 -27
  310. package/src/engine-components/timeline/index.ts +2 -1
  311. package/src/engine-components/ui/Canvas.ts +2 -8
  312. package/src/engine-components/ui/Text.ts +12 -8
  313. package/src/engine-components/web/CursorFollow.ts +21 -14
  314. package/src/engine-components/webxr/WebXRImageTracking.ts +2 -0
  315. package/src/needle-engine.ts +3 -0
  316. package/dist/needle-engine.bundle-BMlLSACE.umd.cjs +0 -1732
  317. package/dist/needle-engine.bundle-BXPPQRer.min.js +0 -1732
  318. package/lib/engine-components/AvatarLoader.d.ts +0 -80
  319. package/lib/engine-components/AvatarLoader.js +0 -232
  320. package/lib/engine-components/AvatarLoader.js.map +0 -1
  321. package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +0 -11
  322. package/lib/engine-components/avatar/AvatarBlink_Simple.js +0 -77
  323. package/lib/engine-components/avatar/AvatarBlink_Simple.js.map +0 -1
  324. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +0 -14
  325. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +0 -69
  326. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js.map +0 -1
  327. package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +0 -29
  328. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +0 -122
  329. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js.map +0 -1
  330. package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +0 -15
  331. package/lib/engine-components/avatar/Avatar_MouthShapes.js +0 -80
  332. package/lib/engine-components/avatar/Avatar_MouthShapes.js.map +0 -1
  333. package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +0 -9
  334. package/lib/engine-components/avatar/Avatar_MustacheShake.js +0 -30
  335. package/lib/engine-components/avatar/Avatar_MustacheShake.js.map +0 -1
  336. package/src/engine-components/AvatarLoader.ts +0 -264
  337. package/src/engine-components/avatar/AvatarBlink_Simple.ts +0 -70
  338. package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +0 -64
  339. package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +0 -140
  340. package/src/engine-components/avatar/Avatar_MouthShapes.ts +0 -84
  341. package/src/engine-components/avatar/Avatar_MustacheShake.ts +0 -32
@@ -0,0 +1,305 @@
1
+ import { AnimationClip, BooleanKeyframeTrack, Color, ColorKeyframeTrack, Euler, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, NumberKeyframeTrack, Object3D, Quaternion, QuaternionKeyframeTrack, Vector3, VectorKeyframeTrack } from "three";
2
+ import { isDevEnvironment } from "../engine/debug/index.js";
3
+ // --- Implementation ---
4
+ /**
5
+ * Creates an animation track descriptor targeting a property on the given object.
6
+ *
7
+ * The `target` is used for **TypeScript type inference** — it determines which property names
8
+ * are offered and what value types the keyframes accept. By default, the resulting track
9
+ * targets "self" (the mixer root). Pass `{ root }` to target a named child instead.
10
+ *
11
+ * @param target - The object whose type determines valid properties and value types
12
+ * @param property - The property to animate (e.g. `"position"`, `"opacity"`, `"intensity"`)
13
+ * @param keyframes - An array of {@link AnimationKeyframe} objects, or a {@link Tween} shorthand
14
+ * @param options - Optional {@link TrackOptions} with a `root` for named targeting
15
+ * @returns A {@link TrackDescriptor} that can be passed to {@link createAnimation}, or inline
16
+ * to `AnimatorControllerBuilder.state()` or `TimelineBuilder.clip()`
17
+ *
18
+ * @example Keyframe array
19
+ * ```ts
20
+ * track(door, "position", [
21
+ * { time: 0, value: [0, 0, 0] },
22
+ * { time: 1, value: [2, 0, 0] },
23
+ * ])
24
+ * ```
25
+ *
26
+ * @example Tween shorthand
27
+ * ```ts
28
+ * track(door, "position", { from: [0, 0, 0], to: [2, 0, 0], duration: 1 })
29
+ * ```
30
+ *
31
+ * @example Named targeting (track targets a child of root)
32
+ * ```ts
33
+ * track(door, "position", keyframes, { root: room })
34
+ * ```
35
+ *
36
+ * @category Animation and Sequencing
37
+ * @group Utilities
38
+ */
39
+ export function track(target, property, keyframes, options) {
40
+ const kf = isTween(keyframes) ? tweenToKeyframes(keyframes) : keyframes;
41
+ return {
42
+ __isTrackDescriptor: true,
43
+ _target: target,
44
+ _property: property,
45
+ _keyframes: kf.map(k => ({ ...k, value: snapshotValue(k.value) })),
46
+ _root: options?.root,
47
+ };
48
+ }
49
+ /** @internal alias so the AnimationBuilder class method can call the standalone function */
50
+ const trackFn = track;
51
+ // ============================================================
52
+ // AnimationBuilder
53
+ // ============================================================
54
+ /**
55
+ * A fluent builder for creating `AnimationClip` instances from code.
56
+ *
57
+ * Use {@link AnimationBuilder.create} to start a new builder, chain `.track()` calls
58
+ * to add animation tracks, and call `.build()` to produce the clip.
59
+ *
60
+ * @example Single track
61
+ * ```ts
62
+ * const clip = AnimationBuilder.create()
63
+ * .track(door, "position", { from: [0,0,0], to: [2,0,0], duration: 1 })
64
+ * .build();
65
+ * ```
66
+ *
67
+ * @example Multiple tracks
68
+ * ```ts
69
+ * const clip = AnimationBuilder.create("DoorOpen")
70
+ * .track(door, "position", { from: [0,0,0], to: [2,0,0], duration: 1 })
71
+ * .track(light, "intensity", { from: 0, to: 5, duration: 1 })
72
+ * .build(room);
73
+ * ```
74
+ *
75
+ * @category Animation and Sequencing
76
+ * @group Utilities
77
+ */
78
+ export class AnimationBuilder {
79
+ _name;
80
+ _tracks = [];
81
+ /** Creates a new AnimationBuilder instance */
82
+ static create(name) {
83
+ return new AnimationBuilder(name);
84
+ }
85
+ constructor(name) {
86
+ this._name = name;
87
+ }
88
+ track(target, property, keyframes, options) {
89
+ this._tracks.push(trackFn(target, property, keyframes, options));
90
+ return this;
91
+ }
92
+ /**
93
+ * Builds and returns the `AnimationClip`.
94
+ * @param root - Optional root Object3D for resolving track paths.
95
+ * When provided, tracks targeting a different object use `target.name` for named resolution.
96
+ */
97
+ build(root) {
98
+ return resolveToClip(this._tracks, root, this._name);
99
+ }
100
+ }
101
+ export function createAnimation(...args) {
102
+ let options;
103
+ let descriptors;
104
+ if (args.length > 0 && !isTrackDescriptor(args[0])) {
105
+ options = args[0];
106
+ descriptors = args.slice(1);
107
+ }
108
+ else {
109
+ descriptors = args;
110
+ }
111
+ return resolveToClip(descriptors, options?.root, options?.name);
112
+ }
113
+ // ============================================================
114
+ // Resolution helpers (exported for use by AnimatorControllerBuilder / TimelineBuilder)
115
+ // ============================================================
116
+ /**
117
+ * Resolves a clip source (AnimationClip, TrackDescriptor, or TrackDescriptor[]) into an AnimationClip.
118
+ * Used internally by AnimatorControllerBuilder and TimelineBuilder.
119
+ * @internal
120
+ */
121
+ export function resolveClipSource(clip, root) {
122
+ if (clip instanceof AnimationClip)
123
+ return clip;
124
+ if (Array.isArray(clip))
125
+ return resolveToClip(clip, root);
126
+ if (isTrackDescriptor(clip))
127
+ return resolveToClip([clip], root);
128
+ return clip; // should not reach
129
+ }
130
+ /** Type guard for {@link TrackDescriptor} */
131
+ export function isTrackDescriptor(obj) {
132
+ return obj != null && typeof obj === "object" && obj.__isTrackDescriptor === true;
133
+ }
134
+ /** Resolves an array of TrackDescriptors into an AnimationClip. @internal */
135
+ export function resolveToClip(descriptors, buildRoot, name) {
136
+ const keyframeTracks = [];
137
+ for (const desc of descriptors) {
138
+ keyframeTracks.push(buildKeyframeTrack(desc, buildRoot));
139
+ }
140
+ let duration = 0;
141
+ for (const t of keyframeTracks) {
142
+ const last = t.times[t.times.length - 1];
143
+ if (last !== undefined && last > duration)
144
+ duration = last;
145
+ }
146
+ return new AnimationClip(name ?? `clip_${_clipCounter++}`, duration, keyframeTracks);
147
+ }
148
+ // ============================================================
149
+ // Internal helpers
150
+ // ============================================================
151
+ let _clipCounter = 0;
152
+ function buildKeyframeTrack(desc, buildRoot) {
153
+ const property = resolvePropertyName(desc._property);
154
+ const trackName = resolveTrackName(desc, buildRoot, property);
155
+ const times = [];
156
+ const values = [];
157
+ for (const kf of desc._keyframes) {
158
+ times.push(kf.time);
159
+ const flat = flattenValue(kf.value, desc._property);
160
+ for (let i = 0; i < flat.length; i++)
161
+ values.push(flat[i]);
162
+ }
163
+ const interpolation = resolveInterpolation(desc._keyframes[0]?.interpolation);
164
+ const TrackClass = resolveTrackClass(desc._property, desc._keyframes[0]?.value);
165
+ return new TrackClass(trackName, times, values, interpolation);
166
+ }
167
+ function resolveTrackName(desc, buildRoot, resolvedProperty) {
168
+ const root = desc._root ?? buildRoot;
169
+ const property = resolvedProperty ?? resolvePropertyName(desc._property);
170
+ // Material target → always self-targeting with .material. prefix
171
+ if (isMaterial(desc._target)) {
172
+ return `.material.${property}`;
173
+ }
174
+ // No root → self-targeting
175
+ if (!root)
176
+ return `.${property}`;
177
+ // Root === target → self-targeting
178
+ if (root === desc._target)
179
+ return `.${property}`;
180
+ // Root !== target → named targeting
181
+ const target = desc._target;
182
+ const nodeName = target.name;
183
+ if (!nodeName) {
184
+ if (isDevEnvironment()) {
185
+ console.warn(`AnimationBuilder: target has no name, falling back to self-targeting. Set target.name for named targeting.`);
186
+ }
187
+ return `.${property}`;
188
+ }
189
+ // Dev mode: validate that target is actually a descendant of root
190
+ if (isDevEnvironment() && root instanceof Object3D && target instanceof Object3D) {
191
+ let found = false;
192
+ root.traverse(child => {
193
+ if (child === target)
194
+ found = true;
195
+ });
196
+ if (!found) {
197
+ console.warn(`AnimationBuilder: target "${nodeName}" is not a descendant of the provided root "${root.name}". The track may not resolve at play time.`);
198
+ }
199
+ }
200
+ return `${nodeName}.${property}`;
201
+ }
202
+ function resolvePropertyName(property) {
203
+ if (property === "rotation")
204
+ return "quaternion";
205
+ return property;
206
+ }
207
+ function resolveTrackClass(property, sampleValue) {
208
+ // Check property name first (most reliable)
209
+ if (property === "quaternion" || property === "rotation")
210
+ return QuaternionKeyframeTrack;
211
+ if (property === "visible")
212
+ return BooleanKeyframeTrack;
213
+ if (property === "position" || property === "scale")
214
+ return VectorKeyframeTrack;
215
+ if (property === "color" || property === "emissive")
216
+ return ColorKeyframeTrack;
217
+ // Check value type
218
+ if (sampleValue instanceof Vector3)
219
+ return VectorKeyframeTrack;
220
+ if (sampleValue instanceof Quaternion)
221
+ return QuaternionKeyframeTrack;
222
+ if (sampleValue instanceof Color)
223
+ return ColorKeyframeTrack;
224
+ if (sampleValue instanceof Euler)
225
+ return QuaternionKeyframeTrack;
226
+ if (typeof sampleValue === "boolean")
227
+ return BooleanKeyframeTrack;
228
+ if (typeof sampleValue === "number")
229
+ return NumberKeyframeTrack;
230
+ // Array → infer from length + property context
231
+ if (Array.isArray(sampleValue)) {
232
+ if (sampleValue.length === 4)
233
+ return QuaternionKeyframeTrack;
234
+ if (sampleValue.length === 3)
235
+ return VectorKeyframeTrack;
236
+ if (sampleValue.length === 2)
237
+ return VectorKeyframeTrack;
238
+ return NumberKeyframeTrack;
239
+ }
240
+ return NumberKeyframeTrack;
241
+ }
242
+ function flattenValue(value, property) {
243
+ // Tuple arrays — already flat
244
+ if (Array.isArray(value)) {
245
+ // Special case: Euler array [x,y,z] for "rotation" → convert to quaternion
246
+ if (property === "rotation" && value.length === 3) {
247
+ const q = new Quaternion().setFromEuler(new Euler(value[0], value[1], value[2]));
248
+ return [q.x, q.y, q.z, q.w];
249
+ }
250
+ return value;
251
+ }
252
+ if (typeof value === "number")
253
+ return [value];
254
+ if (typeof value === "boolean")
255
+ return [value ? 1 : 0];
256
+ if (value instanceof Vector3)
257
+ return [value.x, value.y, value.z];
258
+ if (value instanceof Quaternion)
259
+ return [value.x, value.y, value.z, value.w];
260
+ if (value instanceof Color)
261
+ return [value.r, value.g, value.b];
262
+ if (value instanceof Euler) {
263
+ const q = new Quaternion().setFromEuler(value);
264
+ return [q.x, q.y, q.z, q.w];
265
+ }
266
+ // duck-type Vector2/Vector3-like
267
+ if (typeof value === "object" && value !== null && "x" in value && "y" in value) {
268
+ if ("w" in value)
269
+ return [value.x, value.y, value.z, value.w];
270
+ if ("z" in value)
271
+ return [value.x, value.y, value.z];
272
+ return [value.x, value.y];
273
+ }
274
+ return [Number(value)];
275
+ }
276
+ function resolveInterpolation(mode) {
277
+ switch (mode) {
278
+ case "smooth": return InterpolateSmooth;
279
+ case "step": return InterpolateDiscrete;
280
+ default: return InterpolateLinear;
281
+ }
282
+ }
283
+ function isTween(kf) {
284
+ return kf != null && !Array.isArray(kf) && typeof kf === "object" && "from" in kf && "to" in kf;
285
+ }
286
+ function tweenToKeyframes(tween) {
287
+ return [
288
+ { time: 0, value: tween.from, interpolation: tween.interpolation },
289
+ { time: tween.duration ?? 1, value: tween.to, interpolation: tween.interpolation },
290
+ ];
291
+ }
292
+ /** Snapshot a keyframe value so live references (e.g. `obj.position`) are captured at definition time */
293
+ function snapshotValue(value) {
294
+ if (value == null || typeof value !== "object")
295
+ return value; // primitives are fine
296
+ if (typeof value.clone === "function")
297
+ return value.clone(); // Vector3, Quaternion, Color, Euler, etc.
298
+ if (Array.isArray(value))
299
+ return value.slice(); // tuple arrays
300
+ return value;
301
+ }
302
+ function isMaterial(obj) {
303
+ return obj != null && typeof obj === "object" && obj.isMaterial === true;
304
+ }
305
+ //# sourceMappingURL=AnimationBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationBuilder.js","sourceRoot":"","sources":["../../src/engine-components/AnimationBuilder.ts"],"names":[],"mappings":"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"}
@@ -75,6 +75,12 @@ export declare class Animator extends Behaviour implements IAnimationComponent {
75
75
  * Identifies this component as an animation component in the engine
76
76
  */
77
77
  get isAnimationComponent(): boolean;
78
+ /**
79
+ * The current animator mixer, used for low-level control of animations. Owned by the AnimatorController
80
+ * @returns The current AnimationMixer, or null if no controller is assigned
81
+ * @see AnimatorController.mixer
82
+ */
83
+ get mixer(): AnimationMixer | null;
78
84
  /**
79
85
  * When enabled, animation will affect the root transform position and rotation
80
86
  */
@@ -60,6 +60,14 @@ export class Animator extends Behaviour {
60
60
  get isAnimationComponent() {
61
61
  return true;
62
62
  }
63
+ /**
64
+ * The current animator mixer, used for low-level control of animations. Owned by the AnimatorController
65
+ * @returns The current AnimationMixer, or null if no controller is assigned
66
+ * @see AnimatorController.mixer
67
+ */
68
+ get mixer() {
69
+ return this._animatorController?.mixer || null;
70
+ }
63
71
  /**
64
72
  * When enabled, animation will affect the root transform position and rotation
65
73
  */
@@ -83,6 +91,10 @@ export class Animator extends Behaviour {
83
91
  if (this._animatorController && this._animatorController.model === val) {
84
92
  return;
85
93
  }
94
+ // Dispose the previous controller to stop its mixer and unregister it
95
+ if (this._animatorController) {
96
+ this._animatorController.dispose();
97
+ }
86
98
  if (val) {
87
99
  if (!(val instanceof AnimatorController)) {
88
100
  if (debug)
@@ -100,7 +112,8 @@ export class Animator extends Behaviour {
100
112
  val = new AnimatorController(val.model);
101
113
  }
102
114
  this._animatorController = val;
103
- this._animatorController.bind(this);
115
+ if (this.__didAwake)
116
+ this._animatorController.bind(this);
104
117
  }
105
118
  }
106
119
  else
@@ -346,18 +359,15 @@ export class Animator extends Behaviour {
346
359
  initializeRuntimeAnimatorController(force = false) {
347
360
  const shouldRun = (force || this.runtimeAnimatorController !== this._initializeWithRuntimeAnimatorController);
348
361
  if (this.runtimeAnimatorController && shouldRun) {
349
- const clone = this.runtimeAnimatorController.clone();
350
- this._initializeWithRuntimeAnimatorController = clone;
351
- if (clone) {
352
- console.assert(this.runtimeAnimatorController !== clone);
353
- this.runtimeAnimatorController = clone;
354
- console.assert(this.runtimeAnimatorController === clone);
355
- this.runtimeAnimatorController.bind(this);
356
- this.runtimeAnimatorController.setSpeed(this._speed);
357
- this.runtimeAnimatorController.normalizedStartOffset = this._normalizedStartOffset;
358
- }
359
- else
360
- console.warn("Could not clone animator controller", this.runtimeAnimatorController);
362
+ // Create a fresh controller from the (possibly remapped) model.
363
+ // The constructor deep-clones the model, preserving Object3D refs that
364
+ // the resolve system has already remapped to cloned objects.
365
+ const controller = new AnimatorController(this.runtimeAnimatorController.model);
366
+ this.runtimeAnimatorController = controller;
367
+ this._initializeWithRuntimeAnimatorController = controller;
368
+ controller.bind(this);
369
+ controller.setSpeed(this._speed);
370
+ controller.normalizedStartOffset = this._normalizedStartOffset;
361
371
  }
362
372
  }
363
373
  onDisable() {
@@ -1 +1 @@
1
- {"version":3,"file":"Animator.js","sourceRoot":"","sources":["../../src/engine-components/Animator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Animator.js","sourceRoot":"","sources":["../../src/engine-components/Animator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,191 @@
1
+ import { AnimationClip, Object3D } from "three";
2
+ import type { Light, Material, PerspectiveCamera } from "three";
3
+ import { AnimatorController } from "./AnimatorController.js";
4
+ import { type TrackDescriptor, type TrackOptions, type AnimationKeyframe, type Tween, type Vec3Value, type QuatValue, type EulerValue, type ColorValue } from "./AnimationBuilder.js";
5
+ /** Keyframe array or tween shorthand */
6
+ type KF<V> = AnimationKeyframe<V>[] | Tween<V>;
7
+ /** Extracts parameter names of a given type from the builder's tracked parameter map */
8
+ type ParamNamesOfType<TParams, PType extends string> = {
9
+ [K in keyof TParams & string]: TParams[K] extends PType ? K : never;
10
+ }[keyof TParams & string];
11
+ /**
12
+ * Configuration for an animation state in the builder
13
+ */
14
+ export declare type StateOptions = {
15
+ /**
16
+ * The animation clip for this state. Accepts:
17
+ * - A pre-built `AnimationClip`
18
+ * - A single {@link TrackDescriptor} from {@link track}
19
+ * - An array of {@link TrackDescriptor}s (multiple tracks combined into one clip)
20
+ *
21
+ * When omitted, use {@link AnimatorControllerBuilder.track .track()} to define animation tracks inline.
22
+ */
23
+ clip?: AnimationClip | TrackDescriptor | TrackDescriptor[];
24
+ /** Whether the animation should loop (default: false) */
25
+ loop?: boolean;
26
+ /** Base speed multiplier (default: 1) */
27
+ speed?: number;
28
+ /** Name of a float parameter to multiply with speed */
29
+ speedParameter?: string;
30
+ /** Normalized cycle offset 0-1 (default: 0) */
31
+ cycleOffset?: number;
32
+ /** Name of a float parameter to use as cycle offset */
33
+ cycleOffsetParameter?: string;
34
+ };
35
+ /**
36
+ * Configuration for a transition in the builder
37
+ */
38
+ export declare type TransitionOptions = {
39
+ /** Duration of the crossfade in seconds (default: 0) */
40
+ duration?: number;
41
+ /** Normalized exit time 0-1. When set, the transition waits until the source animation reaches this point before transitioning. */
42
+ exitTime?: number;
43
+ /** Normalized offset into the destination state's animation (default: 0) */
44
+ offset?: number;
45
+ /** Whether duration is in seconds (true) or normalized (false) (default: false) */
46
+ hasFixedDuration?: boolean;
47
+ };
48
+ /** String condition modes for the builder, mapped to {@link AnimatorConditionMode} */
49
+ export type ConditionMode = "if" | "ifNot" | "greater" | "less" | "equals" | "notEqual";
50
+ /**
51
+ * A fluent builder for creating {@link AnimatorController} instances from code.
52
+ *
53
+ * Use {@link AnimatorControllerBuilder.create} or {@link AnimatorController.build} to create a new builder.
54
+ *
55
+ * The builder tracks state names and parameter types through the fluent chain,
56
+ * providing autocomplete for state names in `.transition()` and type-aware
57
+ * `.condition()` calls (e.g., trigger parameters don't require a mode argument).
58
+ *
59
+ * @example With pre-built AnimationClips
60
+ * ```ts
61
+ * const controller = AnimatorControllerBuilder.create("CharacterController")
62
+ * .floatParameter("Speed", 0)
63
+ * .triggerParameter("Jump")
64
+ * .state("Idle", { clip: idleClip, loop: true })
65
+ * .state("Walk", { clip: walkClip, loop: true })
66
+ * .state("Jump", { clip: jumpClip })
67
+ * .transition("Idle", "Walk", { duration: 0.25 })
68
+ * .condition("Speed", "greater", 0.1)
69
+ * .transition("Walk", "Idle", { duration: 0.25 })
70
+ * .condition("Speed", "less", 0.1)
71
+ * .transition("*", "Jump", { duration: 0.1 })
72
+ * .condition("Jump")
73
+ * .transition("Jump", "Idle", { hasExitTime: true, exitTime: 0.9, duration: 0.25 })
74
+ * .build();
75
+ * ```
76
+ *
77
+ * @example With inline tracks (no pre-built clips needed)
78
+ * ```ts
79
+ * const controller = AnimatorControllerBuilder.create("Door")
80
+ * .boolParameter("Open", false)
81
+ * .state("Closed", { loop: true })
82
+ * .track(door, "position", { from: [0, 0, 0], to: [0, 0, 0], duration: 1 })
83
+ * .state("Open", { loop: true })
84
+ * .track(door, "position", { from: [0, 0, 0], to: [2, 0, 0], duration: 1 })
85
+ * .track(light, "intensity", { from: 0, to: 5, duration: 1 })
86
+ * .transition("Closed", "Open", { duration: 0.25 })
87
+ * .condition("Open", "if")
88
+ * .transition("Open", "Closed", { duration: 0.25 })
89
+ * .condition("Open", "ifNot")
90
+ * .build(room);
91
+ * ```
92
+ *
93
+ * @typeParam TStates - Union of state names added via `.state()`. Used for autocomplete and validation in `.transition()` and `.defaultState()`.
94
+ * @typeParam TParams - Record mapping parameter names to their types (`"trigger"`, `"bool"`, `"float"`, `"int"`). Used for type-aware `.condition()` overloads.
95
+ *
96
+ * @category Animation and Sequencing
97
+ * @group Utilities
98
+ */
99
+ export declare class AnimatorControllerBuilder<TStates extends string = never, TParams extends Record<string, "trigger" | "bool" | "float" | "int"> = {}> {
100
+ private _name;
101
+ private _parameters;
102
+ private _states;
103
+ private _anyStateTransitions;
104
+ private _defaultStateName;
105
+ private _lastTransition;
106
+ private _lastState;
107
+ /**
108
+ * Creates a new AnimatorControllerBuilder instance.
109
+ * @param name - Optional name for the controller
110
+ */
111
+ static create(name?: string): AnimatorControllerBuilder;
112
+ constructor(name?: string);
113
+ /** Adds a float parameter */
114
+ floatParameter<N extends string>(name: N, defaultValue?: number): AnimatorControllerBuilder<TStates, TParams & Record<N, "float">>;
115
+ /** Adds an integer parameter */
116
+ intParameter<N extends string>(name: N, defaultValue?: number): AnimatorControllerBuilder<TStates, TParams & Record<N, "int">>;
117
+ /** Adds a boolean parameter */
118
+ boolParameter<N extends string>(name: N, defaultValue?: boolean): AnimatorControllerBuilder<TStates, TParams & Record<N, "bool">>;
119
+ /** Adds a trigger parameter */
120
+ triggerParameter<N extends string>(name: N): AnimatorControllerBuilder<TStates, TParams & Record<N, "trigger">>;
121
+ /**
122
+ * Adds a state to the controller. The first state added becomes the default state.
123
+ *
124
+ * When `options.clip` is provided, the state uses that clip directly.
125
+ * When omitted, chain `.track()` calls to define animation tracks inline:
126
+ * ```ts
127
+ * .state("Open", { loop: true })
128
+ * .track(door, "position", { from: [0,0,0], to: [2,0,0], duration: 1 })
129
+ * .track(light, "intensity", { from: 0, to: 5, duration: 1 })
130
+ * ```
131
+ *
132
+ * @param name - Unique name for the state
133
+ * @param options - State configuration including clip, loop, speed. When omitted, use `.track()` to add animation data.
134
+ */
135
+ state<N extends string>(name: N, options?: StateOptions): AnimatorControllerBuilder<TStates | N, TParams>;
136
+ /**
137
+ * Adds a transition between two states.
138
+ * Use `"*"` as the source to create a transition from any state.
139
+ * Chain `.condition()` calls after this to add conditions.
140
+ * @param from - Source state name, or `"*"` for any-state transition
141
+ * @param to - Destination state name
142
+ * @param options - Transition configuration
143
+ */
144
+ transition(from: TStates | "*", to: TStates, options?: TransitionOptions): AnimatorControllerBuilder<TStates, TParams>;
145
+ /**
146
+ * Adds a condition to the most recently added transition.
147
+ * Multiple conditions on the same transition are AND-ed together.
148
+ *
149
+ * The required arguments depend on the parameter type:
150
+ * - **Trigger**: `.condition("Jump")` — mode defaults to `"if"`, no threshold needed
151
+ * - **Bool**: `.condition("Open", "if")` or `.condition("Open", "ifNot")`
152
+ * - **Float/Int**: `.condition("Speed", "greater", 0.1)`
153
+ *
154
+ * @param parameter - Name of the parameter to evaluate
155
+ */
156
+ condition(parameter: ParamNamesOfType<TParams, "trigger">, mode?: "if" | "ifNot"): AnimatorControllerBuilder<TStates, TParams>;
157
+ condition(parameter: ParamNamesOfType<TParams, "bool">, mode: "if" | "ifNot"): AnimatorControllerBuilder<TStates, TParams>;
158
+ condition(parameter: ParamNamesOfType<TParams, "float" | "int">, mode: "greater" | "less" | "equals" | "notEqual", threshold?: number): AnimatorControllerBuilder<TStates, TParams>;
159
+ /** Adds an animation track for an Object3D's position or scale to the current state */
160
+ track(target: Object3D, property: "position" | "scale", keyframes: KF<Vec3Value>, options?: TrackOptions): this;
161
+ /** Adds an animation track for an Object3D's quaternion to the current state */
162
+ track(target: Object3D, property: "quaternion", keyframes: KF<QuatValue>, options?: TrackOptions): this;
163
+ /** Adds an animation track for an Object3D's rotation (Euler, converted to quaternion) to the current state */
164
+ track(target: Object3D, property: "rotation", keyframes: KF<EulerValue>, options?: TrackOptions): this;
165
+ /** Adds an animation track for an Object3D's visibility to the current state */
166
+ track(target: Object3D, property: "visible", keyframes: KF<boolean>, options?: TrackOptions): this;
167
+ /** Adds an animation track for a material's numeric property to the current state */
168
+ track(target: Material, property: "opacity" | "roughness" | "metalness" | "alphaTest" | "emissiveIntensity" | "envMapIntensity" | "bumpScale" | "displacementScale" | "displacementBias", keyframes: KF<number>, options?: TrackOptions): this;
169
+ /** Adds an animation track for a material's color property to the current state */
170
+ track(target: Material, property: "color" | "emissive", keyframes: KF<ColorValue>, options?: TrackOptions): this;
171
+ /** Adds an animation track for a light's numeric property to the current state */
172
+ track(target: Light, property: "intensity" | "distance" | "angle" | "penumbra" | "decay", keyframes: KF<number>, options?: TrackOptions): this;
173
+ /** Adds an animation track for a light's color to the current state */
174
+ track(target: Light, property: "color", keyframes: KF<ColorValue>, options?: TrackOptions): this;
175
+ /** Adds an animation track for a camera's numeric property to the current state */
176
+ track(target: PerspectiveCamera, property: "fov" | "near" | "far" | "zoom", keyframes: KF<number>, options?: TrackOptions): this;
177
+ /**
178
+ * Sets which state is the default/entry state.
179
+ * If not called, the first added state is used.
180
+ * @param name - Name of the state
181
+ */
182
+ defaultState(name: TStates): AnimatorControllerBuilder<TStates, TParams>;
183
+ /**
184
+ * Builds and returns the {@link AnimatorController}.
185
+ * Resolves all state name references to indices.
186
+ * @param root - Optional root Object3D for resolving {@link TrackDescriptor} track paths.
187
+ * When provided, tracks targeting a different object use `target.name` for named resolution.
188
+ */
189
+ build(root?: Object3D): AnimatorController;
190
+ }
191
+ export {};