@vgai/engine 0.5.0 → 0.5.1

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,90 +0,0 @@
1
- import { Offline } from 'tone';
2
- /**
3
- * G2 — Integrate Tone with the Canonical Clock, OFFLINE-render half (spec
4
- * §13 G2, and the G4/I6 seam it is deliberately shaped for). This module
5
- * renders a Tone composition over an exact `[start, end)` time range to a
6
- * real `AudioBuffer` via `Tone.Offline` — i.e. `OfflineAudioContext`, NOT a
7
- * live real-time `AudioContext` — such that identical inputs produce
8
- * bit-identical output samples on every call. This is what makes offline
9
- * Tone audio safe to mux into a deterministically-rendered video (G4/I6):
10
- * the video side already re-renders frame-by-frame from an exact clock
11
- * position, and this is the audio side's equivalent — an exact re-render
12
- * from an exact time range, not a live capture of whatever happened to play.
13
- *
14
- * ## Why this can't run in plain Node (documented, not assumed)
15
- *
16
- * `Tone.Offline` ultimately constructs a real `OfflineAudioContext`
17
- * (via `standardized-audio-context`, Tone's own dependency). Node has no
18
- * native Web Audio implementation, so `standardized-audio-context` throws
19
- * `"Missing the native OfflineAudioContext constructor."` the moment
20
- * `Tone.Offline(...)` is actually invoked — confirmed empirically against
21
- * this repo's installed `tone@15.1.22` before writing this module (plain
22
- * `import * as Tone from 'tone'` succeeds; calling `Tone.Offline(...)` in a
23
- * Node process throws immediately). There is no lightweight polyfill in this
24
- * repo's dependency tree, and installing a native Node Web Audio addon is
25
- * out of scope for this unit (build-box constraints). The determinism proof
26
- * for this module therefore runs in a REAL headless-Chromium page via
27
- * Playwright — see `packages/engine/e2e/tests/tone-audio-g1-g2.spec.ts`
28
- * — mirroring how I0 proved video-frame determinism. This module's own
29
- * `packages/engine/test/audio/tone-offline-render.test.ts` covers everything
30
- * that does NOT require a real `OfflineAudioContext` (range validation,
31
- * synchronous pre-render cancellation) directly in Node.
32
- *
33
- * ## Composition contract
34
- *
35
- * `compose` is called by `Tone.Offline` itself, inside the offline context —
36
- * build the SAME graph you would in real-time Tone code
37
- * (`new Tone.Synth().toDestination()`, `context.transport.schedule(...)`,
38
- * etc; see Tone's own `Offline` docs). Nothing about this wrapper changes
39
- * Tone's native API surface — `compose`'s parameter is `Tone.Offline`'s own
40
- * callback type, re-derived structurally (`Parameters<typeof Offline>[0]`)
41
- * rather than duplicated, so this module can never drift from Tone's actual
42
- * signature.
43
- *
44
- * ## Cancellation — cooperative, not a true mid-render abort
45
- *
46
- * The Web Audio spec gives `OfflineAudioContext` no `.close()`/cancel API
47
- * once `startRendering()` is in flight, and neither does Tone. `signal`
48
- * therefore provides COOPERATIVE cancellation only: if `signal` is already
49
- * aborted before this function calls `Tone.Offline`, the render never
50
- * starts at all (checked synchronously, before any `OfflineAudioContext` is
51
- * created). If `signal` aborts WHILE a render is in flight, this function's
52
- * returned promise rejects immediately with an `AbortError` — so a caller
53
- * (e.g. a render-cancellation UI action) sees the render "stop" from its own
54
- * perspective and never receives/uses the resulting buffer — even though
55
- * the underlying browser-native render may keep running in the background
56
- * until it would have finished anyway. This is an honest, documented
57
- * limitation, not a gap: no browser API makes a stronger guarantee possible.
58
- */
59
- /** Tone's own `Offline` callback signature, re-derived (not re-typed) so
60
- * this module can never drift from the real function it wraps. */
61
- export type ToneOfflineComposeFn = Parameters<typeof Offline>[0];
62
- export interface ToneOfflineRenderRequest {
63
- /** Canonical/Theatre-time range start, in seconds. */
64
- readonly start: number;
65
- /** Canonical/Theatre-time range end, in seconds. Must be `> start`. */
66
- readonly end: number;
67
- /** Output sample rate. Default 44100 (CD-quality, FFmpeg's usual default). */
68
- readonly sampleRate?: number;
69
- /** Output channel count. Default 2 (stereo). */
70
- readonly channels?: number;
71
- /** Builds the Tone graph inside the offline context — Tone's native
72
- * `Offline` callback, unmodified. Receives local time `0` at `start`. */
73
- readonly compose: ToneOfflineComposeFn;
74
- /** Optional cooperative-cancellation signal — see module doc above. */
75
- readonly signal?: AbortSignal;
76
- }
77
- export interface ToneOfflineRenderResult {
78
- /** The rendered PCM, as a real (native) `AudioBuffer` — `.getChannelData(n)`
79
- * gives the Float32 samples for channel `n`, ready for a digest/RMS
80
- * computation or (eventually, G4/I6) FFmpeg muxing. */
81
- readonly buffer: AudioBuffer;
82
- readonly durationSeconds: number;
83
- readonly sampleRate: number;
84
- readonly channels: number;
85
- }
86
- /** Render `request.compose`'s Tone graph offline over `[start, end)`,
87
- * producing a deterministic `AudioBuffer`. See module doc for the
88
- * determinism/cancellation contract. */
89
- export declare function renderToneOffline(request: ToneOfflineRenderRequest): Promise<ToneOfflineRenderResult>;
90
- //# sourceMappingURL=tone-offline-render.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tone-offline-render.d.ts","sourceRoot":"","sources":["../../src/audio/tone-offline-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAEH;mEACmE;AACnE,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjE,MAAM,WAAW,wBAAwB;IACvC,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,gDAAgD;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;8EAC0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,uEAAuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC;;4DAEwD;IACxD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAKD;;yCAEyC;AACzC,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,uBAAuB,CAAC,CA4ClC"}
@@ -1,56 +0,0 @@
1
- import { Offline } from 'tone';
2
- const DEFAULT_SAMPLE_RATE = 44100;
3
- const DEFAULT_CHANNELS = 2;
4
- /** Render `request.compose`'s Tone graph offline over `[start, end)`,
5
- * producing a deterministic `AudioBuffer`. See module doc for the
6
- * determinism/cancellation contract. */
7
- export async function renderToneOffline(request) {
8
- const { start, end, sampleRate = DEFAULT_SAMPLE_RATE, channels = DEFAULT_CHANNELS, compose, signal, } = request;
9
- if (!Number.isFinite(start) || !Number.isFinite(end) || end <= start) {
10
- throw new Error(`[tone-offline-render] invalid range [${start}, ${end}) — end must be a finite number > start`);
11
- }
12
- if (!Number.isFinite(sampleRate) || sampleRate <= 0) {
13
- throw new Error(`[tone-offline-render] sampleRate must be a finite number > 0, got ${sampleRate}`);
14
- }
15
- if (!Number.isInteger(channels) || channels <= 0) {
16
- throw new Error(`[tone-offline-render] channels must be a positive integer, got ${channels}`);
17
- }
18
- // Cooperative cancellation, checked BEFORE ever constructing an
19
- // OfflineAudioContext — an already-aborted signal must never start a
20
- // render at all (see module doc).
21
- if (signal?.aborted) {
22
- throw createAbortError();
23
- }
24
- const durationSeconds = end - start;
25
- const renderPromise = Offline(compose, durationSeconds, channels, sampleRate);
26
- const toneBuffer = signal ? await raceAbort(renderPromise, signal) : await renderPromise;
27
- const buffer = toneBuffer.get();
28
- if (!buffer) {
29
- throw new Error('[tone-offline-render] Tone.Offline resolved without a decoded AudioBuffer');
30
- }
31
- return {
32
- buffer,
33
- durationSeconds,
34
- sampleRate: buffer.sampleRate,
35
- channels: buffer.numberOfChannels,
36
- };
37
- }
38
- function createAbortError() {
39
- return new DOMException('[tone-offline-render] render canceled', 'AbortError');
40
- }
41
- /** Race `promise` against `signal` firing — resolves/rejects with whichever
42
- * happens first, without altering the underlying Web Audio render (see
43
- * module doc's "cooperative, not a true mid-render abort" section). */
44
- function raceAbort(promise, signal) {
45
- return new Promise((resolve, reject) => {
46
- const onAbort = () => reject(createAbortError());
47
- signal.addEventListener('abort', onAbort, { once: true });
48
- promise.then((value) => {
49
- signal.removeEventListener('abort', onAbort);
50
- resolve(value);
51
- }, (err) => {
52
- signal.removeEventListener('abort', onAbort);
53
- reject(err);
54
- });
55
- });
56
- }
@@ -1,38 +0,0 @@
1
- /**
2
- * Pure PCM -> 16-bit WAV encoder (spec §15 I6 "Encode and Mux", audio half —
3
- * `docs/AI-NATIVE-AUTHORING-IMPLEMENTATION-SPEC.md`). This module takes
4
- * already-rendered Float32 channel data (e.g. `AudioBuffer.getChannelData(n)`
5
- * from a `Tone.Offline` render, `audio/tone-offline-render.ts`) and produces
6
- * a standard little-endian, 16-bit-PCM, interleaved RIFF/WAVE file as raw
7
- * bytes — no `AudioBuffer`/`AudioContext` dependency, so this runs equally in
8
- * a browser render-mode page (`runtime/render-audio-control.ts`) and in
9
- * plain Node (this module's own `packages/engine/test/audio/wav-encode.test.ts`,
10
- * no Playwright needed).
11
- *
12
- * 16-bit PCM (not 32-bit float) is the deliberate choice named by the I6 AC
13
- * ("16-bit PCM WAV is fine") — it is universally decodable by every FFmpeg
14
- * build without an extra format flag, keeping the video-mux step's ffmpeg
15
- * invocation ordinary and portable.
16
- */
17
- export interface PcmToWavInput {
18
- /** One `Float32Array` per channel, each sample in `[-1, 1]` (values outside
19
- * that range are clamped, not thrown on — real synthesis can transiently
20
- * clip). All channels must have equal length. */
21
- readonly channelData: readonly Float32Array[];
22
- readonly sampleRate: number;
23
- }
24
- /** Encode `input` as a complete little-endian, 16-bit-PCM, interleaved
25
- * RIFF/WAVE file (44-byte canonical header + data chunk). Throws on an
26
- * empty/mismatched channel set rather than silently producing a malformed
27
- * file — this module's own contribution to the "fail loudly, never a
28
- * silent no-op" convention `runtime/render-control.ts` documents. */
29
- export declare function encodeWav16(input: PcmToWavInput): Uint8Array;
30
- /** RMS + peak over all channels/samples — the same "non-trivial audio, not
31
- * an all-zero buffer" sanity check `tone-audio-main.ts`'s fixture computes,
32
- * factored out here so both that fixture and the render-audio harness can
33
- * share one implementation instead of drifting copies. */
34
- export declare function pcmStats(channelData: readonly Float32Array[]): {
35
- rms: number;
36
- peak: number;
37
- };
38
- //# sourceMappingURL=wav-encode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wav-encode.d.ts","sourceRoot":"","sources":["../../src/audio/wav-encode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,aAAa;IAC5B;;sDAEkD;IAClD,QAAQ,CAAC,WAAW,EAAE,SAAS,YAAY,EAAE,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAeD;;;;sEAIsE;AACtE,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,CAwD5D;AAED;;;2DAG2D;AAC3D,wBAAgB,QAAQ,CAAC,WAAW,EAAE,SAAS,YAAY,EAAE,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAa5F"}
@@ -1,97 +0,0 @@
1
- /**
2
- * Pure PCM -> 16-bit WAV encoder (spec §15 I6 "Encode and Mux", audio half —
3
- * `docs/AI-NATIVE-AUTHORING-IMPLEMENTATION-SPEC.md`). This module takes
4
- * already-rendered Float32 channel data (e.g. `AudioBuffer.getChannelData(n)`
5
- * from a `Tone.Offline` render, `audio/tone-offline-render.ts`) and produces
6
- * a standard little-endian, 16-bit-PCM, interleaved RIFF/WAVE file as raw
7
- * bytes — no `AudioBuffer`/`AudioContext` dependency, so this runs equally in
8
- * a browser render-mode page (`runtime/render-audio-control.ts`) and in
9
- * plain Node (this module's own `packages/engine/test/audio/wav-encode.test.ts`,
10
- * no Playwright needed).
11
- *
12
- * 16-bit PCM (not 32-bit float) is the deliberate choice named by the I6 AC
13
- * ("16-bit PCM WAV is fine") — it is universally decodable by every FFmpeg
14
- * build without an extra format flag, keeping the video-mux step's ffmpeg
15
- * invocation ordinary and portable.
16
- */
17
- const BYTES_PER_SAMPLE = 2; // 16-bit PCM
18
- const WAV_HEADER_BYTES = 44;
19
- function clamp(value, lo, hi) {
20
- return Math.min(hi, Math.max(lo, value));
21
- }
22
- function writeAsciiString(view, offset, text) {
23
- for (let i = 0; i < text.length; i++) {
24
- view.setUint8(offset + i, text.charCodeAt(i));
25
- }
26
- }
27
- /** Encode `input` as a complete little-endian, 16-bit-PCM, interleaved
28
- * RIFF/WAVE file (44-byte canonical header + data chunk). Throws on an
29
- * empty/mismatched channel set rather than silently producing a malformed
30
- * file — this module's own contribution to the "fail loudly, never a
31
- * silent no-op" convention `runtime/render-control.ts` documents. */
32
- export function encodeWav16(input) {
33
- const { channelData, sampleRate } = input;
34
- const numChannels = channelData.length;
35
- if (numChannels === 0) {
36
- throw new Error('[wav-encode] channelData must contain at least one channel');
37
- }
38
- if (!Number.isFinite(sampleRate) || sampleRate <= 0) {
39
- throw new Error(`[wav-encode] sampleRate must be a finite number > 0, got ${sampleRate}`);
40
- }
41
- const numFrames = channelData[0]?.length ?? 0;
42
- for (let ch = 0; ch < numChannels; ch++) {
43
- const len = channelData[ch]?.length ?? -1;
44
- if (len !== numFrames) {
45
- throw new Error(`[wav-encode] channel ${ch} has length ${len}, expected ${numFrames} (all channels must match)`);
46
- }
47
- }
48
- const blockAlign = numChannels * BYTES_PER_SAMPLE;
49
- const byteRate = sampleRate * blockAlign;
50
- const dataSize = numFrames * blockAlign;
51
- const buffer = new ArrayBuffer(WAV_HEADER_BYTES + dataSize);
52
- const view = new DataView(buffer);
53
- // RIFF chunk descriptor
54
- writeAsciiString(view, 0, 'RIFF');
55
- view.setUint32(4, 36 + dataSize, true);
56
- writeAsciiString(view, 8, 'WAVE');
57
- // fmt subchunk (PCM)
58
- writeAsciiString(view, 12, 'fmt ');
59
- view.setUint32(16, 16, true); // subchunk size for PCM
60
- view.setUint16(20, 1, true); // audio format 1 = PCM
61
- view.setUint16(22, numChannels, true);
62
- view.setUint32(24, sampleRate, true);
63
- view.setUint32(28, byteRate, true);
64
- view.setUint16(32, blockAlign, true);
65
- view.setUint16(34, BYTES_PER_SAMPLE * 8, true); // bits per sample
66
- // data subchunk
67
- writeAsciiString(view, 36, 'data');
68
- view.setUint32(40, dataSize, true);
69
- let offset = WAV_HEADER_BYTES;
70
- for (let i = 0; i < numFrames; i++) {
71
- for (let ch = 0; ch < numChannels; ch++) {
72
- const sample = clamp(channelData[ch]?.[i] ?? 0, -1, 1);
73
- const intSample = Math.round(sample < 0 ? sample * 0x8000 : sample * 0x7fff);
74
- view.setInt16(offset, intSample, true);
75
- offset += BYTES_PER_SAMPLE;
76
- }
77
- }
78
- return new Uint8Array(buffer);
79
- }
80
- /** RMS + peak over all channels/samples — the same "non-trivial audio, not
81
- * an all-zero buffer" sanity check `tone-audio-main.ts`'s fixture computes,
82
- * factored out here so both that fixture and the render-audio harness can
83
- * share one implementation instead of drifting copies. */
84
- export function pcmStats(channelData) {
85
- let sumSquares = 0;
86
- let peak = 0;
87
- let count = 0;
88
- for (const data of channelData) {
89
- for (let i = 0; i < data.length; i++) {
90
- const v = data[i] ?? 0;
91
- sumSquares += v * v;
92
- peak = Math.max(peak, Math.abs(v));
93
- count++;
94
- }
95
- }
96
- return { rms: count > 0 ? Math.sqrt(sumSquares / count) : 0, peak };
97
- }
@@ -1,179 +0,0 @@
1
- /**
2
- * Character primitive — Jolt soft-body cloth grids (capes, skirts, banners)
3
- * on top of the raw `jolt-physics` WASM bindings.
4
- *
5
- * THIN COMPOSITION HELPER, not a wrapper (CLAUDE.md "use libraries
6
- * directly"): every export assembles the library's own objects
7
- * (`Jolt.SoftBodySharedSettings`, `Jolt.Body`, `Jolt.JoltInterface`) —
8
- * nothing from the library is re-exported. This file never imports the WASM
9
- * module itself — the caller does the async `JoltInit()` and passes the
10
- * resolved module in, mirroring `setup-physics.ts`'s `setupPhysics(rapier:
11
- * typeof RAPIER, ...)` pattern for Rapier. `import type Jolt from
12
- * 'jolt-physics/wasm-compat'` below is TYPE-ONLY (erased at compile time —
13
- * no runtime WASM import here).
14
- *
15
- * Sharp edges this module exists partly to contain (see the mission brief /
16
- * `cloth-hair-bench/jolt-cloth.ts`'s header for the full discovery):
17
- * - `Body.GetMotionProperties()` needs the `Jolt.castObject` downcast to
18
- * `Jolt.SoftBodyMotionProperties` to reach `GetVertex`.
19
- * - `SoftBodySharedSettings.CreateConstraints` takes a POINTER-typed
20
- * 1-element `ArraySoftBodySharedSettingsVertexAttributes` (push_back,
21
- * not resize+at — `.at()` on these embind vectors returns a copy).
22
- * - Kinematic pins must set BOTH `SoftBodyVertex.mPosition` and
23
- * `.mVelocity` (finite-differenced) every tick, or the cloth's own
24
- * constraint solver fights a teleporting anchor.
25
- * - NO per-frame embind allocations (reviewer finding on Phase 1's
26
- * spike, which leaked a `new Jolt.Vec3(...)`/`new Jolt.RVec3(...)` per
27
- * pinned vertex per frame): `tick()` below preallocates ONE `Jolt.Vec3`
28
- * for position and ONE for velocity and reuses them via `.Set(...)` —
29
- * embind property setters (`vertex.mPosition = tmpVec3`) copy the value
30
- * in, so reassigning the SAME wrapper object across many vertices in one
31
- * frame is safe. `KinematicCollider.moveTo` does the same with one
32
- * `Jolt.RVec3` + one `Jolt.Quat` (identity, orientation is not simulated
33
- * here) allocated once at construction.
34
- * - CONSTRUCTION-TIME embind temporaries need `Jolt.destroy(...)` too, once
35
- * Jolt has copied their data out (reviewer finding on Phase 2 — these
36
- * were leaking WASM heap per build/dispose cycle even with `tick()`
37
- * itself allocation-free). Two different lifetimes are at play:
38
- * - Per-vertex/per-face grid temporaries (`SoftBodySharedSettingsVertex`
39
- * + its `Float3`, `SoftBodySharedSettingsFace`, the single
40
- * `vertexAttr`) are copied BY VALUE into `sharedSettings`'s own
41
- * storage the instant `push_back`/the property setter runs — freed
42
- * right there, matching the reuse-then-`Jolt.destroy()`-once pattern
43
- * in Jolt's own `soft-body-creator.js` sample. `bodyCreation`
44
- * (`SoftBodyCreationSettings`) is the same story: `CreateSoftBody`
45
- * copies what it needs, so it's freed right after — same contract as
46
- * `JoltSettings` → `JoltInterface` below.
47
- * - `sharedSettings` itself (`SoftBodySharedSettings`) is different: it
48
- * is REFCOUNTED (`AddRef`/`Release`/`GetRefCount` in the vendored
49
- * typings, like `Shape`) and the body reads it every step
50
- * (`SoftBodyMotionProperties.GetSettings()`) for face/constraint
51
- * topology. Refcounted RefTargets are freed BY JOLT ITSELF when the
52
- * last reference drops (Release of the final ref IS the delete) —
53
- * so it gets NO explicit `Jolt.destroy(...)` at all: destroying
54
- * `bodyCreation` releases the ctor's ref, and `dispose()`'s
55
- * `DestroyBody` releases the body's (last) ref, which deletes it.
56
- * An explicit destroy on top would be a use-after-free (empirically
57
- * confirmed with a `GetRefCount()` probe against real Jolt WASM).
58
- * Same rule for the collider's `Shape`: `destroy(creation)` releases
59
- * the creation-settings ref, `DestroyBody` releases the body's —
60
- * never destroy the shape directly.
61
- * - The preallocated tick-loop temporaries described above (`tmpPos`/
62
- * `tmpVel` in `buildClothGrid`, `tmpPos`/`identityQuat` in
63
- * `buildKinematicCollider`) are plain (non-refcounted) `Vec3`/`RVec3`/
64
- * `Quat` wrappers reused for the object's whole lifetime — freed in that
65
- * object's own `dispose()`.
66
- */
67
- import type JoltNS from 'jolt-physics/wasm-compat';
68
- import * as THREE from 'three';
69
- /** The type of an ALREADY-INITIALIZED `jolt-physics/wasm-compat` module
70
- * (i.e. what `await JoltInit()` resolves to) — the parameter type every
71
- * function below takes instead of importing/initializing Jolt itself. */
72
- export type JoltModule = typeof JoltNS;
73
- export interface JoltWorld {
74
- jolt: JoltModule;
75
- joltInterface: JoltNS.JoltInterface;
76
- physicsSystem: JoltNS.PhysicsSystem;
77
- bodyInterface: JoltNS.BodyInterface;
78
- /** The single "moving" object layer every body built through this world's
79
- * helpers is placed on (cloth + kinematic colliders all collide with
80
- * each other; nothing here needs more than one moving layer). */
81
- movingLayer: number;
82
- /** Advance the simulation by `dt` seconds (`options.collisionSteps` Jolt
83
- * collision sub-steps). Position any kinematic bodies (colliders, cloth
84
- * pins) for this frame BEFORE calling `step` — this is what
85
- * `ClothGrid.tick` does internally. */
86
- step(dt: number): void;
87
- dispose(): void;
88
- }
89
- export interface JoltWorldOptions {
90
- gravity?: {
91
- x: number;
92
- y: number;
93
- z: number;
94
- };
95
- /** Jolt collision sub-steps per `step()` call. Soft-body contact has no
96
- * CCD — a cloth vertex moving faster than its collision radius per
97
- * collision step TUNNELS through kinematic colliders (measured live on a
98
- * whipping cape). 2 halves the per-step travel for ~2x the (sub-ms) sim
99
- * cost. @default 1 */
100
- collisionSteps?: number;
101
- }
102
- export declare function createJoltWorld(jolt: JoltModule, options?: JoltWorldOptions): JoltWorld;
103
- export type KinematicColliderShape = {
104
- kind: 'sphere';
105
- radius: number;
106
- } | {
107
- kind: 'capsule';
108
- radius: number;
109
- halfHeight: number;
110
- };
111
- export interface KinematicCollider {
112
- body: JoltNS.Body;
113
- /** Move the collider to `worldPos` (identity rotation — these fixtures
114
- * only need translation) for tick `dt`. Call BEFORE the cloth grid's
115
- * `tick()` for the same frame (that is what steps the Jolt world). */
116
- moveTo(worldPos: THREE.Vector3, dt: number): void;
117
- dispose(): void;
118
- }
119
- export declare function buildKinematicCollider(world: JoltWorld, shape: KinematicColliderShape): KinematicCollider;
120
- export interface ClothPin {
121
- row: number;
122
- col: number;
123
- }
124
- export interface ClothGridOptions {
125
- cols: number;
126
- rows: number;
127
- /** World-space rest position for grid vertex (row, col) — row 0 is
128
- * conventionally the top/pinned edge, but that's a caller convention,
129
- * not enforced here. */
130
- restPosition(row: number, col: number): THREE.Vector3;
131
- /** Which vertices are pinned (kinematically driven every tick, infinite
132
- * mass). Default: every vertex in row 0. */
133
- pins?: ClothPin[];
134
- vertexMassKg?: number;
135
- compliance?: number;
136
- shearCompliance?: number;
137
- bendCompliance?: number;
138
- numIterations?: number;
139
- gravityFactor?: number;
140
- /** Collision radius of every cloth vertex (Jolt `mVertexRadius`), metres.
141
- * The default 0 lets a pressed vertex sit exactly ON (and, under
142
- * sustained gait-driven contact, sink INTO) a collider surface; a few cm
143
- * here keeps the cloth standing off colliders and makes contact
144
- * resolution far more robust against sinking. @default 0 (Jolt's own) */
145
- vertexRadius?: number;
146
- /** Jolt `mLinearDamping` for the soft body (higher = calmer cloth).
147
- * @default Jolt's own default */
148
- linearDamping?: number;
149
- color?: number;
150
- /** @default true */
151
- doubleSided?: boolean;
152
- }
153
- export interface ClothGrid {
154
- cols: number;
155
- rows: number;
156
- vertexCount: number;
157
- /** Pin list this grid was built with, in the order `tick()`'s
158
- * `pinTargets` must match. */
159
- pins: ClothPin[];
160
- mesh: THREE.Mesh;
161
- geometry: THREE.BufferGeometry;
162
- /** One tick: overwrite each pinned vertex's position/velocity from
163
- * `pinTargets[i]` (world-space, matching `pins` order — velocity is
164
- * finite-differenced against the previous call), STEP the owning
165
- * `JoltWorld` (this is the only thing in this module that calls
166
- * `world.step`, so build at most one `ClothGrid` per `JoltWorld` unless
167
- * you step the world yourself and skip that side effect), then sync
168
- * `geometry`'s `position` attribute + recompute normals from the
169
- * simulated vertices. Position any kinematic colliders for this frame
170
- * BEFORE calling this. */
171
- tick(dt: number, pinTargets: readonly THREE.Vector3[]): void;
172
- /** World-space position of every vertex, row-major (`row * cols + col`).
173
- * Reuses `out` if given (avoids an allocation for callers sampling every
174
- * frame, e.g. a numeric collision-clearance check). */
175
- samplePoints(out?: THREE.Vector3[]): THREE.Vector3[];
176
- dispose(): void;
177
- }
178
- export declare function buildClothGrid(world: JoltWorld, scene: THREE.Scene, options: ClothGridOptions): ClothGrid;
179
- //# sourceMappingURL=cloth-sim.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloth-sim.d.ts","sourceRoot":"","sources":["../../src/character/cloth-sim.ts"],"names":[],"mappings":"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"}