@vgai/engine 0.5.0 → 0.5.2

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 (538) hide show
  1. package/package.json +1 -1
  2. package/schemas/engine-capabilities.json +4 -4
  3. package/schemas/vgai-game.schema.json +2 -2
  4. package/src/adapter/authoring.ts +42 -0
  5. package/src/adapter/index.ts +3 -0
  6. package/src/adapter/ingest/overlay-apply.ts +50 -6
  7. package/src/adapter/ingest/scene-capture.ts +51 -2
  8. package/src/adapter/vgai-scene-game-adapter.ts +24 -0
  9. package/src/manifest/schema.ts +7 -3
  10. package/src/runtime/create-runtime.ts +97 -0
  11. package/src/runtime/game.ts +11 -1
  12. package/src/scene/asset-ref-check.ts +1 -1
  13. package/src/scene/scene-loader.ts +2 -2
  14. package/src/scene/user-data.ts +18 -0
  15. package/src/world3d-react/behavior.tsx +19 -11
  16. package/src/world3d-react/r3f-adapter.tsx +8 -0
  17. package/dist/adapter/adapter-surface.d.ts +0 -30
  18. package/dist/adapter/adapter-surface.d.ts.map +0 -1
  19. package/dist/adapter/adapter-surface.js +0 -18
  20. package/dist/adapter/authoring.d.ts +0 -461
  21. package/dist/adapter/authoring.d.ts.map +0 -1
  22. package/dist/adapter/authoring.js +0 -22
  23. package/dist/adapter/colyseus-networking-adapter.d.ts +0 -43
  24. package/dist/adapter/colyseus-networking-adapter.d.ts.map +0 -1
  25. package/dist/adapter/colyseus-networking-adapter.js +0 -38
  26. package/dist/adapter/first-party-systems.d.ts +0 -38
  27. package/dist/adapter/first-party-systems.d.ts.map +0 -1
  28. package/dist/adapter/first-party-systems.js +0 -77
  29. package/dist/adapter/game-adapter.d.ts +0 -133
  30. package/dist/adapter/game-adapter.d.ts.map +0 -1
  31. package/dist/adapter/game-adapter.js +0 -10
  32. package/dist/adapter/host-context.d.ts +0 -71
  33. package/dist/adapter/host-context.d.ts.map +0 -1
  34. package/dist/adapter/host-context.js +0 -16
  35. package/dist/adapter/index.d.ts +0 -22
  36. package/dist/adapter/index.d.ts.map +0 -1
  37. package/dist/adapter/index.js +0 -15
  38. package/dist/adapter/ingest/game-contract.d.ts +0 -53
  39. package/dist/adapter/ingest/game-contract.d.ts.map +0 -1
  40. package/dist/adapter/ingest/game-contract.js +0 -30
  41. package/dist/adapter/ingest/overlay-applier.d.ts +0 -118
  42. package/dist/adapter/ingest/overlay-applier.d.ts.map +0 -1
  43. package/dist/adapter/ingest/overlay-applier.js +0 -132
  44. package/dist/adapter/ingest/overlay-apply.d.ts +0 -60
  45. package/dist/adapter/ingest/overlay-apply.d.ts.map +0 -1
  46. package/dist/adapter/ingest/overlay-apply.js +0 -101
  47. package/dist/adapter/ingest/overlay-file.d.ts +0 -79
  48. package/dist/adapter/ingest/overlay-file.d.ts.map +0 -1
  49. package/dist/adapter/ingest/overlay-file.js +0 -66
  50. package/dist/adapter/ingest/overlay-report.d.ts +0 -113
  51. package/dist/adapter/ingest/overlay-report.d.ts.map +0 -1
  52. package/dist/adapter/ingest/overlay-report.js +0 -103
  53. package/dist/adapter/ingest/scene-capture.d.ts +0 -97
  54. package/dist/adapter/ingest/scene-capture.d.ts.map +0 -1
  55. package/dist/adapter/ingest/scene-capture.js +0 -248
  56. package/dist/adapter/ingest/upstream-pin.d.ts +0 -47
  57. package/dist/adapter/ingest/upstream-pin.d.ts.map +0 -1
  58. package/dist/adapter/ingest/upstream-pin.js +0 -50
  59. package/dist/adapter/loop-gate-report.d.ts +0 -34
  60. package/dist/adapter/loop-gate-report.d.ts.map +0 -1
  61. package/dist/adapter/loop-gate-report.js +0 -37
  62. package/dist/adapter/rapier-physics-adapter.d.ts +0 -12
  63. package/dist/adapter/rapier-physics-adapter.d.ts.map +0 -1
  64. package/dist/adapter/rapier-physics-adapter.js +0 -46
  65. package/dist/adapter/system-adapter.d.ts +0 -206
  66. package/dist/adapter/system-adapter.d.ts.map +0 -1
  67. package/dist/adapter/system-adapter.js +0 -13
  68. package/dist/adapter/transform.d.ts +0 -18
  69. package/dist/adapter/transform.d.ts.map +0 -1
  70. package/dist/adapter/transform.js +0 -1
  71. package/dist/adapter/vgai-scene-game-adapter.d.ts +0 -108
  72. package/dist/adapter/vgai-scene-game-adapter.d.ts.map +0 -1
  73. package/dist/adapter/vgai-scene-game-adapter.js +0 -762
  74. package/dist/ai/navigation.d.ts +0 -64
  75. package/dist/ai/navigation.d.ts.map +0 -1
  76. package/dist/ai/navigation.js +0 -133
  77. package/dist/animation/anim-graph-types.d.ts +0 -25
  78. package/dist/animation/anim-graph-types.d.ts.map +0 -1
  79. package/dist/animation/anim-graph-types.js +0 -1
  80. package/dist/animation/animation-clock.d.ts +0 -213
  81. package/dist/animation/animation-clock.d.ts.map +0 -1
  82. package/dist/animation/animation-clock.js +0 -301
  83. package/dist/animation/blend-node.d.ts +0 -22
  84. package/dist/animation/blend-node.d.ts.map +0 -1
  85. package/dist/animation/blend-node.js +0 -97
  86. package/dist/animation/camera-ownership.d.ts +0 -250
  87. package/dist/animation/camera-ownership.d.ts.map +0 -1
  88. package/dist/animation/camera-ownership.js +0 -169
  89. package/dist/animation/cinematic-cues.d.ts +0 -200
  90. package/dist/animation/cinematic-cues.d.ts.map +0 -1
  91. package/dist/animation/cinematic-cues.js +0 -213
  92. package/dist/animation/clip-map.d.ts +0 -12
  93. package/dist/animation/clip-map.d.ts.map +0 -1
  94. package/dist/animation/clip-map.js +0 -37
  95. package/dist/animation/gsap-registration.d.ts +0 -119
  96. package/dist/animation/gsap-registration.d.ts.map +0 -1
  97. package/dist/animation/gsap-registration.js +0 -92
  98. package/dist/animation/theatre-clock-binding.d.ts +0 -89
  99. package/dist/animation/theatre-clock-binding.d.ts.map +0 -1
  100. package/dist/animation/theatre-clock-binding.js +0 -29
  101. package/dist/animation/theatre-director.d.ts +0 -242
  102. package/dist/animation/theatre-director.d.ts.map +0 -1
  103. package/dist/animation/theatre-director.js +0 -235
  104. package/dist/animation/theatre-object-binding.d.ts +0 -305
  105. package/dist/animation/theatre-object-binding.d.ts.map +0 -1
  106. package/dist/animation/theatre-object-binding.js +0 -351
  107. package/dist/animation/xstate-animation-binding.d.ts +0 -56
  108. package/dist/animation/xstate-animation-binding.d.ts.map +0 -1
  109. package/dist/animation/xstate-animation-binding.js +0 -331
  110. package/dist/animation/xstate-animation-meta.d.ts +0 -266
  111. package/dist/animation/xstate-animation-meta.d.ts.map +0 -1
  112. package/dist/animation/xstate-animation-meta.js +0 -252
  113. package/dist/assets.d.ts +0 -26
  114. package/dist/assets.d.ts.map +0 -1
  115. package/dist/assets.js +0 -55
  116. package/dist/audio/index.d.ts +0 -4
  117. package/dist/audio/index.d.ts.map +0 -1
  118. package/dist/audio/index.js +0 -24
  119. package/dist/audio/tone-clock-binding.d.ts +0 -75
  120. package/dist/audio/tone-clock-binding.d.ts.map +0 -1
  121. package/dist/audio/tone-clock-binding.js +0 -29
  122. package/dist/audio/tone-context.d.ts +0 -114
  123. package/dist/audio/tone-context.d.ts.map +0 -1
  124. package/dist/audio/tone-context.js +0 -39
  125. package/dist/audio/tone-offline-render.d.ts +0 -90
  126. package/dist/audio/tone-offline-render.d.ts.map +0 -1
  127. package/dist/audio/tone-offline-render.js +0 -56
  128. package/dist/audio/wav-encode.d.ts +0 -38
  129. package/dist/audio/wav-encode.d.ts.map +0 -1
  130. package/dist/audio/wav-encode.js +0 -97
  131. package/dist/character/cloth-sim.d.ts +0 -179
  132. package/dist/character/cloth-sim.d.ts.map +0 -1
  133. package/dist/character/cloth-sim.js +0 -334
  134. package/dist/character/spring-chain.d.ts +0 -135
  135. package/dist/character/spring-chain.d.ts.map +0 -1
  136. package/dist/character/spring-chain.js +0 -165
  137. package/dist/core/game-loop.d.ts +0 -42
  138. package/dist/core/game-loop.d.ts.map +0 -1
  139. package/dist/core/game-loop.js +0 -167
  140. package/dist/core/seeded-random.d.ts +0 -69
  141. package/dist/core/seeded-random.d.ts.map +0 -1
  142. package/dist/core/seeded-random.js +0 -121
  143. package/dist/core/system-runner.d.ts +0 -120
  144. package/dist/core/system-runner.d.ts.map +0 -1
  145. package/dist/core/system-runner.js +0 -297
  146. package/dist/core/types.d.ts +0 -92
  147. package/dist/core/types.d.ts.map +0 -1
  148. package/dist/core/types.js +0 -25
  149. package/dist/data/data-asset.d.ts +0 -101
  150. package/dist/data/data-asset.d.ts.map +0 -1
  151. package/dist/data/data-asset.js +0 -122
  152. package/dist/data/data-check-core.d.ts +0 -110
  153. package/dist/data/data-check-core.d.ts.map +0 -1
  154. package/dist/data/data-check-core.js +0 -178
  155. package/dist/data/data-ref.d.ts +0 -79
  156. package/dist/data/data-ref.d.ts.map +0 -1
  157. package/dist/data/data-ref.js +0 -130
  158. package/dist/data/vite-plugin-data.d.ts +0 -79
  159. package/dist/data/vite-plugin-data.d.ts.map +0 -1
  160. package/dist/data/vite-plugin-data.js +0 -217
  161. package/dist/dev/console-bridge.d.ts +0 -22
  162. package/dist/dev/console-bridge.d.ts.map +0 -1
  163. package/dist/dev/console-bridge.js +0 -71
  164. package/dist/dev/debug-draw.d.ts +0 -24
  165. package/dist/dev/debug-draw.d.ts.map +0 -1
  166. package/dist/dev/debug-draw.js +0 -73
  167. package/dist/dev/logger.d.ts +0 -30
  168. package/dist/dev/logger.d.ts.map +0 -1
  169. package/dist/dev/logger.js +0 -90
  170. package/dist/dev/performance-profiler.d.ts +0 -60
  171. package/dist/dev/performance-profiler.d.ts.map +0 -1
  172. package/dist/dev/performance-profiler.js +0 -181
  173. package/dist/dev/webgl-gpu-timer.d.ts +0 -8
  174. package/dist/dev/webgl-gpu-timer.d.ts.map +0 -1
  175. package/dist/dev/webgl-gpu-timer.js +0 -52
  176. package/dist/ecs/component-manager.d.ts +0 -205
  177. package/dist/ecs/component-manager.d.ts.map +0 -1
  178. package/dist/ecs/component-manager.js +0 -706
  179. package/dist/ecs/game-component.d.ts +0 -146
  180. package/dist/ecs/game-component.d.ts.map +0 -1
  181. package/dist/ecs/game-component.js +0 -141
  182. package/dist/ecs/hmr-swap-report.d.ts +0 -53
  183. package/dist/ecs/hmr-swap-report.d.ts.map +0 -1
  184. package/dist/ecs/hmr-swap-report.js +0 -55
  185. package/dist/humanoid/bake.operation.d.ts +0 -119
  186. package/dist/humanoid/bake.operation.d.ts.map +0 -1
  187. package/dist/humanoid/bake.operation.js +0 -228
  188. package/dist/humanoid/body.d.ts +0 -101
  189. package/dist/humanoid/body.d.ts.map +0 -1
  190. package/dist/humanoid/body.js +0 -530
  191. package/dist/humanoid/clips.d.ts +0 -62
  192. package/dist/humanoid/clips.d.ts.map +0 -1
  193. package/dist/humanoid/clips.js +0 -121
  194. package/dist/humanoid/compose.d.ts +0 -75
  195. package/dist/humanoid/compose.d.ts.map +0 -1
  196. package/dist/humanoid/compose.js +0 -176
  197. package/dist/humanoid/generate.d.ts +0 -92
  198. package/dist/humanoid/generate.d.ts.map +0 -1
  199. package/dist/humanoid/generate.js +0 -124
  200. package/dist/humanoid/index.d.ts +0 -24
  201. package/dist/humanoid/index.d.ts.map +0 -1
  202. package/dist/humanoid/index.js +0 -18
  203. package/dist/humanoid/schema.d.ts +0 -35
  204. package/dist/humanoid/schema.d.ts.map +0 -1
  205. package/dist/humanoid/schema.js +0 -87
  206. package/dist/humanoid/skeleton.d.ts +0 -103
  207. package/dist/humanoid/skeleton.d.ts.map +0 -1
  208. package/dist/humanoid/skeleton.js +0 -289
  209. package/dist/index.d.ts +0 -37
  210. package/dist/index.d.ts.map +0 -1
  211. package/dist/index.js +0 -30
  212. package/dist/input/input-manager.d.ts +0 -945
  213. package/dist/input/input-manager.d.ts.map +0 -1
  214. package/dist/input/input-manager.js +0 -2207
  215. package/dist/input/input-types.d.ts +0 -174
  216. package/dist/input/input-types.d.ts.map +0 -1
  217. package/dist/input/input-types.js +0 -1
  218. package/dist/input/prompt-labels.d.ts +0 -21
  219. package/dist/input/prompt-labels.d.ts.map +0 -1
  220. package/dist/input/prompt-labels.js +0 -121
  221. package/dist/input/rebind-controller.d.ts +0 -59
  222. package/dist/input/rebind-controller.d.ts.map +0 -1
  223. package/dist/input/rebind-controller.js +0 -85
  224. package/dist/input/schema.d.ts +0 -16
  225. package/dist/input/schema.d.ts.map +0 -1
  226. package/dist/input/schema.js +0 -228
  227. package/dist/loader.d.ts +0 -43
  228. package/dist/loader.d.ts.map +0 -1
  229. package/dist/loader.js +0 -59
  230. package/dist/manifest/index.d.ts +0 -5
  231. package/dist/manifest/index.d.ts.map +0 -1
  232. package/dist/manifest/index.js +0 -8
  233. package/dist/manifest/load-file.d.ts +0 -4
  234. package/dist/manifest/load-file.d.ts.map +0 -1
  235. package/dist/manifest/load-file.js +0 -14
  236. package/dist/manifest/load.d.ts +0 -144
  237. package/dist/manifest/load.d.ts.map +0 -1
  238. package/dist/manifest/load.js +0 -273
  239. package/dist/manifest/schema.d.ts +0 -230
  240. package/dist/manifest/schema.d.ts.map +0 -1
  241. package/dist/manifest/schema.js +0 -394
  242. package/dist/physics/collision-system.d.ts +0 -41
  243. package/dist/physics/collision-system.d.ts.map +0 -1
  244. package/dist/physics/collision-system.js +0 -64
  245. package/dist/physics/physics-registry.d.ts +0 -45
  246. package/dist/physics/physics-registry.d.ts.map +0 -1
  247. package/dist/physics/physics-registry.js +0 -65
  248. package/dist/physics/transform-writer.d.ts +0 -16
  249. package/dist/physics/transform-writer.d.ts.map +0 -1
  250. package/dist/physics/transform-writer.js +0 -38
  251. package/dist/physics/trigger-dispatch.d.ts +0 -24
  252. package/dist/physics/trigger-dispatch.d.ts.map +0 -1
  253. package/dist/physics/trigger-dispatch.js +0 -80
  254. package/dist/react/game-state.d.ts +0 -156
  255. package/dist/react/game-state.d.ts.map +0 -1
  256. package/dist/react/game-state.js +0 -222
  257. package/dist/react/root-adapter.d.ts +0 -11
  258. package/dist/react/root-adapter.d.ts.map +0 -1
  259. package/dist/react/root-adapter.js +0 -41
  260. package/dist/react/unmanaged-root-detector.d.ts +0 -12
  261. package/dist/react/unmanaged-root-detector.d.ts.map +0 -1
  262. package/dist/react/unmanaged-root-detector.js +0 -45
  263. package/dist/react/use-data.d.ts +0 -60
  264. package/dist/react/use-data.d.ts.map +0 -1
  265. package/dist/react/use-data.js +0 -101
  266. package/dist/react/use-selection.d.ts +0 -75
  267. package/dist/react/use-selection.d.ts.map +0 -1
  268. package/dist/react/use-selection.js +0 -90
  269. package/dist/render/auto-batcher.d.ts +0 -34
  270. package/dist/render/auto-batcher.d.ts.map +0 -1
  271. package/dist/render/auto-batcher.js +0 -140
  272. package/dist/render/render-batch-system.d.ts +0 -33
  273. package/dist/render/render-batch-system.d.ts.map +0 -1
  274. package/dist/render/render-batch-system.js +0 -230
  275. package/dist/render/render-features.d.ts +0 -47
  276. package/dist/render/render-features.d.ts.map +0 -1
  277. package/dist/render/render-features.js +0 -105
  278. package/dist/render/render-settings.d.ts +0 -36
  279. package/dist/render/render-settings.d.ts.map +0 -1
  280. package/dist/render/render-settings.js +0 -51
  281. package/dist/runtime/create-runtime.d.ts +0 -249
  282. package/dist/runtime/create-runtime.d.ts.map +0 -1
  283. package/dist/runtime/create-runtime.js +0 -641
  284. package/dist/runtime/debug-bridge.d.ts +0 -257
  285. package/dist/runtime/debug-bridge.d.ts.map +0 -1
  286. package/dist/runtime/debug-bridge.js +0 -224
  287. package/dist/runtime/debug-registry.d.ts +0 -288
  288. package/dist/runtime/debug-registry.d.ts.map +0 -1
  289. package/dist/runtime/debug-registry.js +0 -513
  290. package/dist/runtime/frame-selector-cache.d.ts +0 -41
  291. package/dist/runtime/frame-selector-cache.d.ts.map +0 -1
  292. package/dist/runtime/frame-selector-cache.js +0 -65
  293. package/dist/runtime/game.d.ts +0 -496
  294. package/dist/runtime/game.d.ts.map +0 -1
  295. package/dist/runtime/game.js +0 -741
  296. package/dist/runtime/gameplay-rng-trap.d.ts +0 -48
  297. package/dist/runtime/gameplay-rng-trap.d.ts.map +0 -1
  298. package/dist/runtime/gameplay-rng-trap.js +0 -96
  299. package/dist/runtime/input-router.d.ts +0 -78
  300. package/dist/runtime/input-router.d.ts.map +0 -1
  301. package/dist/runtime/input-router.js +0 -171
  302. package/dist/runtime/mount-game.d.ts +0 -129
  303. package/dist/runtime/mount-game.d.ts.map +0 -1
  304. package/dist/runtime/mount-game.js +0 -152
  305. package/dist/runtime/mount-manifest.d.ts +0 -173
  306. package/dist/runtime/mount-manifest.d.ts.map +0 -1
  307. package/dist/runtime/mount-manifest.js +0 -297
  308. package/dist/runtime/render-audio-control.d.ts +0 -110
  309. package/dist/runtime/render-audio-control.d.ts.map +0 -1
  310. package/dist/runtime/render-audio-control.js +0 -111
  311. package/dist/runtime/render-control.d.ts +0 -291
  312. package/dist/runtime/render-control.d.ts.map +0 -1
  313. package/dist/runtime/render-control.js +0 -264
  314. package/dist/runtime/render-seed.d.ts +0 -57
  315. package/dist/runtime/render-seed.d.ts.map +0 -1
  316. package/dist/runtime/render-seed.js +0 -74
  317. package/dist/runtime/state-bridge.d.ts +0 -61
  318. package/dist/runtime/state-bridge.d.ts.map +0 -1
  319. package/dist/runtime/state-bridge.js +0 -63
  320. package/dist/runtime/types.d.ts +0 -253
  321. package/dist/runtime/types.d.ts.map +0 -1
  322. package/dist/runtime/types.js +0 -1
  323. package/dist/scene/asset-loaders.d.ts +0 -79
  324. package/dist/scene/asset-loaders.d.ts.map +0 -1
  325. package/dist/scene/asset-loaders.js +0 -141
  326. package/dist/scene/asset-paths.d.ts +0 -11
  327. package/dist/scene/asset-paths.d.ts.map +0 -1
  328. package/dist/scene/asset-paths.js +0 -108
  329. package/dist/scene/asset-ref-check.d.ts +0 -88
  330. package/dist/scene/asset-ref-check.d.ts.map +0 -1
  331. package/dist/scene/asset-ref-check.js +0 -214
  332. package/dist/scene/asset-registry.d.ts +0 -38
  333. package/dist/scene/asset-registry.d.ts.map +0 -1
  334. package/dist/scene/asset-registry.js +0 -66
  335. package/dist/scene/collider-dimensions.d.ts +0 -63
  336. package/dist/scene/collider-dimensions.d.ts.map +0 -1
  337. package/dist/scene/collider-dimensions.js +0 -98
  338. package/dist/scene/component-registry.d.ts +0 -22
  339. package/dist/scene/component-registry.d.ts.map +0 -1
  340. package/dist/scene/component-registry.js +0 -37
  341. package/dist/scene/defaults.d.ts +0 -252
  342. package/dist/scene/defaults.d.ts.map +0 -1
  343. package/dist/scene/defaults.js +0 -151
  344. package/dist/scene/geometries/index.d.ts +0 -8
  345. package/dist/scene/geometries/index.d.ts.map +0 -1
  346. package/dist/scene/geometries/index.js +0 -7
  347. package/dist/scene/geometries/terrain.d.ts +0 -2
  348. package/dist/scene/geometries/terrain.d.ts.map +0 -1
  349. package/dist/scene/geometries/terrain.js +0 -37
  350. package/dist/scene/geometry-registry.d.ts +0 -24
  351. package/dist/scene/geometry-registry.d.ts.map +0 -1
  352. package/dist/scene/geometry-registry.js +0 -20
  353. package/dist/scene/instance-registry.d.ts +0 -36
  354. package/dist/scene/instance-registry.d.ts.map +0 -1
  355. package/dist/scene/instance-registry.js +0 -55
  356. package/dist/scene/instancers/grid.d.ts +0 -2
  357. package/dist/scene/instancers/grid.d.ts.map +0 -1
  358. package/dist/scene/instancers/grid.js +0 -36
  359. package/dist/scene/instancers/index.d.ts +0 -8
  360. package/dist/scene/instancers/index.d.ts.map +0 -1
  361. package/dist/scene/instancers/index.js +0 -7
  362. package/dist/scene/light-camera-factory.d.ts +0 -23
  363. package/dist/scene/light-camera-factory.d.ts.map +0 -1
  364. package/dist/scene/light-camera-factory.js +0 -68
  365. package/dist/scene/material-factory.d.ts +0 -17
  366. package/dist/scene/material-factory.d.ts.map +0 -1
  367. package/dist/scene/material-factory.js +0 -197
  368. package/dist/scene/material-registry.d.ts +0 -40
  369. package/dist/scene/material-registry.d.ts.map +0 -1
  370. package/dist/scene/material-registry.js +0 -44
  371. package/dist/scene/materials/index.d.ts +0 -8
  372. package/dist/scene/materials/index.d.ts.map +0 -1
  373. package/dist/scene/materials/index.js +0 -7
  374. package/dist/scene/materials/water.d.ts +0 -2
  375. package/dist/scene/materials/water.d.ts.map +0 -1
  376. package/dist/scene/materials/water.js +0 -54
  377. package/dist/scene/parse.d.ts +0 -23
  378. package/dist/scene/parse.d.ts.map +0 -1
  379. package/dist/scene/parse.js +0 -179
  380. package/dist/scene/particles-factory.d.ts +0 -33
  381. package/dist/scene/particles-factory.d.ts.map +0 -1
  382. package/dist/scene/particles-factory.js +0 -282
  383. package/dist/scene/scene-apply.d.ts +0 -109
  384. package/dist/scene/scene-apply.d.ts.map +0 -1
  385. package/dist/scene/scene-apply.js +0 -370
  386. package/dist/scene/scene-diff-schema.d.ts +0 -285
  387. package/dist/scene/scene-diff-schema.d.ts.map +0 -1
  388. package/dist/scene/scene-diff-schema.js +0 -92
  389. package/dist/scene/scene-diff-types.d.ts +0 -40
  390. package/dist/scene/scene-diff-types.d.ts.map +0 -1
  391. package/dist/scene/scene-diff-types.js +0 -14
  392. package/dist/scene/scene-loader.d.ts +0 -167
  393. package/dist/scene/scene-loader.d.ts.map +0 -1
  394. package/dist/scene/scene-loader.js +0 -1211
  395. package/dist/scene/scene-query.d.ts +0 -11
  396. package/dist/scene/scene-query.d.ts.map +0 -1
  397. package/dist/scene/scene-query.js +0 -63
  398. package/dist/scene/scene-types.d.ts +0 -10
  399. package/dist/scene/scene-types.d.ts.map +0 -1
  400. package/dist/scene/scene-types.js +0 -8
  401. package/dist/scene/scene-version.d.ts +0 -26
  402. package/dist/scene/scene-version.d.ts.map +0 -1
  403. package/dist/scene/scene-version.js +0 -34
  404. package/dist/scene/schema/animation.d.ts +0 -8
  405. package/dist/scene/schema/animation.d.ts.map +0 -1
  406. package/dist/scene/schema/animation.js +0 -42
  407. package/dist/scene/schema/audio.d.ts +0 -13
  408. package/dist/scene/schema/audio.d.ts.map +0 -1
  409. package/dist/scene/schema/audio.js +0 -22
  410. package/dist/scene/schema/camera.d.ts +0 -28
  411. package/dist/scene/schema/camera.d.ts.map +0 -1
  412. package/dist/scene/schema/camera.js +0 -17
  413. package/dist/scene/schema/collider.d.ts +0 -40
  414. package/dist/scene/schema/collider.d.ts.map +0 -1
  415. package/dist/scene/schema/collider.js +0 -55
  416. package/dist/scene/schema/entity-ref.d.ts +0 -31
  417. package/dist/scene/schema/entity-ref.d.ts.map +0 -1
  418. package/dist/scene/schema/entity-ref.js +0 -61
  419. package/dist/scene/schema/entity.d.ts +0 -1036
  420. package/dist/scene/schema/entity.d.ts.map +0 -1
  421. package/dist/scene/schema/entity.js +0 -153
  422. package/dist/scene/schema/environment.d.ts +0 -425
  423. package/dist/scene/schema/environment.d.ts.map +0 -1
  424. package/dist/scene/schema/environment.js +0 -357
  425. package/dist/scene/schema/index.d.ts +0 -37
  426. package/dist/scene/schema/index.d.ts.map +0 -1
  427. package/dist/scene/schema/index.js +0 -19
  428. package/dist/scene/schema/instances.d.ts +0 -14
  429. package/dist/scene/schema/instances.d.ts.map +0 -1
  430. package/dist/scene/schema/instances.js +0 -28
  431. package/dist/scene/schema/joint.d.ts +0 -23
  432. package/dist/scene/schema/joint.d.ts.map +0 -1
  433. package/dist/scene/schema/joint.js +0 -23
  434. package/dist/scene/schema/light.d.ts +0 -38
  435. package/dist/scene/schema/light.d.ts.map +0 -1
  436. package/dist/scene/schema/light.js +0 -26
  437. package/dist/scene/schema/material.d.ts +0 -199
  438. package/dist/scene/schema/material.d.ts.map +0 -1
  439. package/dist/scene/schema/material.js +0 -103
  440. package/dist/scene/schema/mesh.d.ts +0 -48
  441. package/dist/scene/schema/mesh.d.ts.map +0 -1
  442. package/dist/scene/schema/mesh.js +0 -82
  443. package/dist/scene/schema/particles.d.ts +0 -2178
  444. package/dist/scene/schema/particles.d.ts.map +0 -1
  445. package/dist/scene/schema/particles.js +0 -321
  446. package/dist/scene/schema/physics.d.ts +0 -56
  447. package/dist/scene/schema/physics.d.ts.map +0 -1
  448. package/dist/scene/schema/physics.js +0 -37
  449. package/dist/scene/schema/scene-file.d.ts +0 -303
  450. package/dist/scene/schema/scene-file.d.ts.map +0 -1
  451. package/dist/scene/schema/scene-file.js +0 -256
  452. package/dist/scene/schema/shadow.d.ts +0 -28
  453. package/dist/scene/schema/shadow.d.ts.map +0 -1
  454. package/dist/scene/schema/shadow.js +0 -20
  455. package/dist/scene/schema/spline.d.ts +0 -25
  456. package/dist/scene/schema/spline.d.ts.map +0 -1
  457. package/dist/scene/schema/spline.js +0 -15
  458. package/dist/scene/schema/tuples.d.ts +0 -12
  459. package/dist/scene/schema/tuples.d.ts.map +0 -1
  460. package/dist/scene/schema/tuples.js +0 -14
  461. package/dist/scene/user-data.d.ts +0 -185
  462. package/dist/scene/user-data.d.ts.map +0 -1
  463. package/dist/scene/user-data.js +0 -144
  464. package/dist/setup/setup-audio.d.ts +0 -20
  465. package/dist/setup/setup-audio.d.ts.map +0 -1
  466. package/dist/setup/setup-audio.js +0 -41
  467. package/dist/setup/setup-particles.d.ts +0 -17
  468. package/dist/setup/setup-particles.d.ts.map +0 -1
  469. package/dist/setup/setup-particles.js +0 -16
  470. package/dist/setup/setup-physics.d.ts +0 -25
  471. package/dist/setup/setup-physics.d.ts.map +0 -1
  472. package/dist/setup/setup-physics.js +0 -51
  473. package/dist/setup/setup-renderer.d.ts +0 -69
  474. package/dist/setup/setup-renderer.d.ts.map +0 -1
  475. package/dist/setup/setup-renderer.js +0 -363
  476. package/dist/tools/define-tool.d.ts +0 -130
  477. package/dist/tools/define-tool.d.ts.map +0 -1
  478. package/dist/tools/define-tool.js +0 -96
  479. package/dist/world2d/authoring-2d.d.ts +0 -80
  480. package/dist/world2d/authoring-2d.d.ts.map +0 -1
  481. package/dist/world2d/authoring-2d.js +0 -195
  482. package/dist/world2d/capture-to-scene2d.d.ts +0 -5
  483. package/dist/world2d/capture-to-scene2d.d.ts.map +0 -1
  484. package/dist/world2d/capture-to-scene2d.js +0 -49
  485. package/dist/world2d/collision-2d.d.ts +0 -52
  486. package/dist/world2d/collision-2d.d.ts.map +0 -1
  487. package/dist/world2d/collision-2d.js +0 -70
  488. package/dist/world2d/components-2d.d.ts +0 -47
  489. package/dist/world2d/components-2d.d.ts.map +0 -1
  490. package/dist/world2d/components-2d.js +0 -77
  491. package/dist/world2d/index.d.ts +0 -34
  492. package/dist/world2d/index.d.ts.map +0 -1
  493. package/dist/world2d/index.js +0 -32
  494. package/dist/world2d/ingest-iframe-2d.d.ts +0 -82
  495. package/dist/world2d/ingest-iframe-2d.d.ts.map +0 -1
  496. package/dist/world2d/ingest-iframe-2d.js +0 -166
  497. package/dist/world2d/ingest2d.d.ts +0 -97
  498. package/dist/world2d/ingest2d.d.ts.map +0 -1
  499. package/dist/world2d/ingest2d.js +0 -40
  500. package/dist/world2d/physics2d-registry.d.ts +0 -24
  501. package/dist/world2d/physics2d-registry.d.ts.map +0 -1
  502. package/dist/world2d/physics2d-registry.js +0 -38
  503. package/dist/world2d/pixi-game-adapter.d.ts +0 -107
  504. package/dist/world2d/pixi-game-adapter.d.ts.map +0 -1
  505. package/dist/world2d/pixi-game-adapter.js +0 -210
  506. package/dist/world2d/pixi-surface.d.ts +0 -39
  507. package/dist/world2d/pixi-surface.d.ts.map +0 -1
  508. package/dist/world2d/pixi-surface.js +0 -47
  509. package/dist/world2d/scene-capture-2d.d.ts +0 -43
  510. package/dist/world2d/scene-capture-2d.d.ts.map +0 -1
  511. package/dist/world2d/scene-capture-2d.js +0 -92
  512. package/dist/world2d/scene2d-loader.d.ts +0 -27
  513. package/dist/world2d/scene2d-loader.d.ts.map +0 -1
  514. package/dist/world2d/scene2d-loader.js +0 -275
  515. package/dist/world2d/schema/entity2d.d.ts +0 -102
  516. package/dist/world2d/schema/entity2d.d.ts.map +0 -1
  517. package/dist/world2d/schema/entity2d.js +0 -119
  518. package/dist/world2d/schema/physics2d.d.ts +0 -46
  519. package/dist/world2d/schema/physics2d.d.ts.map +0 -1
  520. package/dist/world2d/schema/physics2d.js +0 -45
  521. package/dist/world2d/schema/sprite.d.ts +0 -42
  522. package/dist/world2d/schema/sprite.d.ts.map +0 -1
  523. package/dist/world2d/schema/sprite.js +0 -63
  524. package/dist/world2d/schema/tilemap.d.ts +0 -15
  525. package/dist/world2d/schema/tilemap.d.ts.map +0 -1
  526. package/dist/world2d/schema/tilemap.js +0 -19
  527. package/dist/world2d/schema/tuples2d.d.ts +0 -20
  528. package/dist/world2d/schema/tuples2d.d.ts.map +0 -1
  529. package/dist/world2d/schema/tuples2d.js +0 -19
  530. package/dist/world2d/system-adapters-2d.d.ts +0 -16
  531. package/dist/world2d/system-adapters-2d.d.ts.map +0 -1
  532. package/dist/world2d/system-adapters-2d.js +0 -37
  533. package/dist/world2d/transform-writer-2d.d.ts +0 -16
  534. package/dist/world2d/transform-writer-2d.d.ts.map +0 -1
  535. package/dist/world2d/transform-writer-2d.js +0 -22
  536. package/dist/world2d/types.d.ts +0 -59
  537. package/dist/world2d/types.d.ts.map +0 -1
  538. package/dist/world2d/types.js +0 -1
@@ -1,331 +0,0 @@
1
- import * as THREE from 'three';
2
- import { deleteUserData, getUserData, setUserData } from '../scene/user-data';
3
- import { evaluateBlendTree } from './blend-node';
4
- import { clipNamesOf, collectMachineAnimationMeta, isBlendTreeAnimationMeta, } from './xstate-animation-meta';
5
- /** A binding-time problem such as a missing clip, bone, or ambiguous layer. */
6
- export class AnimationBindingError extends Error {
7
- stateId;
8
- constructor(message, stateId) {
9
- super(message);
10
- this.stateId = stateId;
11
- this.name = 'AnimationBindingError';
12
- }
13
- }
14
- let inspectionVersion = 0;
15
- const inspectionListeners = new Set();
16
- /** React/useSyncExternalStore-compatible lifecycle signal for live editor inspection. */
17
- export function subscribeXStateAnimationBindings(listener) {
18
- inspectionListeners.add(listener);
19
- return () => inspectionListeners.delete(listener);
20
- }
21
- /** Monotonic snapshot changed whenever a binding is attached or disposed. */
22
- export function getXStateAnimationBindingsVersion() {
23
- return inspectionVersion;
24
- }
25
- function notifyInspectionLifecycle() {
26
- inspectionVersion++;
27
- for (const listener of inspectionListeners)
28
- listener();
29
- }
30
- const layerOf = (meta) => meta.layer ?? 'base';
31
- const layerWeightOf = (meta) => meta.weight ?? 1;
32
- const blendModeOf = (meta) => meta.blendMode ?? 'override';
33
- function targetNameOf(track) {
34
- try {
35
- return THREE.PropertyBinding.parseTrackName(track.name).nodeName ?? '';
36
- }
37
- catch {
38
- const dot = track.name.indexOf('.');
39
- return dot < 0 ? track.name : track.name.slice(0, dot);
40
- }
41
- }
42
- function subtreeNames(root, requested, trackNames) {
43
- const names = new Set();
44
- const missing = [];
45
- for (const requestedName of requested) {
46
- let found = false;
47
- root.traverse((object) => {
48
- if (object.name !== requestedName)
49
- return;
50
- found = true;
51
- object.traverse((descendant) => {
52
- if (descendant.name)
53
- names.add(descendant.name);
54
- });
55
- });
56
- // Some exporters target a named node not retained as a discoverable Bone.
57
- // Exact track-target matches remain useful, but cannot imply descendants.
58
- if (trackNames.has(requestedName)) {
59
- found = true;
60
- names.add(requestedName);
61
- }
62
- if (!found)
63
- missing.push(requestedName);
64
- }
65
- return { names, missing };
66
- }
67
- function maskedClip(source, mask, root, stateId) {
68
- const trackNames = new Set(source.tracks.map(targetNameOf));
69
- const included = mask.include ? subtreeNames(root, mask.include, trackNames) : undefined;
70
- const excluded = mask.exclude ? subtreeNames(root, mask.exclude, trackNames) : undefined;
71
- const missing = [...(included?.missing ?? []), ...(excluded?.missing ?? [])];
72
- if (missing.length) {
73
- throw new AnimationBindingError(`[bindXStateAnimation] state "${stateId}" boneMask names unknown bones/objects: ${missing.join(', ')}`, stateId);
74
- }
75
- const tracks = source.tracks.filter((track) => {
76
- const name = targetNameOf(track);
77
- return (!included || included.names.has(name)) && !excluded?.names.has(name);
78
- });
79
- if (tracks.length === 0) {
80
- throw new AnimationBindingError(`[bindXStateAnimation] state "${stateId}" boneMask removes every track from clip "${source.name}"`, stateId);
81
- }
82
- return new THREE.AnimationClip(source.name, source.duration, tracks.map((track) => track.clone()));
83
- }
84
- function dominantOf(weights) {
85
- return weights.reduce((a, b) => (b.weight > a.weight ? b : a), weights[0]);
86
- }
87
- /**
88
- * Bind a native XState actor to native Three actions.
89
- *
90
- * One active animated state is allowed per named layer. Parallel XState
91
- * regions therefore compose lower-body locomotion, upper-body weapon states,
92
- * facial animation, and other independent layers without introducing a
93
- * second transition language. Bone masks clone/filter native clip tracks;
94
- * additive layers use `AnimationUtils.makeClipAdditive` and Three's additive
95
- * blend mode. Single unlayered machines retain the original clip/action path.
96
- */
97
- export function bindXStateAnimation(actor, mixer, clips, options = {}) {
98
- const mixerRoot = mixer.getRoot();
99
- const root = options.root ?? (mixerRoot instanceof THREE.Object3D ? mixerRoot : undefined);
100
- if (!root) {
101
- throw new AnimationBindingError('[bindXStateAnimation] a THREE.Object3D `root` option is required when the mixer uses AnimationObjectGroup');
102
- }
103
- const owner = options.owner ?? root;
104
- const machineRoot = actor.logic.root;
105
- const entries = collectMachineAnimationMeta(machineRoot);
106
- const metaByStateId = new Map(entries.map((entry) => [entry.stateId, entry.meta]));
107
- for (const entry of entries) {
108
- for (const clipName of clipNamesOf(entry.meta)) {
109
- if (!clips.has(clipName)) {
110
- throw new AnimationBindingError(`[bindXStateAnimation] state "${entry.stateId}" references clip "${clipName}", which is ` +
111
- `not present in the supplied clips map. Known clips: ${[...clips.keys()].join(', ') || '(none)'}`, entry.stateId);
112
- }
113
- }
114
- }
115
- // Different layers need distinct AnimationActions even when they use the
116
- // same source clip. A plain base state keeps the original clip identity for
117
- // backwards-compatible mixer.existingAction(sourceClip) behavior.
118
- const preparedClips = new Map();
119
- function actionKey(stateId, meta, clipName) {
120
- const transformed = layerOf(meta) !== 'base' || Boolean(meta.boneMask) || blendModeOf(meta) === 'additive';
121
- return transformed ? `${stateId}\u0000${clipName}` : clipName;
122
- }
123
- for (const { stateId, meta } of entries) {
124
- for (const clipName of clipNamesOf(meta)) {
125
- const key = actionKey(stateId, meta, clipName);
126
- if (preparedClips.has(key))
127
- continue;
128
- const source = clips.get(clipName);
129
- let prepared = meta.boneMask ? maskedClip(source, meta.boneMask, root, stateId) : source;
130
- if (prepared !== source || key !== clipName) {
131
- if (prepared === source)
132
- prepared = source.clone();
133
- prepared.name = `${source.name}@${layerOf(meta)}:${stateId}`;
134
- }
135
- if (blendModeOf(meta) === 'additive') {
136
- THREE.AnimationUtils.makeClipAdditive(prepared);
137
- prepared.blendMode = THREE.AdditiveAnimationBlendMode;
138
- }
139
- else {
140
- prepared.blendMode = THREE.NormalAnimationBlendMode;
141
- }
142
- preparedClips.set(key, prepared);
143
- }
144
- }
145
- const actionCache = new Map();
146
- function ensureAction(key, loop, speed, weight) {
147
- let cached = actionCache.get(key);
148
- if (!cached) {
149
- const clip = preparedClips.get(key);
150
- if (!clip)
151
- throw new AnimationBindingError(`[bindXStateAnimation] prepared clip "${key}" not found`);
152
- const action = mixer.clipAction(clip);
153
- action.setEffectiveWeight(0);
154
- action.play();
155
- cached = { action, clip };
156
- actionCache.set(key, cached);
157
- }
158
- cached.action.setLoop(loop ? THREE.LoopRepeat : THREE.LoopOnce, Infinity);
159
- cached.action.clampWhenFinished = !loop;
160
- cached.action.timeScale = speed;
161
- cached.action.weight = weight;
162
- return cached.action;
163
- }
164
- function readParameters(context) {
165
- const raw = options.selectParameters
166
- ? options.selectParameters(context)
167
- : context;
168
- return new Map(Object.entries(raw ?? {}));
169
- }
170
- function weightsOf(stateId, meta, context) {
171
- const weights = isBlendTreeAnimationMeta(meta)
172
- ? evaluateBlendTree(meta.blendTree, readParameters(context))
173
- : [{ clip: meta.clip, weight: 1 }];
174
- return weights.map(({ clip, weight }) => ({
175
- clip,
176
- weight,
177
- actionKey: actionKey(stateId, meta, clip),
178
- }));
179
- }
180
- const activeLayers = new Map();
181
- let disposed = false;
182
- function silence(weights, except, duration) {
183
- for (const weighted of weights) {
184
- if (weighted.actionKey === except)
185
- continue;
186
- const action = actionCache.get(weighted.actionKey)?.action;
187
- if (!action)
188
- continue;
189
- if (duration > 0)
190
- action.fadeOut(duration);
191
- else
192
- action.setEffectiveWeight(0);
193
- }
194
- }
195
- function applyLiveBlendWeights(state, context) {
196
- if (!isBlendTreeAnimationMeta(state.meta))
197
- return;
198
- state.natural = weightsOf(state.stateId, state.meta, context);
199
- const layerWeight = layerWeightOf(state.meta);
200
- for (const weighted of state.natural) {
201
- actionCache.get(weighted.actionKey)?.action.setEffectiveWeight(weighted.weight * layerWeight);
202
- }
203
- }
204
- function enterState(stateId, meta, context) {
205
- const layer = layerOf(meta);
206
- const outgoing = activeLayers.get(layer) ?? null;
207
- const weights = weightsOf(stateId, meta, context);
208
- const dominant = dominantOf(weights);
209
- const loop = isBlendTreeAnimationMeta(meta) ? true : meta.loop;
210
- const speed = isBlendTreeAnimationMeta(meta) ? 1 : meta.speed;
211
- const layerWeight = layerWeightOf(meta);
212
- for (const weighted of weights)
213
- ensureAction(weighted.actionKey, loop, speed, layerWeight);
214
- const dominantAction = actionCache.get(dominant.actionKey).action;
215
- dominantAction.reset().setEffectiveWeight(layerWeight);
216
- for (const weighted of weights) {
217
- if (weighted.actionKey === dominant.actionKey)
218
- continue;
219
- actionCache.get(weighted.actionKey).action.reset().setEffectiveWeight(0);
220
- }
221
- const duration = meta.crossfade?.duration ?? 0;
222
- const warp = meta.crossfade?.warp ?? false;
223
- if (!outgoing) {
224
- if (duration > 0)
225
- dominantAction.fadeIn(duration);
226
- }
227
- else {
228
- silence(outgoing.natural, outgoing.dominantActionKey, duration);
229
- const previous = actionCache.get(outgoing.dominantActionKey)?.action;
230
- if (previous && duration > 0)
231
- previous.crossFadeTo(dominantAction, duration, warp);
232
- else {
233
- previous?.setEffectiveWeight(0);
234
- dominantAction.setEffectiveWeight(layerWeight);
235
- }
236
- }
237
- const active = {
238
- layer,
239
- stateId,
240
- meta,
241
- natural: weights,
242
- dominantActionKey: dominant.actionKey,
243
- crossfadeRemaining: duration,
244
- };
245
- activeLayers.set(layer, active);
246
- if (isBlendTreeAnimationMeta(meta) && duration <= 0)
247
- applyLiveBlendWeights(active, context);
248
- }
249
- function activeStateIds(snapshot) {
250
- return Object.keys(snapshot.getMeta()).filter((id) => metaByStateId.has(id));
251
- }
252
- function reconcile(snapshot) {
253
- const nextByLayer = new Map();
254
- for (const stateId of activeStateIds(snapshot)) {
255
- const meta = metaByStateId.get(stateId);
256
- const layer = layerOf(meta);
257
- const previous = nextByLayer.get(layer);
258
- if (previous) {
259
- throw new AnimationBindingError(`[bindXStateAnimation] animated states "${previous}" and "${stateId}" are both active ` +
260
- `on layer "${layer}". Give parallel regions distinct meta.animation.layer names.`, stateId);
261
- }
262
- nextByLayer.set(layer, stateId);
263
- }
264
- for (const [layer, active] of activeLayers) {
265
- if (nextByLayer.has(layer))
266
- continue;
267
- silence(active.natural, undefined, 0);
268
- activeLayers.delete(layer);
269
- }
270
- for (const [layer, stateId] of nextByLayer) {
271
- if (activeLayers.get(layer)?.stateId === stateId)
272
- continue;
273
- enterState(stateId, metaByStateId.get(stateId), snapshot.context);
274
- }
275
- }
276
- const initialSnapshot = actor.getSnapshot();
277
- reconcile(initialSnapshot);
278
- const subscription = actor.subscribe((snapshot) => {
279
- if (!disposed)
280
- reconcile(snapshot);
281
- });
282
- function tick(dt) {
283
- if (disposed)
284
- return;
285
- const context = actor.getSnapshot().context;
286
- for (const active of activeLayers.values()) {
287
- if (active.crossfadeRemaining > 0) {
288
- active.crossfadeRemaining = Math.max(0, active.crossfadeRemaining - dt);
289
- if (active.crossfadeRemaining <= 0)
290
- applyLiveBlendWeights(active, context);
291
- }
292
- else {
293
- applyLiveBlendWeights(active, context);
294
- }
295
- }
296
- mixer.update(dt);
297
- }
298
- const binding = {
299
- tick,
300
- actor,
301
- getActiveLayers: () => [...activeLayers.values()].map((active) => ({
302
- layer: active.layer,
303
- stateId: active.stateId,
304
- clips: active.natural.map((weighted) => weighted.clip),
305
- weight: layerWeightOf(active.meta),
306
- blendMode: blendModeOf(active.meta),
307
- ...(active.meta.boneMask ? { boneMask: active.meta.boneMask } : {}),
308
- })),
309
- dispose() {
310
- if (disposed)
311
- return;
312
- disposed = true;
313
- options.systems?.remove('animation', tick);
314
- subscription.unsubscribe();
315
- for (const { action, clip } of actionCache.values()) {
316
- action.stop();
317
- mixer.uncacheAction(clip, action.getRoot());
318
- }
319
- actionCache.clear();
320
- activeLayers.clear();
321
- if (getUserData(owner, '_xstateAnimation') === binding) {
322
- deleteUserData(owner, '_xstateAnimation');
323
- notifyInspectionLifecycle();
324
- }
325
- },
326
- };
327
- setUserData(owner, '_xstateAnimation', binding);
328
- notifyInspectionLifecycle();
329
- options.systems?.add('animation', tick);
330
- return binding;
331
- }
@@ -1,266 +0,0 @@
1
- import { z } from 'zod';
2
- /**
3
- * E1 — Zod/TypeScript metadata attached to XState state `meta.animation`
4
- * (spec §11 E1, §5.6, §3.3).
5
- *
6
- * This module defines ONLY animation data: which clip(s) a state plays, how
7
- * they loop/blend/crossfade, and (for locomotion-style states) how a 1D/2D/
8
- * direct blend tree distributes weight across several clips from a live
9
- * parameter. It intentionally contains **no transition vocabulary** — no
10
- * `on`/`target`/`guard`/`always`/`after`/`entry`/`exit`. XState alone owns
11
- * states, transitions, events, and guards (§3.3); this metadata is read-only
12
- * data a binding (`xstate-animation-binding.ts`, E2) consumes to drive a
13
- * `THREE.AnimationMixer` when XState enters/exits a state. Every schema below
14
- * is `.strict()` specifically so that smuggling a transition-shaped key into
15
- * `meta.animation` is a loud Zod "unrecognized key" error, not a silently
16
- * ignored field (E1 AC: "Metadata contains no transition language").
17
- *
18
- * ## Native layered composition
19
- *
20
- * Parallel XState regions may drive independent named layers. Each layer can
21
- * filter a clip to selected bone subtrees, scale its weight, and use normal
22
- * override or Three's native additive blend mode. XState still owns all
23
- * state/transition semantics; these fields only describe how the active
24
- * state's native `AnimationAction`s are composed by the binding.
25
- *
26
- * ## Blend tree shape
27
- *
28
- * Deliberately structurally IDENTICAL to `anim-graph-types.ts`'s
29
- * `BlendTreeDef` (same `type`/`parameter`/`parameterY`/`children[].clip`/
30
- * `.threshold`/`.thresholdY`/`.weight` fields) so the binding can hand a
31
- * parsed `AnimationBlendTree` straight to the existing, already-tested
32
- * `evaluateBlendTree` (`blend-node.ts`) with zero conversion — E2 reuses that
33
- * function verbatim rather than re-implementing 1D/2D/direct blend math.
34
- */
35
- declare const AnimationBlendChildSchema: z.ZodObject<{
36
- clip: z.ZodString;
37
- threshold: z.ZodNumber;
38
- thresholdY: z.ZodOptional<z.ZodNumber>;
39
- weight: z.ZodOptional<z.ZodNumber>;
40
- }, z.core.$strict>;
41
- export type AnimationBlendChild = z.infer<typeof AnimationBlendChildSchema>;
42
- export declare const AnimationBlendTreeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
43
- type: z.ZodLiteral<"1D">;
44
- parameter: z.ZodString;
45
- children: z.ZodArray<z.ZodObject<{
46
- clip: z.ZodString;
47
- threshold: z.ZodNumber;
48
- thresholdY: z.ZodOptional<z.ZodNumber>;
49
- weight: z.ZodOptional<z.ZodNumber>;
50
- }, z.core.$strict>>;
51
- }, z.core.$strict>, z.ZodObject<{
52
- type: z.ZodLiteral<"2D">;
53
- parameter: z.ZodString;
54
- parameterY: z.ZodString;
55
- children: z.ZodArray<z.ZodObject<{
56
- clip: z.ZodString;
57
- threshold: z.ZodNumber;
58
- weight: z.ZodOptional<z.ZodNumber>;
59
- thresholdY: z.ZodNumber;
60
- }, z.core.$strict>>;
61
- }, z.core.$strict>, z.ZodObject<{
62
- type: z.ZodLiteral<"direct">;
63
- parameter: z.ZodDefault<z.ZodString>;
64
- children: z.ZodArray<z.ZodObject<{
65
- clip: z.ZodString;
66
- threshold: z.ZodNumber;
67
- thresholdY: z.ZodOptional<z.ZodNumber>;
68
- weight: z.ZodNumber;
69
- }, z.core.$strict>>;
70
- }, z.core.$strict>], "type">;
71
- export type AnimationBlendTree = z.infer<typeof AnimationBlendTreeSchema>;
72
- declare const AnimationCrossfadeMetaSchema: z.ZodObject<{
73
- duration: z.ZodDefault<z.ZodNumber>;
74
- warp: z.ZodDefault<z.ZodBoolean>;
75
- }, z.core.$strict>;
76
- export type AnimationCrossfadeMeta = z.infer<typeof AnimationCrossfadeMetaSchema>;
77
- declare const AnimationBoneMaskSchema: z.ZodObject<{
78
- include: z.ZodOptional<z.ZodArray<z.ZodString>>;
79
- exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
80
- }, z.core.$strict>;
81
- export type AnimationBoneMask = z.infer<typeof AnimationBoneMaskSchema>;
82
- declare const ClipAnimationMetaSchema: z.ZodObject<{
83
- layer: z.ZodOptional<z.ZodString>;
84
- weight: z.ZodOptional<z.ZodNumber>;
85
- blendMode: z.ZodOptional<z.ZodEnum<{
86
- override: "override";
87
- additive: "additive";
88
- }>>;
89
- boneMask: z.ZodOptional<z.ZodObject<{
90
- include: z.ZodOptional<z.ZodArray<z.ZodString>>;
91
- exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
92
- }, z.core.$strict>>;
93
- clip: z.ZodString;
94
- loop: z.ZodDefault<z.ZodBoolean>;
95
- speed: z.ZodDefault<z.ZodNumber>;
96
- crossfade: z.ZodOptional<z.ZodObject<{
97
- duration: z.ZodDefault<z.ZodNumber>;
98
- warp: z.ZodDefault<z.ZodBoolean>;
99
- }, z.core.$strict>>;
100
- }, z.core.$strict>;
101
- export type ClipAnimationMeta = z.infer<typeof ClipAnimationMetaSchema>;
102
- declare const BlendTreeAnimationMetaSchema: z.ZodObject<{
103
- layer: z.ZodOptional<z.ZodString>;
104
- weight: z.ZodOptional<z.ZodNumber>;
105
- blendMode: z.ZodOptional<z.ZodEnum<{
106
- override: "override";
107
- additive: "additive";
108
- }>>;
109
- boneMask: z.ZodOptional<z.ZodObject<{
110
- include: z.ZodOptional<z.ZodArray<z.ZodString>>;
111
- exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
112
- }, z.core.$strict>>;
113
- blendTree: z.ZodDiscriminatedUnion<[z.ZodObject<{
114
- type: z.ZodLiteral<"1D">;
115
- parameter: z.ZodString;
116
- children: z.ZodArray<z.ZodObject<{
117
- clip: z.ZodString;
118
- threshold: z.ZodNumber;
119
- thresholdY: z.ZodOptional<z.ZodNumber>;
120
- weight: z.ZodOptional<z.ZodNumber>;
121
- }, z.core.$strict>>;
122
- }, z.core.$strict>, z.ZodObject<{
123
- type: z.ZodLiteral<"2D">;
124
- parameter: z.ZodString;
125
- parameterY: z.ZodString;
126
- children: z.ZodArray<z.ZodObject<{
127
- clip: z.ZodString;
128
- threshold: z.ZodNumber;
129
- weight: z.ZodOptional<z.ZodNumber>;
130
- thresholdY: z.ZodNumber;
131
- }, z.core.$strict>>;
132
- }, z.core.$strict>, z.ZodObject<{
133
- type: z.ZodLiteral<"direct">;
134
- parameter: z.ZodDefault<z.ZodString>;
135
- children: z.ZodArray<z.ZodObject<{
136
- clip: z.ZodString;
137
- threshold: z.ZodNumber;
138
- thresholdY: z.ZodOptional<z.ZodNumber>;
139
- weight: z.ZodNumber;
140
- }, z.core.$strict>>;
141
- }, z.core.$strict>], "type">;
142
- crossfade: z.ZodOptional<z.ZodObject<{
143
- duration: z.ZodDefault<z.ZodNumber>;
144
- warp: z.ZodDefault<z.ZodBoolean>;
145
- }, z.core.$strict>>;
146
- }, z.core.$strict>;
147
- export type BlendTreeAnimationMeta = z.infer<typeof BlendTreeAnimationMetaSchema>;
148
- /**
149
- * The full shape of `state.meta.animation` for one XState state (spec §5.6):
150
- * exactly one of a single clip or a blend tree, plus optional crossfade
151
- * timing. `.strict()` on both branches is what makes authoring a transition
152
- * keyword (`on`, `target`, `guard`, …) inside `meta.animation` a validation
153
- * error instead of a silently-accepted second transition dialect.
154
- */
155
- export declare const StateAnimationMetaSchema: z.ZodUnion<readonly [z.ZodObject<{
156
- layer: z.ZodOptional<z.ZodString>;
157
- weight: z.ZodOptional<z.ZodNumber>;
158
- blendMode: z.ZodOptional<z.ZodEnum<{
159
- override: "override";
160
- additive: "additive";
161
- }>>;
162
- boneMask: z.ZodOptional<z.ZodObject<{
163
- include: z.ZodOptional<z.ZodArray<z.ZodString>>;
164
- exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
165
- }, z.core.$strict>>;
166
- clip: z.ZodString;
167
- loop: z.ZodDefault<z.ZodBoolean>;
168
- speed: z.ZodDefault<z.ZodNumber>;
169
- crossfade: z.ZodOptional<z.ZodObject<{
170
- duration: z.ZodDefault<z.ZodNumber>;
171
- warp: z.ZodDefault<z.ZodBoolean>;
172
- }, z.core.$strict>>;
173
- }, z.core.$strict>, z.ZodObject<{
174
- layer: z.ZodOptional<z.ZodString>;
175
- weight: z.ZodOptional<z.ZodNumber>;
176
- blendMode: z.ZodOptional<z.ZodEnum<{
177
- override: "override";
178
- additive: "additive";
179
- }>>;
180
- boneMask: z.ZodOptional<z.ZodObject<{
181
- include: z.ZodOptional<z.ZodArray<z.ZodString>>;
182
- exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
183
- }, z.core.$strict>>;
184
- blendTree: z.ZodDiscriminatedUnion<[z.ZodObject<{
185
- type: z.ZodLiteral<"1D">;
186
- parameter: z.ZodString;
187
- children: z.ZodArray<z.ZodObject<{
188
- clip: z.ZodString;
189
- threshold: z.ZodNumber;
190
- thresholdY: z.ZodOptional<z.ZodNumber>;
191
- weight: z.ZodOptional<z.ZodNumber>;
192
- }, z.core.$strict>>;
193
- }, z.core.$strict>, z.ZodObject<{
194
- type: z.ZodLiteral<"2D">;
195
- parameter: z.ZodString;
196
- parameterY: z.ZodString;
197
- children: z.ZodArray<z.ZodObject<{
198
- clip: z.ZodString;
199
- threshold: z.ZodNumber;
200
- weight: z.ZodOptional<z.ZodNumber>;
201
- thresholdY: z.ZodNumber;
202
- }, z.core.$strict>>;
203
- }, z.core.$strict>, z.ZodObject<{
204
- type: z.ZodLiteral<"direct">;
205
- parameter: z.ZodDefault<z.ZodString>;
206
- children: z.ZodArray<z.ZodObject<{
207
- clip: z.ZodString;
208
- threshold: z.ZodNumber;
209
- thresholdY: z.ZodOptional<z.ZodNumber>;
210
- weight: z.ZodNumber;
211
- }, z.core.$strict>>;
212
- }, z.core.$strict>], "type">;
213
- crossfade: z.ZodOptional<z.ZodObject<{
214
- duration: z.ZodDefault<z.ZodNumber>;
215
- warp: z.ZodDefault<z.ZodBoolean>;
216
- }, z.core.$strict>>;
217
- }, z.core.$strict>]>;
218
- export type StateAnimationMeta = z.infer<typeof StateAnimationMetaSchema>;
219
- /** True iff a validated meta declares a single clip rather than a blend tree. */
220
- export declare function isClipAnimationMeta(meta: StateAnimationMeta): meta is ClipAnimationMeta;
221
- /** True iff a validated meta declares a blend tree rather than a single clip. */
222
- export declare function isBlendTreeAnimationMeta(meta: StateAnimationMeta): meta is BlendTreeAnimationMeta;
223
- /** Thrown by `parseStateAnimationMeta` — always names the offending state id. */
224
- export declare class AnimationMetaValidationError extends Error {
225
- readonly stateId: string;
226
- readonly issues: z.ZodIssue[];
227
- constructor(message: string, stateId: string, issues: z.ZodIssue[]);
228
- }
229
- /**
230
- * Validate one state's `meta.animation` value. Called by the E2 binding for
231
- * every state a machine declares (both at bind time, up front, and — for
232
- * belt-and-suspenders — again whenever a state is entered).
233
- *
234
- * @throws {AnimationMetaValidationError} naming the state id and every Zod
235
- * issue (path + message) — e.g. an unrecognized `on`/`target` key, a
236
- * missing `clip`, or a 1D blend tree with only one child.
237
- */
238
- export declare function parseStateAnimationMeta(stateId: string, raw: unknown): StateAnimationMeta;
239
- /** The minimal shape of an XState `StateNode` this module needs to walk. */
240
- export interface AnimationMetaStateNodeLike {
241
- id: string;
242
- meta?: {
243
- animation?: unknown;
244
- } & Record<string, unknown>;
245
- states?: Record<string, AnimationMetaStateNodeLike>;
246
- }
247
- export interface MachineAnimationMetaEntry {
248
- stateId: string;
249
- meta: StateAnimationMeta;
250
- }
251
- /**
252
- * Walk every state node in a machine (from its root `StateNode`, e.g.
253
- * `actor.logic.root`) and validate every `meta.animation` value found.
254
- * States with no `meta.animation` are skipped (not every XState state needs
255
- * to drive animation). Returns one entry per animated state, in document
256
- * order.
257
- *
258
- * @throws {AnimationMetaValidationError} on the FIRST invalid meta found —
259
- * naming the specific state id, so an agent authoring a machine gets an
260
- * actionable pointer straight to the bad state instead of a generic error.
261
- */
262
- export declare function collectMachineAnimationMeta(root: AnimationMetaStateNodeLike): MachineAnimationMetaEntry[];
263
- /** Every clip name referenced anywhere in a validated meta (1 for clip states, N for blend trees). */
264
- export declare function clipNamesOf(meta: StateAnimationMeta): string[];
265
- export {};
266
- //# sourceMappingURL=xstate-animation-meta.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xstate-animation-meta.d.ts","sourceRoot":"","sources":["../../src/animation/xstate-animation-meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAMH,QAAA,MAAM,yBAAyB;;;;;kBAcpB,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAwC5E,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAInC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAM1E,QAAA,MAAM,4BAA4B;;;kBAmBkC,CAAC;AAErE,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,QAAA,MAAM,uBAAuB;;;kBAiB0C,CAAC;AAExE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AA2BxE,QAAA,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;kBAiBlB,CAAC;AAEZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,QAAA,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAQvB,CAAC;AAEZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAGnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,IAAI,iBAAiB,CAEvF;AAED,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,IAAI,sBAAsB,CAEjG;AAMD,iFAAiF;AACjF,qBAAa,4BAA6B,SAAQ,KAAK;IAGnD,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;gBAF7B,OAAO,EAAE,MAAM,EACN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAKhC;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,kBAAkB,CAazF;AAMD,4EAA4E;AAC5E,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,0BAA0B,GAC/B,yBAAyB,EAAE,CAU7B;AAED,sGAAsG;AACtG,wBAAgB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAE9D"}