@vgai/engine 0.3.0 → 0.4.0-canary.20260715.0

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 (559) hide show
  1. package/package.json +8 -2
  2. package/schemas/engine-api.json +124 -0
  3. package/schemas/engine-api.md +53 -0
  4. package/schemas/engine-capabilities.json +124 -0
  5. package/schemas/inputmap.schema.json +314 -0
  6. package/schemas/mat.schema.json +286 -0
  7. package/schemas/prefab.schema.json +10148 -0
  8. package/schemas/scn2d.schema.json +475 -0
  9. package/schemas/vgai-game.schema.json +383 -0
  10. package/schemas/vscn.schema.json +11007 -0
  11. package/src/adapter/{world-kind.ts → adapter-surface.ts} +6 -6
  12. package/src/adapter/authoring.ts +67 -0
  13. package/src/adapter/game-adapter.ts +8 -8
  14. package/src/adapter/host-context.ts +2 -4
  15. package/src/adapter/index.ts +3 -1
  16. package/src/adapter/system-adapter.ts +73 -0
  17. package/src/adapter/vgai-scene-game-adapter.ts +239 -180
  18. package/src/animation/xstate-animation-binding.ts +300 -262
  19. package/src/animation/xstate-animation-meta.ts +50 -13
  20. package/src/character/cloth-sim.ts +533 -0
  21. package/src/character/spring-chain.ts +307 -0
  22. package/src/core/game-loop.ts +41 -3
  23. package/src/core/seeded-random.ts +161 -0
  24. package/src/core/system-runner.ts +20 -3
  25. package/src/core/types.ts +37 -0
  26. package/src/data/data-asset.ts +1 -1
  27. package/src/dev/performance-profiler.ts +213 -0
  28. package/src/dev/webgl-gpu-timer.ts +53 -0
  29. package/src/ecs/component-manager.ts +45 -12
  30. package/src/ecs/game-component.ts +95 -11
  31. package/src/humanoid/bake.operation.ts +326 -0
  32. package/src/humanoid/body.ts +663 -0
  33. package/src/humanoid/clips.ts +149 -0
  34. package/src/humanoid/compose.ts +209 -0
  35. package/src/humanoid/generate.ts +189 -0
  36. package/src/humanoid/index.ts +36 -0
  37. package/src/humanoid/schema.ts +108 -0
  38. package/src/humanoid/skeleton.ts +345 -0
  39. package/src/index.ts +5 -5
  40. package/src/input/input-manager.ts +701 -22
  41. package/src/input/input-types.ts +5 -2
  42. package/src/manifest/index.ts +5 -5
  43. package/src/manifest/load.ts +125 -72
  44. package/src/manifest/schema.ts +362 -255
  45. package/src/react/game-state.tsx +135 -32
  46. package/src/react/root-adapter.tsx +49 -0
  47. package/src/react/unmanaged-root-detector.ts +66 -0
  48. package/src/react/use-data.ts +12 -2
  49. package/src/runtime/create-runtime.ts +100 -282
  50. package/src/runtime/debug-bridge.ts +483 -0
  51. package/src/runtime/debug-registry.ts +856 -0
  52. package/src/runtime/game.ts +342 -93
  53. package/src/runtime/gameplay-rng-trap.ts +134 -0
  54. package/src/runtime/input-router.ts +7 -7
  55. package/src/runtime/mount-game.ts +40 -38
  56. package/src/runtime/mount-manifest.ts +169 -37
  57. package/src/runtime/render-control.ts +13 -13
  58. package/src/runtime/render-seed.ts +1 -1
  59. package/src/runtime/state-bridge.ts +24 -10
  60. package/src/runtime/types.ts +110 -28
  61. package/src/scene/asset-registry.ts +22 -0
  62. package/src/scene/component-registry.ts +14 -3
  63. package/src/scene/defaults.ts +1 -0
  64. package/src/scene/light-camera-factory.ts +11 -3
  65. package/src/scene/scene-apply.ts +55 -4
  66. package/src/scene/scene-loader.ts +10 -27
  67. package/src/scene/scene-types.ts +0 -1
  68. package/src/scene/schema/index.ts +0 -34
  69. package/src/scene/schema/light.ts +16 -1
  70. package/src/scene/schema/material.ts +96 -91
  71. package/src/scene/schema/scene-file.ts +1 -7
  72. package/src/scene/user-data.ts +14 -1
  73. package/src/setup/setup-renderer.ts +1 -1
  74. package/src/tools/define-tool.ts +50 -11
  75. package/src/world2d/authoring-2d.ts +17 -1
  76. package/src/world2d/collision-2d.ts +1 -1
  77. package/src/world2d/pixi-game-adapter.ts +19 -17
  78. package/src/world2d/scene2d-loader.ts +1 -0
  79. package/src/world2d/types.ts +8 -2
  80. package/dist/adapter/authoring.d.ts +0 -404
  81. package/dist/adapter/authoring.d.ts.map +0 -1
  82. package/dist/adapter/authoring.js +0 -22
  83. package/dist/adapter/colyseus-networking-adapter.d.ts +0 -43
  84. package/dist/adapter/colyseus-networking-adapter.d.ts.map +0 -1
  85. package/dist/adapter/colyseus-networking-adapter.js +0 -38
  86. package/dist/adapter/first-party-systems.d.ts +0 -38
  87. package/dist/adapter/first-party-systems.d.ts.map +0 -1
  88. package/dist/adapter/first-party-systems.js +0 -77
  89. package/dist/adapter/game-adapter.d.ts +0 -133
  90. package/dist/adapter/game-adapter.d.ts.map +0 -1
  91. package/dist/adapter/game-adapter.js +0 -10
  92. package/dist/adapter/host-context.d.ts +0 -73
  93. package/dist/adapter/host-context.d.ts.map +0 -1
  94. package/dist/adapter/host-context.js +0 -16
  95. package/dist/adapter/index.d.ts +0 -22
  96. package/dist/adapter/index.d.ts.map +0 -1
  97. package/dist/adapter/index.js +0 -15
  98. package/dist/adapter/ingest/game-contract.d.ts +0 -53
  99. package/dist/adapter/ingest/game-contract.d.ts.map +0 -1
  100. package/dist/adapter/ingest/game-contract.js +0 -30
  101. package/dist/adapter/ingest/overlay-applier.d.ts +0 -118
  102. package/dist/adapter/ingest/overlay-applier.d.ts.map +0 -1
  103. package/dist/adapter/ingest/overlay-applier.js +0 -132
  104. package/dist/adapter/ingest/overlay-apply.d.ts +0 -60
  105. package/dist/adapter/ingest/overlay-apply.d.ts.map +0 -1
  106. package/dist/adapter/ingest/overlay-apply.js +0 -101
  107. package/dist/adapter/ingest/overlay-file.d.ts +0 -79
  108. package/dist/adapter/ingest/overlay-file.d.ts.map +0 -1
  109. package/dist/adapter/ingest/overlay-file.js +0 -66
  110. package/dist/adapter/ingest/overlay-report.d.ts +0 -113
  111. package/dist/adapter/ingest/overlay-report.d.ts.map +0 -1
  112. package/dist/adapter/ingest/overlay-report.js +0 -103
  113. package/dist/adapter/ingest/scene-capture.d.ts +0 -97
  114. package/dist/adapter/ingest/scene-capture.d.ts.map +0 -1
  115. package/dist/adapter/ingest/scene-capture.js +0 -248
  116. package/dist/adapter/ingest/upstream-pin.d.ts +0 -47
  117. package/dist/adapter/ingest/upstream-pin.d.ts.map +0 -1
  118. package/dist/adapter/ingest/upstream-pin.js +0 -50
  119. package/dist/adapter/loop-gate-report.d.ts +0 -34
  120. package/dist/adapter/loop-gate-report.d.ts.map +0 -1
  121. package/dist/adapter/loop-gate-report.js +0 -37
  122. package/dist/adapter/rapier-physics-adapter.d.ts +0 -12
  123. package/dist/adapter/rapier-physics-adapter.d.ts.map +0 -1
  124. package/dist/adapter/rapier-physics-adapter.js +0 -46
  125. package/dist/adapter/system-adapter.d.ts +0 -133
  126. package/dist/adapter/system-adapter.d.ts.map +0 -1
  127. package/dist/adapter/system-adapter.js +0 -13
  128. package/dist/adapter/transform.d.ts +0 -18
  129. package/dist/adapter/transform.d.ts.map +0 -1
  130. package/dist/adapter/transform.js +0 -1
  131. package/dist/adapter/vgai-scene-game-adapter.d.ts +0 -116
  132. package/dist/adapter/vgai-scene-game-adapter.d.ts.map +0 -1
  133. package/dist/adapter/vgai-scene-game-adapter.js +0 -714
  134. package/dist/adapter/world-kind.d.ts +0 -30
  135. package/dist/adapter/world-kind.d.ts.map +0 -1
  136. package/dist/adapter/world-kind.js +0 -18
  137. package/dist/ai/navigation.d.ts +0 -64
  138. package/dist/ai/navigation.d.ts.map +0 -1
  139. package/dist/ai/navigation.js +0 -133
  140. package/dist/animation/anim-graph-types.d.ts +0 -25
  141. package/dist/animation/anim-graph-types.d.ts.map +0 -1
  142. package/dist/animation/anim-graph-types.js +0 -1
  143. package/dist/animation/animation-clock.d.ts +0 -213
  144. package/dist/animation/animation-clock.d.ts.map +0 -1
  145. package/dist/animation/animation-clock.js +0 -301
  146. package/dist/animation/blend-node.d.ts +0 -22
  147. package/dist/animation/blend-node.d.ts.map +0 -1
  148. package/dist/animation/blend-node.js +0 -97
  149. package/dist/animation/camera-ownership.d.ts +0 -250
  150. package/dist/animation/camera-ownership.d.ts.map +0 -1
  151. package/dist/animation/camera-ownership.js +0 -169
  152. package/dist/animation/cinematic-cues.d.ts +0 -200
  153. package/dist/animation/cinematic-cues.d.ts.map +0 -1
  154. package/dist/animation/cinematic-cues.js +0 -213
  155. package/dist/animation/clip-map.d.ts +0 -12
  156. package/dist/animation/clip-map.d.ts.map +0 -1
  157. package/dist/animation/clip-map.js +0 -37
  158. package/dist/animation/gsap-registration.d.ts +0 -119
  159. package/dist/animation/gsap-registration.d.ts.map +0 -1
  160. package/dist/animation/gsap-registration.js +0 -92
  161. package/dist/animation/theatre-clock-binding.d.ts +0 -89
  162. package/dist/animation/theatre-clock-binding.d.ts.map +0 -1
  163. package/dist/animation/theatre-clock-binding.js +0 -29
  164. package/dist/animation/theatre-director.d.ts +0 -242
  165. package/dist/animation/theatre-director.d.ts.map +0 -1
  166. package/dist/animation/theatre-director.js +0 -235
  167. package/dist/animation/theatre-object-binding.d.ts +0 -305
  168. package/dist/animation/theatre-object-binding.d.ts.map +0 -1
  169. package/dist/animation/theatre-object-binding.js +0 -351
  170. package/dist/animation/xstate-animation-binding.d.ts +0 -111
  171. package/dist/animation/xstate-animation-binding.d.ts.map +0 -1
  172. package/dist/animation/xstate-animation-binding.js +0 -307
  173. package/dist/animation/xstate-animation-meta.d.ts +0 -228
  174. package/dist/animation/xstate-animation-meta.d.ts.map +0 -1
  175. package/dist/animation/xstate-animation-meta.js +0 -221
  176. package/dist/assets.d.ts +0 -26
  177. package/dist/assets.d.ts.map +0 -1
  178. package/dist/assets.js +0 -55
  179. package/dist/audio/index.d.ts +0 -4
  180. package/dist/audio/index.d.ts.map +0 -1
  181. package/dist/audio/index.js +0 -24
  182. package/dist/audio/tone-clock-binding.d.ts +0 -75
  183. package/dist/audio/tone-clock-binding.d.ts.map +0 -1
  184. package/dist/audio/tone-clock-binding.js +0 -29
  185. package/dist/audio/tone-context.d.ts +0 -114
  186. package/dist/audio/tone-context.d.ts.map +0 -1
  187. package/dist/audio/tone-context.js +0 -39
  188. package/dist/audio/tone-offline-render.d.ts +0 -90
  189. package/dist/audio/tone-offline-render.d.ts.map +0 -1
  190. package/dist/audio/tone-offline-render.js +0 -56
  191. package/dist/audio/wav-encode.d.ts +0 -38
  192. package/dist/audio/wav-encode.d.ts.map +0 -1
  193. package/dist/audio/wav-encode.js +0 -97
  194. package/dist/core/game-loop.d.ts +0 -21
  195. package/dist/core/game-loop.d.ts.map +0 -1
  196. package/dist/core/game-loop.js +0 -130
  197. package/dist/core/system-runner.d.ts +0 -120
  198. package/dist/core/system-runner.d.ts.map +0 -1
  199. package/dist/core/system-runner.js +0 -286
  200. package/dist/core/types.d.ts +0 -58
  201. package/dist/core/types.d.ts.map +0 -1
  202. package/dist/core/types.js +0 -25
  203. package/dist/data/data-asset.d.ts +0 -101
  204. package/dist/data/data-asset.d.ts.map +0 -1
  205. package/dist/data/data-asset.js +0 -122
  206. package/dist/data/data-check-core.d.ts +0 -110
  207. package/dist/data/data-check-core.d.ts.map +0 -1
  208. package/dist/data/data-check-core.js +0 -178
  209. package/dist/data/data-ref.d.ts +0 -79
  210. package/dist/data/data-ref.d.ts.map +0 -1
  211. package/dist/data/data-ref.js +0 -130
  212. package/dist/data/vite-plugin-data.d.ts +0 -79
  213. package/dist/data/vite-plugin-data.d.ts.map +0 -1
  214. package/dist/data/vite-plugin-data.js +0 -217
  215. package/dist/dev/console-bridge.d.ts +0 -22
  216. package/dist/dev/console-bridge.d.ts.map +0 -1
  217. package/dist/dev/console-bridge.js +0 -71
  218. package/dist/dev/debug-draw.d.ts +0 -24
  219. package/dist/dev/debug-draw.d.ts.map +0 -1
  220. package/dist/dev/debug-draw.js +0 -73
  221. package/dist/dev/logger.d.ts +0 -30
  222. package/dist/dev/logger.d.ts.map +0 -1
  223. package/dist/dev/logger.js +0 -90
  224. package/dist/ecs/component-manager.d.ts +0 -189
  225. package/dist/ecs/component-manager.d.ts.map +0 -1
  226. package/dist/ecs/component-manager.js +0 -676
  227. package/dist/ecs/game-component.d.ts +0 -97
  228. package/dist/ecs/game-component.d.ts.map +0 -1
  229. package/dist/ecs/game-component.js +0 -80
  230. package/dist/ecs/hmr-swap-report.d.ts +0 -53
  231. package/dist/ecs/hmr-swap-report.d.ts.map +0 -1
  232. package/dist/ecs/hmr-swap-report.js +0 -55
  233. package/dist/index.d.ts +0 -37
  234. package/dist/index.d.ts.map +0 -1
  235. package/dist/index.js +0 -30
  236. package/dist/input/input-manager.d.ts +0 -596
  237. package/dist/input/input-manager.d.ts.map +0 -1
  238. package/dist/input/input-manager.js +0 -1564
  239. package/dist/input/input-types.d.ts +0 -171
  240. package/dist/input/input-types.d.ts.map +0 -1
  241. package/dist/input/input-types.js +0 -1
  242. package/dist/input/prompt-labels.d.ts +0 -21
  243. package/dist/input/prompt-labels.d.ts.map +0 -1
  244. package/dist/input/prompt-labels.js +0 -121
  245. package/dist/input/rebind-controller.d.ts +0 -59
  246. package/dist/input/rebind-controller.d.ts.map +0 -1
  247. package/dist/input/rebind-controller.js +0 -85
  248. package/dist/input/schema.d.ts +0 -16
  249. package/dist/input/schema.d.ts.map +0 -1
  250. package/dist/input/schema.js +0 -228
  251. package/dist/loader.d.ts +0 -43
  252. package/dist/loader.d.ts.map +0 -1
  253. package/dist/loader.js +0 -59
  254. package/dist/manifest/index.d.ts +0 -5
  255. package/dist/manifest/index.d.ts.map +0 -1
  256. package/dist/manifest/index.js +0 -8
  257. package/dist/manifest/load-file.d.ts +0 -4
  258. package/dist/manifest/load-file.d.ts.map +0 -1
  259. package/dist/manifest/load-file.js +0 -14
  260. package/dist/manifest/load.d.ts +0 -117
  261. package/dist/manifest/load.d.ts.map +0 -1
  262. package/dist/manifest/load.js +0 -255
  263. package/dist/manifest/schema.d.ts +0 -173
  264. package/dist/manifest/schema.d.ts.map +0 -1
  265. package/dist/manifest/schema.js +0 -302
  266. package/dist/physics/collision-system.d.ts +0 -41
  267. package/dist/physics/collision-system.d.ts.map +0 -1
  268. package/dist/physics/collision-system.js +0 -64
  269. package/dist/physics/physics-registry.d.ts +0 -45
  270. package/dist/physics/physics-registry.d.ts.map +0 -1
  271. package/dist/physics/physics-registry.js +0 -65
  272. package/dist/physics/transform-writer.d.ts +0 -16
  273. package/dist/physics/transform-writer.d.ts.map +0 -1
  274. package/dist/physics/transform-writer.js +0 -38
  275. package/dist/physics/trigger-dispatch.d.ts +0 -24
  276. package/dist/physics/trigger-dispatch.d.ts.map +0 -1
  277. package/dist/physics/trigger-dispatch.js +0 -80
  278. package/dist/react/game-state.d.ts +0 -105
  279. package/dist/react/game-state.d.ts.map +0 -1
  280. package/dist/react/game-state.js +0 -144
  281. package/dist/react/use-data.d.ts +0 -60
  282. package/dist/react/use-data.d.ts.map +0 -1
  283. package/dist/react/use-data.js +0 -96
  284. package/dist/react/use-selection.d.ts +0 -75
  285. package/dist/react/use-selection.d.ts.map +0 -1
  286. package/dist/react/use-selection.js +0 -90
  287. package/dist/render/auto-batcher.d.ts +0 -34
  288. package/dist/render/auto-batcher.d.ts.map +0 -1
  289. package/dist/render/auto-batcher.js +0 -140
  290. package/dist/render/render-batch-system.d.ts +0 -33
  291. package/dist/render/render-batch-system.d.ts.map +0 -1
  292. package/dist/render/render-batch-system.js +0 -230
  293. package/dist/render/render-features.d.ts +0 -47
  294. package/dist/render/render-features.d.ts.map +0 -1
  295. package/dist/render/render-features.js +0 -105
  296. package/dist/render/render-settings.d.ts +0 -36
  297. package/dist/render/render-settings.d.ts.map +0 -1
  298. package/dist/render/render-settings.js +0 -51
  299. package/dist/runtime/create-runtime.d.ts +0 -280
  300. package/dist/runtime/create-runtime.d.ts.map +0 -1
  301. package/dist/runtime/create-runtime.js +0 -795
  302. package/dist/runtime/frame-selector-cache.d.ts +0 -41
  303. package/dist/runtime/frame-selector-cache.d.ts.map +0 -1
  304. package/dist/runtime/frame-selector-cache.js +0 -65
  305. package/dist/runtime/game.d.ts +0 -433
  306. package/dist/runtime/game.d.ts.map +0 -1
  307. package/dist/runtime/game.js +0 -569
  308. package/dist/runtime/input-router.d.ts +0 -78
  309. package/dist/runtime/input-router.d.ts.map +0 -1
  310. package/dist/runtime/input-router.js +0 -171
  311. package/dist/runtime/mount-game.d.ts +0 -129
  312. package/dist/runtime/mount-game.d.ts.map +0 -1
  313. package/dist/runtime/mount-game.js +0 -152
  314. package/dist/runtime/mount-manifest.d.ts +0 -119
  315. package/dist/runtime/mount-manifest.d.ts.map +0 -1
  316. package/dist/runtime/mount-manifest.js +0 -204
  317. package/dist/runtime/render-audio-control.d.ts +0 -110
  318. package/dist/runtime/render-audio-control.d.ts.map +0 -1
  319. package/dist/runtime/render-audio-control.js +0 -111
  320. package/dist/runtime/render-control.d.ts +0 -291
  321. package/dist/runtime/render-control.d.ts.map +0 -1
  322. package/dist/runtime/render-control.js +0 -264
  323. package/dist/runtime/render-seed.d.ts +0 -57
  324. package/dist/runtime/render-seed.d.ts.map +0 -1
  325. package/dist/runtime/render-seed.js +0 -74
  326. package/dist/runtime/scene-ui-bridge.d.ts +0 -69
  327. package/dist/runtime/scene-ui-bridge.d.ts.map +0 -1
  328. package/dist/runtime/scene-ui-bridge.js +0 -23
  329. package/dist/runtime/scene-ui-data.d.ts +0 -13
  330. package/dist/runtime/scene-ui-data.d.ts.map +0 -1
  331. package/dist/runtime/scene-ui-data.js +0 -92
  332. package/dist/runtime/state-bridge.d.ts +0 -47
  333. package/dist/runtime/state-bridge.d.ts.map +0 -1
  334. package/dist/runtime/state-bridge.js +0 -53
  335. package/dist/runtime/types.d.ts +0 -179
  336. package/dist/runtime/types.d.ts.map +0 -1
  337. package/dist/runtime/types.js +0 -1
  338. package/dist/scene/asset-loaders.d.ts +0 -79
  339. package/dist/scene/asset-loaders.d.ts.map +0 -1
  340. package/dist/scene/asset-loaders.js +0 -141
  341. package/dist/scene/asset-paths.d.ts +0 -11
  342. package/dist/scene/asset-paths.d.ts.map +0 -1
  343. package/dist/scene/asset-paths.js +0 -108
  344. package/dist/scene/asset-ref-check.d.ts +0 -88
  345. package/dist/scene/asset-ref-check.d.ts.map +0 -1
  346. package/dist/scene/asset-ref-check.js +0 -214
  347. package/dist/scene/asset-registry.d.ts +0 -30
  348. package/dist/scene/asset-registry.d.ts.map +0 -1
  349. package/dist/scene/asset-registry.js +0 -50
  350. package/dist/scene/collider-dimensions.d.ts +0 -63
  351. package/dist/scene/collider-dimensions.d.ts.map +0 -1
  352. package/dist/scene/collider-dimensions.js +0 -98
  353. package/dist/scene/component-registry.d.ts +0 -17
  354. package/dist/scene/component-registry.d.ts.map +0 -1
  355. package/dist/scene/component-registry.js +0 -28
  356. package/dist/scene/defaults.d.ts +0 -252
  357. package/dist/scene/defaults.d.ts.map +0 -1
  358. package/dist/scene/defaults.js +0 -151
  359. package/dist/scene/geometries/index.d.ts +0 -8
  360. package/dist/scene/geometries/index.d.ts.map +0 -1
  361. package/dist/scene/geometries/index.js +0 -7
  362. package/dist/scene/geometries/terrain.d.ts +0 -2
  363. package/dist/scene/geometries/terrain.d.ts.map +0 -1
  364. package/dist/scene/geometries/terrain.js +0 -37
  365. package/dist/scene/geometry-registry.d.ts +0 -24
  366. package/dist/scene/geometry-registry.d.ts.map +0 -1
  367. package/dist/scene/geometry-registry.js +0 -20
  368. package/dist/scene/instance-registry.d.ts +0 -36
  369. package/dist/scene/instance-registry.d.ts.map +0 -1
  370. package/dist/scene/instance-registry.js +0 -55
  371. package/dist/scene/instancers/grid.d.ts +0 -2
  372. package/dist/scene/instancers/grid.d.ts.map +0 -1
  373. package/dist/scene/instancers/grid.js +0 -36
  374. package/dist/scene/instancers/index.d.ts +0 -8
  375. package/dist/scene/instancers/index.d.ts.map +0 -1
  376. package/dist/scene/instancers/index.js +0 -7
  377. package/dist/scene/light-camera-factory.d.ts +0 -23
  378. package/dist/scene/light-camera-factory.d.ts.map +0 -1
  379. package/dist/scene/light-camera-factory.js +0 -68
  380. package/dist/scene/material-factory.d.ts +0 -17
  381. package/dist/scene/material-factory.d.ts.map +0 -1
  382. package/dist/scene/material-factory.js +0 -197
  383. package/dist/scene/material-registry.d.ts +0 -40
  384. package/dist/scene/material-registry.d.ts.map +0 -1
  385. package/dist/scene/material-registry.js +0 -44
  386. package/dist/scene/materials/index.d.ts +0 -8
  387. package/dist/scene/materials/index.d.ts.map +0 -1
  388. package/dist/scene/materials/index.js +0 -7
  389. package/dist/scene/materials/water.d.ts +0 -2
  390. package/dist/scene/materials/water.d.ts.map +0 -1
  391. package/dist/scene/materials/water.js +0 -54
  392. package/dist/scene/parse.d.ts +0 -23
  393. package/dist/scene/parse.d.ts.map +0 -1
  394. package/dist/scene/parse.js +0 -179
  395. package/dist/scene/particles-factory.d.ts +0 -33
  396. package/dist/scene/particles-factory.d.ts.map +0 -1
  397. package/dist/scene/particles-factory.js +0 -282
  398. package/dist/scene/scene-apply.d.ts +0 -109
  399. package/dist/scene/scene-apply.d.ts.map +0 -1
  400. package/dist/scene/scene-apply.js +0 -326
  401. package/dist/scene/scene-diff-schema.d.ts +0 -285
  402. package/dist/scene/scene-diff-schema.d.ts.map +0 -1
  403. package/dist/scene/scene-diff-schema.js +0 -92
  404. package/dist/scene/scene-diff-types.d.ts +0 -40
  405. package/dist/scene/scene-diff-types.d.ts.map +0 -1
  406. package/dist/scene/scene-diff-types.js +0 -14
  407. package/dist/scene/scene-loader.d.ts +0 -177
  408. package/dist/scene/scene-loader.d.ts.map +0 -1
  409. package/dist/scene/scene-loader.js +0 -1213
  410. package/dist/scene/scene-query.d.ts +0 -11
  411. package/dist/scene/scene-query.d.ts.map +0 -1
  412. package/dist/scene/scene-query.js +0 -63
  413. package/dist/scene/scene-types.d.ts +0 -10
  414. package/dist/scene/scene-types.d.ts.map +0 -1
  415. package/dist/scene/scene-types.js +0 -8
  416. package/dist/scene/scene-version.d.ts +0 -26
  417. package/dist/scene/scene-version.d.ts.map +0 -1
  418. package/dist/scene/scene-version.js +0 -34
  419. package/dist/scene/schema/animation.d.ts +0 -8
  420. package/dist/scene/schema/animation.d.ts.map +0 -1
  421. package/dist/scene/schema/animation.js +0 -42
  422. package/dist/scene/schema/audio.d.ts +0 -13
  423. package/dist/scene/schema/audio.d.ts.map +0 -1
  424. package/dist/scene/schema/audio.js +0 -22
  425. package/dist/scene/schema/camera.d.ts +0 -28
  426. package/dist/scene/schema/camera.d.ts.map +0 -1
  427. package/dist/scene/schema/camera.js +0 -17
  428. package/dist/scene/schema/collider.d.ts +0 -40
  429. package/dist/scene/schema/collider.d.ts.map +0 -1
  430. package/dist/scene/schema/collider.js +0 -55
  431. package/dist/scene/schema/entity-ref.d.ts +0 -31
  432. package/dist/scene/schema/entity-ref.d.ts.map +0 -1
  433. package/dist/scene/schema/entity-ref.js +0 -61
  434. package/dist/scene/schema/entity.d.ts +0 -1036
  435. package/dist/scene/schema/entity.d.ts.map +0 -1
  436. package/dist/scene/schema/entity.js +0 -153
  437. package/dist/scene/schema/environment.d.ts +0 -425
  438. package/dist/scene/schema/environment.d.ts.map +0 -1
  439. package/dist/scene/schema/environment.js +0 -357
  440. package/dist/scene/schema/index.d.ts +0 -39
  441. package/dist/scene/schema/index.d.ts.map +0 -1
  442. package/dist/scene/schema/index.js +0 -20
  443. package/dist/scene/schema/instances.d.ts +0 -14
  444. package/dist/scene/schema/instances.d.ts.map +0 -1
  445. package/dist/scene/schema/instances.js +0 -28
  446. package/dist/scene/schema/joint.d.ts +0 -23
  447. package/dist/scene/schema/joint.d.ts.map +0 -1
  448. package/dist/scene/schema/joint.js +0 -23
  449. package/dist/scene/schema/light.d.ts +0 -38
  450. package/dist/scene/schema/light.d.ts.map +0 -1
  451. package/dist/scene/schema/light.js +0 -26
  452. package/dist/scene/schema/material.d.ts +0 -199
  453. package/dist/scene/schema/material.d.ts.map +0 -1
  454. package/dist/scene/schema/material.js +0 -99
  455. package/dist/scene/schema/mesh.d.ts +0 -48
  456. package/dist/scene/schema/mesh.d.ts.map +0 -1
  457. package/dist/scene/schema/mesh.js +0 -82
  458. package/dist/scene/schema/particles.d.ts +0 -2178
  459. package/dist/scene/schema/particles.d.ts.map +0 -1
  460. package/dist/scene/schema/particles.js +0 -321
  461. package/dist/scene/schema/physics.d.ts +0 -56
  462. package/dist/scene/schema/physics.d.ts.map +0 -1
  463. package/dist/scene/schema/physics.js +0 -37
  464. package/dist/scene/schema/scene-file.d.ts +0 -304
  465. package/dist/scene/schema/scene-file.d.ts.map +0 -1
  466. package/dist/scene/schema/scene-file.js +0 -262
  467. package/dist/scene/schema/shadow.d.ts +0 -28
  468. package/dist/scene/schema/shadow.d.ts.map +0 -1
  469. package/dist/scene/schema/shadow.js +0 -20
  470. package/dist/scene/schema/spline.d.ts +0 -25
  471. package/dist/scene/schema/spline.d.ts.map +0 -1
  472. package/dist/scene/schema/spline.js +0 -15
  473. package/dist/scene/schema/tuples.d.ts +0 -12
  474. package/dist/scene/schema/tuples.d.ts.map +0 -1
  475. package/dist/scene/schema/tuples.js +0 -14
  476. package/dist/scene/schema/ui.d.ts +0 -880
  477. package/dist/scene/schema/ui.d.ts.map +0 -1
  478. package/dist/scene/schema/ui.js +0 -506
  479. package/dist/scene/user-data.d.ts +0 -171
  480. package/dist/scene/user-data.d.ts.map +0 -1
  481. package/dist/scene/user-data.js +0 -137
  482. package/dist/setup/setup-audio.d.ts +0 -20
  483. package/dist/setup/setup-audio.d.ts.map +0 -1
  484. package/dist/setup/setup-audio.js +0 -41
  485. package/dist/setup/setup-particles.d.ts +0 -17
  486. package/dist/setup/setup-particles.d.ts.map +0 -1
  487. package/dist/setup/setup-particles.js +0 -16
  488. package/dist/setup/setup-physics.d.ts +0 -25
  489. package/dist/setup/setup-physics.d.ts.map +0 -1
  490. package/dist/setup/setup-physics.js +0 -51
  491. package/dist/setup/setup-renderer.d.ts +0 -69
  492. package/dist/setup/setup-renderer.d.ts.map +0 -1
  493. package/dist/setup/setup-renderer.js +0 -363
  494. package/dist/tools/define-tool.d.ts +0 -105
  495. package/dist/tools/define-tool.d.ts.map +0 -1
  496. package/dist/tools/define-tool.js +0 -82
  497. package/dist/world2d/authoring-2d.d.ts +0 -76
  498. package/dist/world2d/authoring-2d.d.ts.map +0 -1
  499. package/dist/world2d/authoring-2d.js +0 -176
  500. package/dist/world2d/capture-to-scene2d.d.ts +0 -5
  501. package/dist/world2d/capture-to-scene2d.d.ts.map +0 -1
  502. package/dist/world2d/capture-to-scene2d.js +0 -49
  503. package/dist/world2d/collision-2d.d.ts +0 -52
  504. package/dist/world2d/collision-2d.d.ts.map +0 -1
  505. package/dist/world2d/collision-2d.js +0 -70
  506. package/dist/world2d/components-2d.d.ts +0 -47
  507. package/dist/world2d/components-2d.d.ts.map +0 -1
  508. package/dist/world2d/components-2d.js +0 -77
  509. package/dist/world2d/index.d.ts +0 -34
  510. package/dist/world2d/index.d.ts.map +0 -1
  511. package/dist/world2d/index.js +0 -32
  512. package/dist/world2d/ingest-iframe-2d.d.ts +0 -82
  513. package/dist/world2d/ingest-iframe-2d.d.ts.map +0 -1
  514. package/dist/world2d/ingest-iframe-2d.js +0 -166
  515. package/dist/world2d/ingest2d.d.ts +0 -97
  516. package/dist/world2d/ingest2d.d.ts.map +0 -1
  517. package/dist/world2d/ingest2d.js +0 -40
  518. package/dist/world2d/physics2d-registry.d.ts +0 -24
  519. package/dist/world2d/physics2d-registry.d.ts.map +0 -1
  520. package/dist/world2d/physics2d-registry.js +0 -38
  521. package/dist/world2d/pixi-game-adapter.d.ts +0 -107
  522. package/dist/world2d/pixi-game-adapter.d.ts.map +0 -1
  523. package/dist/world2d/pixi-game-adapter.js +0 -211
  524. package/dist/world2d/pixi-surface.d.ts +0 -39
  525. package/dist/world2d/pixi-surface.d.ts.map +0 -1
  526. package/dist/world2d/pixi-surface.js +0 -47
  527. package/dist/world2d/scene-capture-2d.d.ts +0 -43
  528. package/dist/world2d/scene-capture-2d.d.ts.map +0 -1
  529. package/dist/world2d/scene-capture-2d.js +0 -92
  530. package/dist/world2d/scene2d-loader.d.ts +0 -27
  531. package/dist/world2d/scene2d-loader.d.ts.map +0 -1
  532. package/dist/world2d/scene2d-loader.js +0 -274
  533. package/dist/world2d/schema/entity2d.d.ts +0 -102
  534. package/dist/world2d/schema/entity2d.d.ts.map +0 -1
  535. package/dist/world2d/schema/entity2d.js +0 -119
  536. package/dist/world2d/schema/physics2d.d.ts +0 -46
  537. package/dist/world2d/schema/physics2d.d.ts.map +0 -1
  538. package/dist/world2d/schema/physics2d.js +0 -45
  539. package/dist/world2d/schema/sprite.d.ts +0 -42
  540. package/dist/world2d/schema/sprite.d.ts.map +0 -1
  541. package/dist/world2d/schema/sprite.js +0 -63
  542. package/dist/world2d/schema/tilemap.d.ts +0 -15
  543. package/dist/world2d/schema/tilemap.d.ts.map +0 -1
  544. package/dist/world2d/schema/tilemap.js +0 -19
  545. package/dist/world2d/schema/tuples2d.d.ts +0 -20
  546. package/dist/world2d/schema/tuples2d.d.ts.map +0 -1
  547. package/dist/world2d/schema/tuples2d.js +0 -19
  548. package/dist/world2d/system-adapters-2d.d.ts +0 -16
  549. package/dist/world2d/system-adapters-2d.d.ts.map +0 -1
  550. package/dist/world2d/system-adapters-2d.js +0 -37
  551. package/dist/world2d/transform-writer-2d.d.ts +0 -16
  552. package/dist/world2d/transform-writer-2d.d.ts.map +0 -1
  553. package/dist/world2d/transform-writer-2d.js +0 -22
  554. package/dist/world2d/types.d.ts +0 -53
  555. package/dist/world2d/types.d.ts.map +0 -1
  556. package/dist/world2d/types.js +0 -1
  557. package/src/runtime/scene-ui-bridge.ts +0 -86
  558. package/src/runtime/scene-ui-data.ts +0 -119
  559. package/src/scene/schema/ui.ts +0 -602
@@ -1,351 +0,0 @@
1
- /**
2
- * D3 — stable binding from a Theatre Sheet Object to a `THREE.Object3D`/
3
- * camera (spec §10 D3, §5.3). This is the "thin integration code" the spec
4
- * calls for: it reads a Theatre object's pull-based `.value` on every clock
5
- * crossing and writes the (small, fixed) set of known sub-props straight
6
- * onto the target's real Three.js properties. It is deliberately NOT a
7
- * generic/arbitrary property-path evaluator — the only shapes understood are
8
- * the ones declared below (`TransformProps`, `CameraLensProps`), matching
9
- * "No arbitrary unsafe property-path evaluator is introduced" (D3 AC).
10
- *
11
- * Reads `sheetObject.value` rather than subscribing to Theatre's
12
- * `onValuesChange` push channel — see `theatre-clock-binding.ts`'s module doc
13
- * for why: `.value` is synchronously fresh immediately after
14
- * `sequence.position` is set, while `onValuesChange` is batched on Theatre's
15
- * own raf-driven ticker and is not delivered 1:1 with each synchronous clock
16
- * seek (it may coalesce several writes into one notification, or — headless,
17
- * no-raf — never fire at all).
18
- *
19
- * Object identity: a Theatre Sheet Object always carries both its stable,
20
- * readable Theatre name (`sheetObject.address.objectKey`) and, since the
21
- * caller supplies the bound `THREE.Object3D` directly, that object's own
22
- * engine identity (`Object3D.uuid`/`.name`/`userData['entityId']`) — both are
23
- * inspectable from the object references the binding already holds; nothing
24
- * further to thread through.
25
- *
26
- * ## Remaining D3 channels: quaternion/material/light/post-processing/UI/Pixi
27
- *
28
- * The rest of the D3 AC's channel list (spec §10 D3: "Position,
29
- * rotation/quaternion, scale, camera lens, material/light, post-processing,
30
- * and selected UI properties have tested bindings") is implemented below,
31
- * each as its own small, explicit, TYPED helper — never a generic
32
- * property-path evaluator:
33
- *
34
- * - `bindObject3DQuaternion` — `Object3D.quaternion`, authored as a plain
35
- * `{x,y,z,w}` compound (see `QuaternionProps`'s doc for the interpolation
36
- * caveat and why the binding always normalizes).
37
- * - `bindMaterialProperties` — `color`/`opacity`/`emissiveIntensity`/
38
- * `roughness`/`metalness` on a real `THREE.Material`, feature-detecting
39
- * which sub-props the concrete material subtype actually has.
40
- * - `bindLightProperties` — `intensity`/`color` on a real `THREE.Light`.
41
- * - `bindBloomEffect` / `bindVignetteEffect` — `intensity`/`opacity` and
42
- * `offset`/`darkness` on real `postprocessing` `BloomEffect`/
43
- * `VignetteEffect` instances (the SAME package `setup-renderer.ts` already
44
- * wires into the engine's composer — no new post-processing stack).
45
- * - `bindDomElementStyle` — `opacity`/`translateX`/`translateY` on a
46
- * DOM-style-writable target (`DomStyleTarget`, a narrow structural
47
- * interface a real `HTMLElement` satisfies with no adapter).
48
- * - `bindPixiContainerTransform` — `x`/`y`/`rotation`/`scaleX`/`scaleY`/
49
- * `alpha` on a real `PIXI.Container`/`PIXI.Sprite`.
50
- *
51
- * All of the above are proven against REAL target objects in
52
- * `theatre-object-binding-d3.test.ts` — `BloomEffect`/`VignetteEffect`/
53
- * `PIXI.Container`/`PIXI.Sprite` all construct and expose plain,
54
- * synchronously-settable properties with no WebGL/canvas/renderer required,
55
- * so nothing here is a mock of the underlying library. The one channel that
56
- * genuinely cannot construct real headlessly in THIS repo's `environment:
57
- * 'node'` vitest lane (`vitest.config.ts` — no DOM) is a real `HTMLElement`;
58
- * `bindDomElementStyle` is typed against the narrow `DomStyleTarget`
59
- * structural interface instead of full `HTMLElement`, and its test exercises
60
- * a plain object literal shaped like one — the exact same binding code path
61
- * a real `HTMLElement`/React-overlay ref runs through in a browser or a
62
- * jsdom-backed test. Nothing here is deferred.
63
- */
64
- /** Thrown when a binding is constructed with a missing/falsy target. */
65
- export class TheatreBindingError extends Error {
66
- objectKey;
67
- constructor(message, objectKey) {
68
- super(message);
69
- this.objectKey = objectKey;
70
- this.name = 'TheatreBindingError';
71
- }
72
- }
73
- /**
74
- * Shared disposer wiring for every binding below (same one-shot-dispose
75
- * shape `bindObject3DTransform`/`bindCameraLens` each inline above) — pulled
76
- * into one helper only because six more binding functions follow, to avoid
77
- * repeating the identical five lines six more times. Behavior is identical
78
- * to the inline version: idempotent `dispose()`, no further writes after.
79
- */
80
- function toBinding(handle) {
81
- let disposed = false;
82
- return {
83
- dispose() {
84
- if (disposed)
85
- return;
86
- disposed = true;
87
- handle.dispose();
88
- },
89
- };
90
- }
91
- /**
92
- * Bind a Theatre Sheet Object's `position`/`rotation`/`scale` sub-props (any
93
- * subset) to a `THREE.Object3D`. Whichever of the three keys are present on
94
- * `sheetObject.value` are applied; missing keys are left untouched on the
95
- * target.
96
- *
97
- * @throws {TheatreBindingError} if `target` is null/undefined at bind time.
98
- */
99
- export function bindObject3DTransform(clock, sheetObject, target, options = {}) {
100
- if (!target) {
101
- throw new TheatreBindingError(`[bindObject3DTransform] missing target Object3D for Theatre object "${sheetObject.address.objectKey}"`, sheetObject.address.objectKey);
102
- }
103
- const phase = options.phase ?? 'preRender';
104
- const handle = clock.subscribe(phase, () => {
105
- const value = sheetObject.value;
106
- if (value.position) {
107
- target.position.set(value.position.x, value.position.y, value.position.z);
108
- }
109
- if (value.rotation) {
110
- target.rotation.set(value.rotation.x, value.rotation.y, value.rotation.z);
111
- }
112
- if (value.scale) {
113
- target.scale.set(value.scale.x, value.scale.y, value.scale.z);
114
- }
115
- });
116
- let disposed = false;
117
- return {
118
- dispose() {
119
- if (disposed)
120
- return;
121
- disposed = true;
122
- handle.dispose();
123
- },
124
- };
125
- }
126
- /**
127
- * Bind a Theatre Sheet Object's `fov`/`near`/`far` sub-props (any subset) to
128
- * a `THREE.PerspectiveCamera`'s lens, calling `updateProjectionMatrix()`
129
- * whenever any of them change.
130
- *
131
- * @throws {TheatreBindingError} if `camera` is null/undefined at bind time.
132
- */
133
- export function bindCameraLens(clock, sheetObject, camera, options = {}) {
134
- if (!camera) {
135
- throw new TheatreBindingError(`[bindCameraLens] missing target PerspectiveCamera for Theatre object "${sheetObject.address.objectKey}"`, sheetObject.address.objectKey);
136
- }
137
- const phase = options.phase ?? 'preRender';
138
- const handle = clock.subscribe(phase, () => {
139
- const value = sheetObject.value;
140
- let changed = false;
141
- if (typeof value.fov === 'number' && camera.fov !== value.fov) {
142
- camera.fov = value.fov;
143
- changed = true;
144
- }
145
- if (typeof value.near === 'number' && camera.near !== value.near) {
146
- camera.near = value.near;
147
- changed = true;
148
- }
149
- if (typeof value.far === 'number' && camera.far !== value.far) {
150
- camera.far = value.far;
151
- changed = true;
152
- }
153
- if (changed)
154
- camera.updateProjectionMatrix();
155
- });
156
- let disposed = false;
157
- return {
158
- dispose() {
159
- if (disposed)
160
- return;
161
- disposed = true;
162
- handle.dispose();
163
- },
164
- };
165
- }
166
- /**
167
- * Bind a Theatre Sheet Object's `quaternion` sub-prop to a `THREE.Object3D`'s
168
- * `.quaternion`. See `QuaternionProps`'s doc for the authored shape and its
169
- * interpolation caveat.
170
- *
171
- * @throws {TheatreBindingError} if `target` is null/undefined at bind time.
172
- */
173
- export function bindObject3DQuaternion(clock, sheetObject, target, options = {}) {
174
- if (!target) {
175
- throw new TheatreBindingError(`[bindObject3DQuaternion] missing target Object3D for Theatre object "${sheetObject.address.objectKey}"`, sheetObject.address.objectKey);
176
- }
177
- const phase = options.phase ?? 'preRender';
178
- const handle = clock.subscribe(phase, () => {
179
- const value = sheetObject.value;
180
- if (value.quaternion) {
181
- const { x, y, z, w } = value.quaternion;
182
- target.quaternion.set(x, y, z, w);
183
- target.quaternion.normalize();
184
- }
185
- });
186
- return toBinding(handle);
187
- }
188
- /**
189
- * Bind a Theatre Sheet Object's `color`/`opacity`/`emissiveIntensity`/
190
- * `roughness`/`metalness` sub-props (any subset the target material
191
- * supports) to a `THREE.Material`.
192
- *
193
- * @throws {TheatreBindingError} if `target` is null/undefined at bind time.
194
- */
195
- export function bindMaterialProperties(clock, sheetObject, target, options = {}) {
196
- if (!target) {
197
- throw new TheatreBindingError(`[bindMaterialProperties] missing target Material for Theatre object "${sheetObject.address.objectKey}"`, sheetObject.address.objectKey);
198
- }
199
- const material = target;
200
- const phase = options.phase ?? 'preRender';
201
- const handle = clock.subscribe(phase, () => {
202
- const value = sheetObject.value;
203
- if (value.color && material.color) {
204
- material.color.setRGB(value.color.r, value.color.g, value.color.b);
205
- }
206
- if (typeof value.opacity === 'number') {
207
- material.opacity = value.opacity;
208
- }
209
- if (typeof value.emissiveIntensity === 'number' && 'emissiveIntensity' in material) {
210
- material.emissiveIntensity = value.emissiveIntensity;
211
- }
212
- if (typeof value.roughness === 'number' && 'roughness' in material) {
213
- material.roughness = value.roughness;
214
- }
215
- if (typeof value.metalness === 'number' && 'metalness' in material) {
216
- material.metalness = value.metalness;
217
- }
218
- });
219
- return toBinding(handle);
220
- }
221
- /**
222
- * Bind a Theatre Sheet Object's `intensity`/`color` sub-props (any subset)
223
- * to a `THREE.Light`.
224
- *
225
- * @throws {TheatreBindingError} if `target` is null/undefined at bind time.
226
- */
227
- export function bindLightProperties(clock, sheetObject, target, options = {}) {
228
- if (!target) {
229
- throw new TheatreBindingError(`[bindLightProperties] missing target Light for Theatre object "${sheetObject.address.objectKey}"`, sheetObject.address.objectKey);
230
- }
231
- const phase = options.phase ?? 'preRender';
232
- const handle = clock.subscribe(phase, () => {
233
- const value = sheetObject.value;
234
- if (typeof value.intensity === 'number') {
235
- target.intensity = value.intensity;
236
- }
237
- if (value.color) {
238
- target.color.setRGB(value.color.r, value.color.g, value.color.b);
239
- }
240
- });
241
- return toBinding(handle);
242
- }
243
- /**
244
- * Bind a Theatre Sheet Object's `intensity`/`opacity` sub-props (any subset)
245
- * to a real `postprocessing` `BloomEffect` — the SAME `postprocessing` npm
246
- * package the engine's own composer pipeline already uses directly
247
- * (`setup-renderer.ts`), not a new post-processing stack.
248
- *
249
- * @throws {TheatreBindingError} if `effect` is null/undefined at bind time.
250
- */
251
- export function bindBloomEffect(clock, sheetObject, effect, options = {}) {
252
- if (!effect) {
253
- throw new TheatreBindingError(`[bindBloomEffect] missing target BloomEffect for Theatre object "${sheetObject.address.objectKey}"`, sheetObject.address.objectKey);
254
- }
255
- const phase = options.phase ?? 'preRender';
256
- const handle = clock.subscribe(phase, () => {
257
- const value = sheetObject.value;
258
- if (typeof value.intensity === 'number') {
259
- effect.intensity = value.intensity;
260
- }
261
- if (typeof value.opacity === 'number') {
262
- effect.blendMode.opacity.value = value.opacity;
263
- }
264
- });
265
- return toBinding(handle);
266
- }
267
- /**
268
- * Bind a Theatre Sheet Object's `offset`/`darkness` sub-props (any subset) to
269
- * a real `postprocessing` `VignetteEffect` — same package/no-wrapper note as
270
- * `bindBloomEffect` above.
271
- *
272
- * @throws {TheatreBindingError} if `effect` is null/undefined at bind time.
273
- */
274
- export function bindVignetteEffect(clock, sheetObject, effect, options = {}) {
275
- if (!effect) {
276
- throw new TheatreBindingError(`[bindVignetteEffect] missing target VignetteEffect for Theatre object "${sheetObject.address.objectKey}"`, sheetObject.address.objectKey);
277
- }
278
- const phase = options.phase ?? 'preRender';
279
- const handle = clock.subscribe(phase, () => {
280
- const value = sheetObject.value;
281
- if (typeof value.offset === 'number') {
282
- effect.offset = value.offset;
283
- }
284
- if (typeof value.darkness === 'number') {
285
- effect.darkness = value.darkness;
286
- }
287
- });
288
- return toBinding(handle);
289
- }
290
- /**
291
- * Bind a Theatre Sheet Object's `opacity`/`translateX`/`translateY`
292
- * sub-props (any subset) to a DOM-style-writable target's inline style. See
293
- * `DomStyleTarget`'s doc for how this is proven without a real browser DOM.
294
- *
295
- * @throws {TheatreBindingError} if `target` is null/undefined at bind time.
296
- */
297
- export function bindDomElementStyle(clock, sheetObject, target, options = {}) {
298
- if (!target) {
299
- throw new TheatreBindingError(`[bindDomElementStyle] missing target DOM element for Theatre object "${sheetObject.address.objectKey}"`, sheetObject.address.objectKey);
300
- }
301
- const phase = options.phase ?? 'preRender';
302
- let lastTranslateX = 0;
303
- let lastTranslateY = 0;
304
- const handle = clock.subscribe(phase, () => {
305
- const value = sheetObject.value;
306
- if (typeof value.opacity === 'number') {
307
- target.style.opacity = String(value.opacity);
308
- }
309
- if (typeof value.translateX === 'number')
310
- lastTranslateX = value.translateX;
311
- if (typeof value.translateY === 'number')
312
- lastTranslateY = value.translateY;
313
- if (typeof value.translateX === 'number' || typeof value.translateY === 'number') {
314
- target.style.transform = `translate(${lastTranslateX}px, ${lastTranslateY}px)`;
315
- }
316
- });
317
- return toBinding(handle);
318
- }
319
- /**
320
- * Bind a Theatre Sheet Object's `x`/`y`/`rotation`/`scaleX`/`scaleY`/`alpha`
321
- * sub-props (any subset) to a real `PIXI.Container`/`PIXI.Sprite` (reusing
322
- * the world2d stack's own `pixi.js` dependency — see this module's
323
- * type-only `pixi.js` import above and its doc note on why the engine core
324
- * never value-imports it). Plain `Container`/`Sprite` construction needs no
325
- * canvas/WebGL context, so this is proven against a REAL Pixi object in
326
- * `theatre-object-binding-d3.test.ts`, not a stand-in.
327
- *
328
- * @throws {TheatreBindingError} if `target` is null/undefined at bind time.
329
- */
330
- export function bindPixiContainerTransform(clock, sheetObject, target, options = {}) {
331
- if (!target) {
332
- throw new TheatreBindingError(`[bindPixiContainerTransform] missing target PIXI.Container for Theatre object "${sheetObject.address.objectKey}"`, sheetObject.address.objectKey);
333
- }
334
- const phase = options.phase ?? 'preRender';
335
- const handle = clock.subscribe(phase, () => {
336
- const value = sheetObject.value;
337
- if (typeof value.x === 'number')
338
- target.x = value.x;
339
- if (typeof value.y === 'number')
340
- target.y = value.y;
341
- if (typeof value.rotation === 'number')
342
- target.rotation = value.rotation;
343
- if (typeof value.scaleX === 'number')
344
- target.scale.x = value.scaleX;
345
- if (typeof value.scaleY === 'number')
346
- target.scale.y = value.scaleY;
347
- if (typeof value.alpha === 'number')
348
- target.alpha = value.alpha;
349
- });
350
- return toBinding(handle);
351
- }
@@ -1,111 +0,0 @@
1
- import * as THREE from 'three';
2
- import type { Actor, AnyActor, AnyStateMachine } from 'xstate';
3
- /**
4
- * E2 — bind a native XState actor to a native `THREE.AnimationMixer` (spec
5
- * §11 E2, §5.6, §3.3).
6
- *
7
- * A native XState actor drives native `THREE.AnimationAction`s: entering a
8
- * state activates its `meta.animation` clip(s); leaving it deactivates them.
9
- * There is no VGAI-specific trigger vocabulary — callers drive the machine
10
- * with ordinary `actor.send(event)` (or the actor is externally owned and
11
- * this binding merely observes it); XState alone decides which state is
12
- * active.
13
- *
14
- * ## How enter/exit crossfades use NATIVE Three primitives (not a
15
- * hand-rolled weight scheduler)
16
- *
17
- * The former `AnimGraph` runtime (removed by E5) pre-played every action at
18
- * weight 0 and re-set every action's weight explicitly every frame,
19
- * BYPASSING `AnimationAction.fadeIn`/`fadeOut`/`crossFadeTo` (to dodge
20
- * multi-layer weight-summing bugs it hit historically).
21
- * E2 deliberately does the opposite, per the spec AC ("use
22
- * AnimationAction.crossFadeTo / fadeIn / fadeOut per the metadata"): the
23
- * ENTER/EXIT edge of an XState state transition is represented by one real
24
- * Three fade call, and `mixer.update(dt)` — the same call that advances clip
25
- * time — is what advances the fade too. No parallel elapsed-time clock
26
- * drives "is the fade done" for a plain (non-blend-tree) state; Three's own
27
- * scheduler is authoritative end to end.
28
- *
29
- * A **blend-tree** state is, at the instant of entry, represented by ONE
30
- * clip — its heaviest-weighted child at that instant (the same "representative"
31
- * duration/action heuristic the removed `AnimGraph.LayerRuntime` used) — which
32
- * receives the native crossFadeTo/fadeIn. Sibling
33
- * children stay silent (weight 0) until the crossfade window elapses, at
34
- * which point the FULL live blend-tree distribution (`evaluateBlendTree`,
35
- * reused verbatim from `blend-node.ts` — no reimplementation) takes over via
36
- * `setEffectiveWeight` every tick, recomputed from the actor's live
37
- * context/selector value. This is a documented simplification (Three's
38
- * `crossFadeTo` is strictly 1-to-1; there is no native N-ary blend-tree
39
- * crossfade), the same spirit as `blend-node.ts`'s own documented 2D
40
- * "smooth approximation, not Delaunay/barycentric" caveat. The crossfade
41
- * window itself is tracked as a small elapsed-seconds counter, decremented
42
- * by the SAME `dt` passed to `mixer.update(dt)` — it never drifts from
43
- * Three's own fade schedule because both are driven by the identical `dt`
44
- * stream, so it is bookkeeping for "when to hand off from native fade to
45
- * live blend", not a second competing scheduler.
46
- *
47
- * ## Mixer advancement uses the canonical engine ANIMATION phase
48
- *
49
- * `tick(dt)` has exactly the engine's `SystemFn` shape (`core/types.ts`:
50
- * `(dt: number) => void`) — a caller registers this binding on the engine's
51
- * one real fixed-step scheduler at the ANIMATION phase, exactly as any other
52
- * per-frame system: `ctx.systems.add(SystemPhase.ANIMATION, binding.tick)`
53
- * (or, when the binding is owned by a `GameComponent` that also owns the
54
- * actor — the §5.6 pattern the examples use — the component simply calls
55
- * `binding.tick(dt)` from its own `update(dt)`). Either way mixer advancement
56
- * rides that one scheduler; no second scheduler is invented here. (This is
57
- * the same ANIMATION-phase slot the removed `AnimGraph` runtime's global
58
- * `animationSystem` occupied before E5 — see
59
- * docs/AI-NATIVE-AUTHORING-IMPLEMENTATION-SPEC.md §3.3/§11 E5. The D1
60
- * `AnimationClock` — `animation-clock.ts` — is a distinct, sibling concern: a
61
- * per-cinematic/Theatre-timeline seek clock for scrubbing/export, not wired
62
- * into ordinary gameplay ticking today.)
63
- */
64
- /** Thrown for a binding-time problem: a missing clip, or a target-less bind. */
65
- export declare class AnimationBindingError extends Error {
66
- readonly stateId?: string | undefined;
67
- constructor(message: string, stateId?: string | undefined);
68
- }
69
- export interface XStateAnimationBindingOptions {
70
- /**
71
- * Reads the blend-tree parameter map from the actor's live context.
72
- * Defaults to treating `context` itself as `Record<string, number | boolean>`
73
- * (matches the §5.6 example: `context: { speed: number; grounded: boolean }`
74
- * fed straight into a blend tree keyed by `parameter: 'speed'`). Override
75
- * when a machine's blend-tree parameters need deriving from context via a
76
- * selector rather than reading top-level fields directly.
77
- */
78
- selectParameters?: (context: unknown) => Record<string, number | boolean>;
79
- }
80
- export interface XStateAnimationBinding {
81
- /**
82
- * Advance the bound mixer (and any live blend-tree weights) by `dt`
83
- * seconds. Register on the engine's `'animation'` phase — see the module
84
- * doc above. A no-op after `dispose()`.
85
- */
86
- tick: (dt: number) => void;
87
- /** The bound actor, for convenience (`binding.actor.send({...})`). */
88
- readonly actor: AnyActor;
89
- /**
90
- * Stops observing the actor (does NOT stop the actor itself — the actor's
91
- * lifecycle is the caller's, this binding only ever subscribed to it) and
92
- * uncaches every `AnimationAction` this binding created from the mixer, so
93
- * a dispose+rebind cycle (e.g. hot-reload, despawn/respawn) does not leak
94
- * mixer-cached actions. Idempotent; `tick()` is a no-op after this.
95
- */
96
- dispose: () => void;
97
- }
98
- /**
99
- * Bind an XState actor to a `THREE.AnimationMixer`.
100
- *
101
- * Validates EVERY state's `meta.animation` (via `collectMachineAnimationMeta`,
102
- * E1) and resolves every referenced clip name against `clips` up front, at
103
- * bind time — before the actor enters any of those states — so an agent
104
- * authoring a machine with a typo'd clip name gets an actionable error
105
- * immediately, not only once gameplay happens to reach that state.
106
- *
107
- * @throws {AnimationBindingError} if a state's meta references a clip name
108
- * not present in `clips`, naming both the state and the clip.
109
- */
110
- export declare function bindXStateAnimation(actor: Actor<AnyStateMachine>, mixer: THREE.AnimationMixer, clips: Map<string, THREE.AnimationClip>, options?: XStateAnimationBindingOptions): XStateAnimationBinding;
111
- //# sourceMappingURL=xstate-animation-binding.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xstate-animation-binding.d.ts","sourceRoot":"","sources":["../../src/animation/xstate-animation-binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAY/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AAEH,gFAAgF;AAChF,qBAAa,qBAAsB,SAAQ,KAAK;IAG5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM;gBADzB,OAAO,EAAE,MAAM,EACN,OAAO,CAAC,EAAE,MAAM,YAAA;CAK5B;AAED,MAAM,WAAW,6BAA6B;IAC5C;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAgCD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,EAC7B,KAAK,EAAE,KAAK,CAAC,cAAc,EAC3B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,EACvC,OAAO,GAAE,6BAAkC,GAC1C,sBAAsB,CA8MxB"}