@vgai/engine 0.2.0 → 0.3.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 (541) hide show
  1. package/README.md +3 -1
  2. package/dist/adapter/authoring.d.ts +404 -0
  3. package/dist/adapter/authoring.d.ts.map +1 -0
  4. package/dist/adapter/authoring.js +22 -0
  5. package/dist/adapter/colyseus-networking-adapter.d.ts +43 -0
  6. package/dist/adapter/colyseus-networking-adapter.d.ts.map +1 -0
  7. package/dist/adapter/colyseus-networking-adapter.js +38 -0
  8. package/dist/adapter/first-party-systems.d.ts +38 -0
  9. package/dist/adapter/first-party-systems.d.ts.map +1 -0
  10. package/dist/adapter/first-party-systems.js +77 -0
  11. package/dist/adapter/game-adapter.d.ts +133 -0
  12. package/dist/adapter/game-adapter.d.ts.map +1 -0
  13. package/dist/adapter/game-adapter.js +10 -0
  14. package/dist/adapter/host-context.d.ts +73 -0
  15. package/dist/adapter/host-context.d.ts.map +1 -0
  16. package/dist/adapter/host-context.js +16 -0
  17. package/dist/adapter/index.d.ts +22 -0
  18. package/dist/adapter/index.d.ts.map +1 -0
  19. package/dist/adapter/index.js +15 -0
  20. package/dist/adapter/ingest/game-contract.d.ts +53 -0
  21. package/dist/adapter/ingest/game-contract.d.ts.map +1 -0
  22. package/dist/adapter/ingest/game-contract.js +30 -0
  23. package/dist/adapter/ingest/overlay-applier.d.ts +118 -0
  24. package/dist/adapter/ingest/overlay-applier.d.ts.map +1 -0
  25. package/dist/adapter/ingest/overlay-applier.js +132 -0
  26. package/dist/adapter/ingest/overlay-apply.d.ts +60 -0
  27. package/dist/adapter/ingest/overlay-apply.d.ts.map +1 -0
  28. package/dist/adapter/ingest/overlay-apply.js +101 -0
  29. package/dist/adapter/ingest/overlay-file.d.ts +79 -0
  30. package/dist/adapter/ingest/overlay-file.d.ts.map +1 -0
  31. package/dist/adapter/ingest/overlay-file.js +66 -0
  32. package/dist/adapter/ingest/overlay-report.d.ts +113 -0
  33. package/dist/adapter/ingest/overlay-report.d.ts.map +1 -0
  34. package/dist/adapter/ingest/overlay-report.js +103 -0
  35. package/dist/adapter/ingest/scene-capture.d.ts +97 -0
  36. package/dist/adapter/ingest/scene-capture.d.ts.map +1 -0
  37. package/dist/adapter/ingest/scene-capture.js +248 -0
  38. package/dist/adapter/ingest/upstream-pin.d.ts +47 -0
  39. package/dist/adapter/ingest/upstream-pin.d.ts.map +1 -0
  40. package/dist/adapter/ingest/upstream-pin.js +50 -0
  41. package/dist/adapter/loop-gate-report.d.ts +34 -0
  42. package/dist/adapter/loop-gate-report.d.ts.map +1 -0
  43. package/dist/adapter/loop-gate-report.js +37 -0
  44. package/dist/adapter/rapier-physics-adapter.d.ts +12 -0
  45. package/dist/adapter/rapier-physics-adapter.d.ts.map +1 -0
  46. package/dist/adapter/rapier-physics-adapter.js +46 -0
  47. package/dist/adapter/system-adapter.d.ts +133 -0
  48. package/dist/adapter/system-adapter.d.ts.map +1 -0
  49. package/dist/adapter/system-adapter.js +13 -0
  50. package/dist/adapter/transform.d.ts +18 -0
  51. package/dist/adapter/transform.d.ts.map +1 -0
  52. package/dist/adapter/transform.js +1 -0
  53. package/dist/adapter/vgai-scene-game-adapter.d.ts +116 -0
  54. package/dist/adapter/vgai-scene-game-adapter.d.ts.map +1 -0
  55. package/dist/adapter/vgai-scene-game-adapter.js +714 -0
  56. package/dist/adapter/world-kind.d.ts +30 -0
  57. package/dist/adapter/world-kind.d.ts.map +1 -0
  58. package/dist/adapter/world-kind.js +18 -0
  59. package/dist/ai/navigation.d.ts +64 -0
  60. package/dist/ai/navigation.d.ts.map +1 -0
  61. package/dist/ai/navigation.js +133 -0
  62. package/dist/animation/anim-graph-types.d.ts +25 -0
  63. package/dist/animation/anim-graph-types.d.ts.map +1 -0
  64. package/dist/animation/anim-graph-types.js +1 -0
  65. package/dist/animation/animation-clock.d.ts +213 -0
  66. package/dist/animation/animation-clock.d.ts.map +1 -0
  67. package/dist/animation/animation-clock.js +301 -0
  68. package/dist/animation/blend-node.d.ts +22 -0
  69. package/dist/animation/blend-node.d.ts.map +1 -0
  70. package/dist/animation/blend-node.js +97 -0
  71. package/dist/animation/camera-ownership.d.ts +250 -0
  72. package/dist/animation/camera-ownership.d.ts.map +1 -0
  73. package/dist/animation/camera-ownership.js +169 -0
  74. package/dist/animation/cinematic-cues.d.ts +200 -0
  75. package/dist/animation/cinematic-cues.d.ts.map +1 -0
  76. package/dist/animation/cinematic-cues.js +213 -0
  77. package/dist/animation/clip-map.d.ts +12 -0
  78. package/dist/animation/clip-map.d.ts.map +1 -0
  79. package/dist/animation/clip-map.js +37 -0
  80. package/dist/animation/gsap-registration.d.ts +119 -0
  81. package/dist/animation/gsap-registration.d.ts.map +1 -0
  82. package/dist/animation/gsap-registration.js +92 -0
  83. package/dist/animation/theatre-clock-binding.d.ts +89 -0
  84. package/dist/animation/theatre-clock-binding.d.ts.map +1 -0
  85. package/dist/animation/theatre-clock-binding.js +29 -0
  86. package/dist/animation/theatre-director.d.ts +242 -0
  87. package/dist/animation/theatre-director.d.ts.map +1 -0
  88. package/dist/animation/theatre-director.js +235 -0
  89. package/dist/animation/theatre-object-binding.d.ts +305 -0
  90. package/dist/animation/theatre-object-binding.d.ts.map +1 -0
  91. package/dist/animation/theatre-object-binding.js +351 -0
  92. package/dist/animation/xstate-animation-binding.d.ts +111 -0
  93. package/dist/animation/xstate-animation-binding.d.ts.map +1 -0
  94. package/dist/animation/xstate-animation-binding.js +307 -0
  95. package/dist/animation/xstate-animation-meta.d.ts +228 -0
  96. package/dist/animation/xstate-animation-meta.d.ts.map +1 -0
  97. package/dist/animation/xstate-animation-meta.js +221 -0
  98. package/dist/assets.d.ts +26 -0
  99. package/dist/assets.d.ts.map +1 -0
  100. package/dist/assets.js +55 -0
  101. package/dist/audio/index.d.ts +4 -0
  102. package/dist/audio/index.d.ts.map +1 -0
  103. package/dist/audio/index.js +24 -0
  104. package/dist/audio/tone-clock-binding.d.ts +75 -0
  105. package/dist/audio/tone-clock-binding.d.ts.map +1 -0
  106. package/dist/audio/tone-clock-binding.js +29 -0
  107. package/dist/audio/tone-context.d.ts +114 -0
  108. package/dist/audio/tone-context.d.ts.map +1 -0
  109. package/dist/audio/tone-context.js +39 -0
  110. package/dist/audio/tone-offline-render.d.ts +90 -0
  111. package/dist/audio/tone-offline-render.d.ts.map +1 -0
  112. package/dist/audio/tone-offline-render.js +56 -0
  113. package/dist/audio/wav-encode.d.ts +38 -0
  114. package/dist/audio/wav-encode.d.ts.map +1 -0
  115. package/dist/audio/wav-encode.js +97 -0
  116. package/dist/core/game-loop.d.ts +21 -0
  117. package/dist/core/game-loop.d.ts.map +1 -0
  118. package/dist/core/game-loop.js +130 -0
  119. package/dist/core/system-runner.d.ts +120 -0
  120. package/dist/core/system-runner.d.ts.map +1 -0
  121. package/dist/core/system-runner.js +286 -0
  122. package/dist/core/types.d.ts +58 -0
  123. package/dist/core/types.d.ts.map +1 -0
  124. package/dist/core/types.js +25 -0
  125. package/dist/data/data-asset.d.ts +101 -0
  126. package/dist/data/data-asset.d.ts.map +1 -0
  127. package/dist/data/data-asset.js +122 -0
  128. package/dist/data/data-check-core.d.ts +110 -0
  129. package/dist/data/data-check-core.d.ts.map +1 -0
  130. package/dist/data/data-check-core.js +178 -0
  131. package/dist/data/data-ref.d.ts +79 -0
  132. package/dist/data/data-ref.d.ts.map +1 -0
  133. package/dist/data/data-ref.js +130 -0
  134. package/dist/data/vite-plugin-data.d.ts +79 -0
  135. package/dist/data/vite-plugin-data.d.ts.map +1 -0
  136. package/dist/data/vite-plugin-data.js +217 -0
  137. package/dist/dev/console-bridge.d.ts +22 -0
  138. package/dist/dev/console-bridge.d.ts.map +1 -0
  139. package/dist/dev/console-bridge.js +71 -0
  140. package/dist/dev/debug-draw.d.ts +24 -0
  141. package/dist/dev/debug-draw.d.ts.map +1 -0
  142. package/dist/dev/debug-draw.js +73 -0
  143. package/dist/dev/logger.d.ts +30 -0
  144. package/dist/dev/logger.d.ts.map +1 -0
  145. package/dist/dev/logger.js +90 -0
  146. package/dist/ecs/component-manager.d.ts +189 -0
  147. package/dist/ecs/component-manager.d.ts.map +1 -0
  148. package/dist/ecs/component-manager.js +676 -0
  149. package/dist/ecs/game-component.d.ts +97 -0
  150. package/dist/ecs/game-component.d.ts.map +1 -0
  151. package/dist/ecs/game-component.js +80 -0
  152. package/dist/ecs/hmr-swap-report.d.ts +53 -0
  153. package/dist/ecs/hmr-swap-report.d.ts.map +1 -0
  154. package/dist/ecs/hmr-swap-report.js +55 -0
  155. package/dist/index.d.ts +37 -0
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +30 -0
  158. package/dist/input/input-manager.d.ts +596 -0
  159. package/dist/input/input-manager.d.ts.map +1 -0
  160. package/dist/input/input-manager.js +1564 -0
  161. package/dist/input/input-types.d.ts +171 -0
  162. package/dist/input/input-types.d.ts.map +1 -0
  163. package/dist/input/input-types.js +1 -0
  164. package/dist/input/prompt-labels.d.ts +21 -0
  165. package/dist/input/prompt-labels.d.ts.map +1 -0
  166. package/dist/input/prompt-labels.js +121 -0
  167. package/dist/input/rebind-controller.d.ts +59 -0
  168. package/dist/input/rebind-controller.d.ts.map +1 -0
  169. package/dist/input/rebind-controller.js +85 -0
  170. package/dist/input/schema.d.ts +16 -0
  171. package/dist/input/schema.d.ts.map +1 -0
  172. package/dist/input/schema.js +228 -0
  173. package/dist/loader.d.ts +43 -0
  174. package/dist/loader.d.ts.map +1 -0
  175. package/dist/loader.js +59 -0
  176. package/dist/manifest/index.d.ts +5 -0
  177. package/dist/manifest/index.d.ts.map +1 -0
  178. package/dist/manifest/index.js +8 -0
  179. package/dist/manifest/load-file.d.ts +4 -0
  180. package/dist/manifest/load-file.d.ts.map +1 -0
  181. package/dist/manifest/load-file.js +14 -0
  182. package/dist/manifest/load.d.ts +117 -0
  183. package/dist/manifest/load.d.ts.map +1 -0
  184. package/dist/manifest/load.js +255 -0
  185. package/dist/manifest/schema.d.ts +173 -0
  186. package/dist/manifest/schema.d.ts.map +1 -0
  187. package/dist/manifest/schema.js +302 -0
  188. package/dist/physics/collision-system.d.ts +41 -0
  189. package/dist/physics/collision-system.d.ts.map +1 -0
  190. package/dist/physics/collision-system.js +64 -0
  191. package/dist/physics/physics-registry.d.ts +45 -0
  192. package/dist/physics/physics-registry.d.ts.map +1 -0
  193. package/dist/physics/physics-registry.js +65 -0
  194. package/dist/physics/transform-writer.d.ts +16 -0
  195. package/dist/physics/transform-writer.d.ts.map +1 -0
  196. package/dist/physics/transform-writer.js +38 -0
  197. package/dist/physics/trigger-dispatch.d.ts +24 -0
  198. package/dist/physics/trigger-dispatch.d.ts.map +1 -0
  199. package/dist/physics/trigger-dispatch.js +80 -0
  200. package/dist/react/game-state.d.ts +105 -0
  201. package/dist/react/game-state.d.ts.map +1 -0
  202. package/dist/react/game-state.js +144 -0
  203. package/dist/react/use-data.d.ts +60 -0
  204. package/dist/react/use-data.d.ts.map +1 -0
  205. package/dist/react/use-data.js +96 -0
  206. package/dist/react/use-selection.d.ts +75 -0
  207. package/dist/react/use-selection.d.ts.map +1 -0
  208. package/dist/react/use-selection.js +90 -0
  209. package/dist/render/auto-batcher.d.ts +34 -0
  210. package/dist/render/auto-batcher.d.ts.map +1 -0
  211. package/dist/render/auto-batcher.js +140 -0
  212. package/dist/render/render-batch-system.d.ts +33 -0
  213. package/dist/render/render-batch-system.d.ts.map +1 -0
  214. package/dist/render/render-batch-system.js +230 -0
  215. package/dist/render/render-features.d.ts +47 -0
  216. package/dist/render/render-features.d.ts.map +1 -0
  217. package/dist/render/render-features.js +105 -0
  218. package/dist/render/render-settings.d.ts +36 -0
  219. package/dist/render/render-settings.d.ts.map +1 -0
  220. package/dist/render/render-settings.js +51 -0
  221. package/dist/runtime/create-runtime.d.ts +280 -0
  222. package/dist/runtime/create-runtime.d.ts.map +1 -0
  223. package/dist/runtime/create-runtime.js +795 -0
  224. package/dist/runtime/frame-selector-cache.d.ts +41 -0
  225. package/dist/runtime/frame-selector-cache.d.ts.map +1 -0
  226. package/dist/runtime/frame-selector-cache.js +65 -0
  227. package/dist/runtime/game.d.ts +433 -0
  228. package/dist/runtime/game.d.ts.map +1 -0
  229. package/dist/runtime/game.js +569 -0
  230. package/dist/runtime/input-router.d.ts +78 -0
  231. package/dist/runtime/input-router.d.ts.map +1 -0
  232. package/dist/runtime/input-router.js +171 -0
  233. package/dist/runtime/mount-game.d.ts +129 -0
  234. package/dist/runtime/mount-game.d.ts.map +1 -0
  235. package/dist/runtime/mount-game.js +152 -0
  236. package/dist/runtime/mount-manifest.d.ts +119 -0
  237. package/dist/runtime/mount-manifest.d.ts.map +1 -0
  238. package/dist/runtime/mount-manifest.js +204 -0
  239. package/dist/runtime/render-audio-control.d.ts +110 -0
  240. package/dist/runtime/render-audio-control.d.ts.map +1 -0
  241. package/dist/runtime/render-audio-control.js +111 -0
  242. package/dist/runtime/render-control.d.ts +291 -0
  243. package/dist/runtime/render-control.d.ts.map +1 -0
  244. package/dist/runtime/render-control.js +264 -0
  245. package/dist/runtime/render-seed.d.ts +57 -0
  246. package/dist/runtime/render-seed.d.ts.map +1 -0
  247. package/dist/runtime/render-seed.js +74 -0
  248. package/dist/runtime/scene-ui-bridge.d.ts +69 -0
  249. package/dist/runtime/scene-ui-bridge.d.ts.map +1 -0
  250. package/dist/runtime/scene-ui-bridge.js +23 -0
  251. package/dist/runtime/scene-ui-data.d.ts +13 -0
  252. package/dist/runtime/scene-ui-data.d.ts.map +1 -0
  253. package/dist/runtime/scene-ui-data.js +92 -0
  254. package/dist/runtime/state-bridge.d.ts +47 -0
  255. package/dist/runtime/state-bridge.d.ts.map +1 -0
  256. package/dist/runtime/state-bridge.js +53 -0
  257. package/dist/runtime/types.d.ts +179 -0
  258. package/dist/runtime/types.d.ts.map +1 -0
  259. package/dist/runtime/types.js +1 -0
  260. package/dist/scene/asset-loaders.d.ts +79 -0
  261. package/dist/scene/asset-loaders.d.ts.map +1 -0
  262. package/dist/scene/asset-loaders.js +141 -0
  263. package/dist/scene/asset-paths.d.ts +11 -0
  264. package/dist/scene/asset-paths.d.ts.map +1 -0
  265. package/dist/scene/asset-paths.js +108 -0
  266. package/dist/scene/asset-ref-check.d.ts +88 -0
  267. package/dist/scene/asset-ref-check.d.ts.map +1 -0
  268. package/dist/scene/asset-ref-check.js +214 -0
  269. package/dist/scene/asset-registry.d.ts +30 -0
  270. package/dist/scene/asset-registry.d.ts.map +1 -0
  271. package/dist/scene/asset-registry.js +50 -0
  272. package/dist/scene/collider-dimensions.d.ts +63 -0
  273. package/dist/scene/collider-dimensions.d.ts.map +1 -0
  274. package/dist/scene/collider-dimensions.js +98 -0
  275. package/dist/scene/component-registry.d.ts +17 -0
  276. package/dist/scene/component-registry.d.ts.map +1 -0
  277. package/dist/scene/component-registry.js +28 -0
  278. package/dist/scene/defaults.d.ts +252 -0
  279. package/dist/scene/defaults.d.ts.map +1 -0
  280. package/dist/scene/defaults.js +151 -0
  281. package/dist/scene/geometries/index.d.ts +8 -0
  282. package/dist/scene/geometries/index.d.ts.map +1 -0
  283. package/dist/scene/geometries/index.js +7 -0
  284. package/dist/scene/geometries/terrain.d.ts +2 -0
  285. package/dist/scene/geometries/terrain.d.ts.map +1 -0
  286. package/dist/scene/geometries/terrain.js +37 -0
  287. package/dist/scene/geometry-registry.d.ts +24 -0
  288. package/dist/scene/geometry-registry.d.ts.map +1 -0
  289. package/dist/scene/geometry-registry.js +20 -0
  290. package/dist/scene/instance-registry.d.ts +36 -0
  291. package/dist/scene/instance-registry.d.ts.map +1 -0
  292. package/dist/scene/instance-registry.js +55 -0
  293. package/dist/scene/instancers/grid.d.ts +2 -0
  294. package/dist/scene/instancers/grid.d.ts.map +1 -0
  295. package/dist/scene/instancers/grid.js +36 -0
  296. package/dist/scene/instancers/index.d.ts +8 -0
  297. package/dist/scene/instancers/index.d.ts.map +1 -0
  298. package/dist/scene/instancers/index.js +7 -0
  299. package/dist/scene/light-camera-factory.d.ts +23 -0
  300. package/dist/scene/light-camera-factory.d.ts.map +1 -0
  301. package/dist/scene/light-camera-factory.js +68 -0
  302. package/dist/scene/material-factory.d.ts +17 -0
  303. package/dist/scene/material-factory.d.ts.map +1 -0
  304. package/dist/scene/material-factory.js +197 -0
  305. package/dist/scene/material-registry.d.ts +40 -0
  306. package/dist/scene/material-registry.d.ts.map +1 -0
  307. package/dist/scene/material-registry.js +44 -0
  308. package/dist/scene/materials/index.d.ts +8 -0
  309. package/dist/scene/materials/index.d.ts.map +1 -0
  310. package/dist/scene/materials/index.js +7 -0
  311. package/dist/scene/materials/water.d.ts +2 -0
  312. package/dist/scene/materials/water.d.ts.map +1 -0
  313. package/dist/scene/materials/water.js +54 -0
  314. package/dist/scene/parse.d.ts +23 -0
  315. package/dist/scene/parse.d.ts.map +1 -0
  316. package/dist/scene/parse.js +179 -0
  317. package/dist/scene/particles-factory.d.ts +33 -0
  318. package/dist/scene/particles-factory.d.ts.map +1 -0
  319. package/dist/scene/particles-factory.js +282 -0
  320. package/dist/scene/scene-apply.d.ts +109 -0
  321. package/dist/scene/scene-apply.d.ts.map +1 -0
  322. package/dist/scene/scene-apply.js +326 -0
  323. package/dist/scene/scene-diff-schema.d.ts +285 -0
  324. package/dist/scene/scene-diff-schema.d.ts.map +1 -0
  325. package/dist/scene/scene-diff-schema.js +92 -0
  326. package/dist/scene/scene-diff-types.d.ts +40 -0
  327. package/dist/scene/scene-diff-types.d.ts.map +1 -0
  328. package/dist/scene/scene-diff-types.js +14 -0
  329. package/dist/scene/scene-loader.d.ts +177 -0
  330. package/dist/scene/scene-loader.d.ts.map +1 -0
  331. package/dist/scene/scene-loader.js +1213 -0
  332. package/dist/scene/scene-query.d.ts +11 -0
  333. package/dist/scene/scene-query.d.ts.map +1 -0
  334. package/dist/scene/scene-query.js +63 -0
  335. package/dist/scene/scene-types.d.ts +10 -0
  336. package/dist/scene/scene-types.d.ts.map +1 -0
  337. package/dist/scene/scene-types.js +8 -0
  338. package/dist/scene/scene-version.d.ts +26 -0
  339. package/dist/scene/scene-version.d.ts.map +1 -0
  340. package/dist/scene/scene-version.js +34 -0
  341. package/dist/scene/schema/animation.d.ts +8 -0
  342. package/dist/scene/schema/animation.d.ts.map +1 -0
  343. package/dist/scene/schema/animation.js +42 -0
  344. package/dist/scene/schema/audio.d.ts +13 -0
  345. package/dist/scene/schema/audio.d.ts.map +1 -0
  346. package/dist/scene/schema/audio.js +22 -0
  347. package/dist/scene/schema/camera.d.ts +28 -0
  348. package/dist/scene/schema/camera.d.ts.map +1 -0
  349. package/dist/scene/schema/camera.js +17 -0
  350. package/dist/scene/schema/collider.d.ts +40 -0
  351. package/dist/scene/schema/collider.d.ts.map +1 -0
  352. package/dist/scene/schema/collider.js +55 -0
  353. package/dist/scene/schema/entity-ref.d.ts +31 -0
  354. package/dist/scene/schema/entity-ref.d.ts.map +1 -0
  355. package/dist/scene/schema/entity-ref.js +61 -0
  356. package/dist/scene/schema/entity.d.ts +1036 -0
  357. package/dist/scene/schema/entity.d.ts.map +1 -0
  358. package/dist/scene/schema/entity.js +153 -0
  359. package/dist/scene/schema/environment.d.ts +425 -0
  360. package/dist/scene/schema/environment.d.ts.map +1 -0
  361. package/dist/scene/schema/environment.js +357 -0
  362. package/dist/scene/schema/index.d.ts +39 -0
  363. package/dist/scene/schema/index.d.ts.map +1 -0
  364. package/dist/scene/schema/index.js +20 -0
  365. package/dist/scene/schema/instances.d.ts +14 -0
  366. package/dist/scene/schema/instances.d.ts.map +1 -0
  367. package/dist/scene/schema/instances.js +28 -0
  368. package/dist/scene/schema/joint.d.ts +23 -0
  369. package/dist/scene/schema/joint.d.ts.map +1 -0
  370. package/dist/scene/schema/joint.js +23 -0
  371. package/dist/scene/schema/light.d.ts +38 -0
  372. package/dist/scene/schema/light.d.ts.map +1 -0
  373. package/dist/scene/schema/light.js +26 -0
  374. package/dist/scene/schema/material.d.ts +199 -0
  375. package/dist/scene/schema/material.d.ts.map +1 -0
  376. package/dist/scene/schema/material.js +99 -0
  377. package/dist/scene/schema/mesh.d.ts +48 -0
  378. package/dist/scene/schema/mesh.d.ts.map +1 -0
  379. package/dist/scene/schema/mesh.js +82 -0
  380. package/dist/scene/schema/particles.d.ts +2178 -0
  381. package/dist/scene/schema/particles.d.ts.map +1 -0
  382. package/dist/scene/schema/particles.js +321 -0
  383. package/dist/scene/schema/physics.d.ts +56 -0
  384. package/dist/scene/schema/physics.d.ts.map +1 -0
  385. package/dist/scene/schema/physics.js +37 -0
  386. package/dist/scene/schema/scene-file.d.ts +304 -0
  387. package/dist/scene/schema/scene-file.d.ts.map +1 -0
  388. package/dist/scene/schema/scene-file.js +262 -0
  389. package/dist/scene/schema/shadow.d.ts +28 -0
  390. package/dist/scene/schema/shadow.d.ts.map +1 -0
  391. package/dist/scene/schema/shadow.js +20 -0
  392. package/dist/scene/schema/spline.d.ts +25 -0
  393. package/dist/scene/schema/spline.d.ts.map +1 -0
  394. package/dist/scene/schema/spline.js +15 -0
  395. package/dist/scene/schema/tuples.d.ts +12 -0
  396. package/dist/scene/schema/tuples.d.ts.map +1 -0
  397. package/dist/scene/schema/tuples.js +14 -0
  398. package/dist/scene/schema/ui.d.ts +880 -0
  399. package/dist/scene/schema/ui.d.ts.map +1 -0
  400. package/dist/scene/schema/ui.js +506 -0
  401. package/dist/scene/user-data.d.ts +171 -0
  402. package/dist/scene/user-data.d.ts.map +1 -0
  403. package/dist/scene/user-data.js +137 -0
  404. package/dist/setup/setup-audio.d.ts +20 -0
  405. package/dist/setup/setup-audio.d.ts.map +1 -0
  406. package/dist/setup/setup-audio.js +41 -0
  407. package/dist/setup/setup-particles.d.ts +17 -0
  408. package/dist/setup/setup-particles.d.ts.map +1 -0
  409. package/dist/setup/setup-particles.js +16 -0
  410. package/dist/setup/setup-physics.d.ts +25 -0
  411. package/dist/setup/setup-physics.d.ts.map +1 -0
  412. package/dist/setup/setup-physics.js +51 -0
  413. package/dist/setup/setup-renderer.d.ts +69 -0
  414. package/dist/setup/setup-renderer.d.ts.map +1 -0
  415. package/dist/setup/setup-renderer.js +363 -0
  416. package/dist/tools/define-tool.d.ts +105 -0
  417. package/dist/tools/define-tool.d.ts.map +1 -0
  418. package/dist/tools/define-tool.js +82 -0
  419. package/dist/world2d/authoring-2d.d.ts +76 -0
  420. package/dist/world2d/authoring-2d.d.ts.map +1 -0
  421. package/dist/world2d/authoring-2d.js +176 -0
  422. package/dist/world2d/capture-to-scene2d.d.ts +5 -0
  423. package/dist/world2d/capture-to-scene2d.d.ts.map +1 -0
  424. package/dist/world2d/capture-to-scene2d.js +49 -0
  425. package/dist/world2d/collision-2d.d.ts +52 -0
  426. package/dist/world2d/collision-2d.d.ts.map +1 -0
  427. package/dist/world2d/collision-2d.js +70 -0
  428. package/dist/world2d/components-2d.d.ts +47 -0
  429. package/dist/world2d/components-2d.d.ts.map +1 -0
  430. package/dist/world2d/components-2d.js +77 -0
  431. package/dist/world2d/index.d.ts +34 -0
  432. package/dist/world2d/index.d.ts.map +1 -0
  433. package/dist/world2d/index.js +32 -0
  434. package/dist/world2d/ingest-iframe-2d.d.ts +82 -0
  435. package/dist/world2d/ingest-iframe-2d.d.ts.map +1 -0
  436. package/dist/world2d/ingest-iframe-2d.js +166 -0
  437. package/dist/world2d/ingest2d.d.ts +97 -0
  438. package/dist/world2d/ingest2d.d.ts.map +1 -0
  439. package/dist/world2d/ingest2d.js +40 -0
  440. package/dist/world2d/physics2d-registry.d.ts +24 -0
  441. package/dist/world2d/physics2d-registry.d.ts.map +1 -0
  442. package/dist/world2d/physics2d-registry.js +38 -0
  443. package/dist/world2d/pixi-game-adapter.d.ts +107 -0
  444. package/dist/world2d/pixi-game-adapter.d.ts.map +1 -0
  445. package/dist/world2d/pixi-game-adapter.js +211 -0
  446. package/dist/world2d/pixi-surface.d.ts +39 -0
  447. package/dist/world2d/pixi-surface.d.ts.map +1 -0
  448. package/dist/world2d/pixi-surface.js +47 -0
  449. package/dist/world2d/scene-capture-2d.d.ts +43 -0
  450. package/dist/world2d/scene-capture-2d.d.ts.map +1 -0
  451. package/dist/world2d/scene-capture-2d.js +92 -0
  452. package/dist/world2d/scene2d-loader.d.ts +27 -0
  453. package/dist/world2d/scene2d-loader.d.ts.map +1 -0
  454. package/dist/world2d/scene2d-loader.js +274 -0
  455. package/dist/world2d/schema/entity2d.d.ts +102 -0
  456. package/dist/world2d/schema/entity2d.d.ts.map +1 -0
  457. package/dist/world2d/schema/entity2d.js +119 -0
  458. package/dist/world2d/schema/physics2d.d.ts +46 -0
  459. package/dist/world2d/schema/physics2d.d.ts.map +1 -0
  460. package/dist/world2d/schema/physics2d.js +45 -0
  461. package/dist/world2d/schema/sprite.d.ts +42 -0
  462. package/dist/world2d/schema/sprite.d.ts.map +1 -0
  463. package/dist/world2d/schema/sprite.js +63 -0
  464. package/dist/world2d/schema/tilemap.d.ts +15 -0
  465. package/dist/world2d/schema/tilemap.d.ts.map +1 -0
  466. package/dist/world2d/schema/tilemap.js +19 -0
  467. package/dist/world2d/schema/tuples2d.d.ts +20 -0
  468. package/dist/world2d/schema/tuples2d.d.ts.map +1 -0
  469. package/dist/world2d/schema/tuples2d.js +19 -0
  470. package/dist/world2d/system-adapters-2d.d.ts +16 -0
  471. package/dist/world2d/system-adapters-2d.d.ts.map +1 -0
  472. package/dist/world2d/system-adapters-2d.js +37 -0
  473. package/dist/world2d/transform-writer-2d.d.ts +16 -0
  474. package/dist/world2d/transform-writer-2d.d.ts.map +1 -0
  475. package/dist/world2d/transform-writer-2d.js +22 -0
  476. package/dist/world2d/types.d.ts +53 -0
  477. package/dist/world2d/types.d.ts.map +1 -0
  478. package/dist/world2d/types.js +1 -0
  479. package/package.json +18 -4
  480. package/src/adapter/authoring.ts +10 -0
  481. package/src/adapter/first-party-systems.ts +23 -34
  482. package/src/adapter/index.ts +1 -3
  483. package/src/adapter/system-adapter.ts +15 -22
  484. package/src/adapter/vgai-scene-game-adapter.ts +5 -14
  485. package/src/animation/anim-graph-types.ts +12 -43
  486. package/src/animation/animation-clock.ts +479 -0
  487. package/src/animation/camera-ownership.ts +467 -0
  488. package/src/animation/cinematic-cues.ts +451 -0
  489. package/src/animation/clip-map.ts +41 -0
  490. package/src/animation/gsap-registration.ts +184 -0
  491. package/src/animation/theatre-clock-binding.ts +111 -0
  492. package/src/animation/theatre-director.ts +347 -0
  493. package/src/animation/theatre-object-binding.ts +661 -0
  494. package/src/animation/xstate-animation-binding.ts +398 -0
  495. package/src/animation/xstate-animation-meta.ts +282 -0
  496. package/src/audio/index.ts +39 -7
  497. package/src/audio/tone-clock-binding.ts +98 -0
  498. package/src/audio/tone-context.ts +129 -0
  499. package/src/audio/tone-offline-render.ts +167 -0
  500. package/src/audio/wav-encode.ts +119 -0
  501. package/src/core/game-loop.ts +17 -0
  502. package/src/core/types.ts +13 -0
  503. package/src/data/data-asset.ts +167 -0
  504. package/src/data/data-check-core.ts +242 -0
  505. package/src/data/data-ref.ts +145 -0
  506. package/src/data/vite-plugin-data.ts +290 -0
  507. package/src/index.ts +48 -0
  508. package/src/input/input-manager.ts +1206 -32
  509. package/src/input/input-types.ts +155 -3
  510. package/src/input/prompt-labels.ts +122 -0
  511. package/src/input/rebind-controller.ts +105 -0
  512. package/src/input/schema.ts +206 -52
  513. package/src/react/use-data.ts +114 -0
  514. package/src/react/use-selection.tsx +135 -0
  515. package/src/runtime/create-runtime.ts +30 -9
  516. package/src/runtime/render-audio-control.ts +168 -0
  517. package/src/runtime/render-control.ts +522 -0
  518. package/src/runtime/render-seed.ts +79 -0
  519. package/src/runtime/types.ts +0 -5
  520. package/src/scene/asset-loaders.ts +10 -36
  521. package/src/scene/asset-paths.ts +0 -2
  522. package/src/scene/asset-ref-check.ts +248 -0
  523. package/src/scene/parse.ts +133 -0
  524. package/src/scene/scene-loader.ts +81 -96
  525. package/src/scene/schema/animation.ts +30 -79
  526. package/src/scene/schema/entity.ts +20 -0
  527. package/src/scene/schema/index.ts +2 -12
  528. package/src/scene/user-data.ts +8 -9
  529. package/src/setup/setup-renderer.ts +9 -2
  530. package/src/tools/define-tool.ts +152 -0
  531. package/src/animation/anim-graph.ts +0 -406
  532. package/src/animation/anim-system.ts +0 -28
  533. package/src/animation/property-track.ts +0 -178
  534. package/src/animation/schema.ts +0 -204
  535. package/src/audio/ambient.ts +0 -300
  536. package/src/audio/impacts.ts +0 -212
  537. package/src/audio/movement.ts +0 -140
  538. package/src/audio/musical.ts +0 -200
  539. package/src/audio/ui-sounds.ts +0 -171
  540. package/src/audio/vehicle.ts +0 -235
  541. package/src/audio/weapons.ts +0 -152
@@ -1,178 +0,0 @@
1
- /**
2
- * F5 — Declarative property tracks (deterministic timeline).
3
- * docs/VSCN-STRUCTURAL-GAPS-DESIGN.md
4
- *
5
- * A property track is DATA: a pure function of time (keyframes + named
6
- * easing), never behavior. `samplePropertyTrack` is the pure sampler (time →
7
- * value) the unit test asserts determinism against directly.
8
- * `PropertyTrackRunner` is a thin stateful shell that accumulates elapsed
9
- * time from the fixed-step `dt` already threaded through the scene tick (the
10
- * SAME `dt` the AnimationMixers get — see scene-loader.ts's `tickFns`) and
11
- * writes the sampled value onto the target Object3D property each frame. It
12
- * introduces NO new clock: a paused frame passes `dt = 0`, and time simply
13
- * does not advance — pause/timeScale are honored for free.
14
- *
15
- * Anything state-dependent ("move WHEN the player steps on it") stays a
16
- * GameComponent, which may start/stop/seek a track. This module only adds the
17
- * time→value data + a deterministic evaluator (G1 — data, not behavior).
18
- */
19
- import type * as THREE from 'three';
20
- import { log } from '../dev/logger';
21
- import type { PropertyTrack, PropertyTrackKeyframe } from '../scene/schema/animation';
22
- import type { UIEasing } from '../scene/schema/ui';
23
-
24
- // ---------------------------------------------------------------------------
25
- // Easing — mirrors packages/scene-ui/src/animation.ts's `ease` (same enum,
26
- // same semantics). NOT imported from there: scene-ui depends on the engine,
27
- // so importing it back here would be circular. A ~10-line parallel
28
- // implementation over the shared UIEasingSchema enum is the correct fix.
29
- // ---------------------------------------------------------------------------
30
-
31
- function ease(t: number, kind: UIEasing | undefined): number {
32
- const x = Math.max(0, Math.min(1, t));
33
- switch (kind) {
34
- case 'ease-in':
35
- return x * x;
36
- case 'ease-out':
37
- return 1 - (1 - x) * (1 - x);
38
- case 'ease-in-out':
39
- return x < 0.5 ? 2 * x * x : 1 - (-2 * x + 2) ** 2 / 2;
40
- case 'step':
41
- return x < 1 ? 0 : 1; // hold the previous value until the next keyframe
42
- default:
43
- return x; // linear
44
- }
45
- }
46
-
47
- /**
48
- * Sample a track at `time` seconds from track start. `time` is assumed
49
- * already wrapped/clamped by the caller (see {@link PropertyTrackRunner});
50
- * this function is a pure, side-effect-free keyframe interpolation and is
51
- * safe to call directly from tests.
52
- */
53
- export function samplePropertyTrack(track: PropertyTrack, time: number): number {
54
- const kfs = track.keyframes;
55
- if (kfs.length === 0) return 0;
56
- const first = kfs[0] as PropertyTrackKeyframe;
57
- if (time <= first.time) return first.value;
58
- const last = kfs[kfs.length - 1] as PropertyTrackKeyframe;
59
- if (time >= last.time) return last.value;
60
- for (let i = 0; i < kfs.length - 1; i++) {
61
- const k0 = kfs[i] as PropertyTrackKeyframe;
62
- const k1 = kfs[i + 1] as PropertyTrackKeyframe;
63
- if (time >= k0.time && time <= k1.time) {
64
- const span = k1.time - k0.time || 1;
65
- const raw = (time - k0.time) / span;
66
- const t = ease(raw, k0.easing);
67
- return k0.value + (k1.value - k0.value) * t;
68
- }
69
- }
70
- return last.value;
71
- }
72
-
73
- /** Wrap/clamp elapsed time against a track's `duration`/`loop`. */
74
- function resolveTrackTime(track: PropertyTrack, elapsed: number): number {
75
- if (track.duration <= 0) return elapsed;
76
- if (track.loop) return elapsed % track.duration;
77
- return Math.min(elapsed, track.duration);
78
- }
79
-
80
- type TargetSetter = (object3D: THREE.Object3D, value: number, warnOnce: () => void) => void;
81
-
82
- // Allowlisted target → setter. Keys are exactly PropertyTrackTargetSchema's
83
- // enum values — the allowlist IS the schema; no arbitrary path resolution.
84
- const TARGET_SETTERS: Record<string, TargetSetter> = {
85
- 'position.x': (o, v) => {
86
- o.position.x = v;
87
- },
88
- 'position.y': (o, v) => {
89
- o.position.y = v;
90
- },
91
- 'position.z': (o, v) => {
92
- o.position.z = v;
93
- },
94
- 'rotation.x': (o, v) => {
95
- o.rotation.x = v;
96
- },
97
- 'rotation.y': (o, v) => {
98
- o.rotation.y = v;
99
- },
100
- 'rotation.z': (o, v) => {
101
- o.rotation.z = v;
102
- },
103
- 'scale.x': (o, v) => {
104
- o.scale.x = v;
105
- },
106
- 'scale.y': (o, v) => {
107
- o.scale.y = v;
108
- },
109
- 'scale.z': (o, v) => {
110
- o.scale.z = v;
111
- },
112
- 'material.opacity': (o, v, warnOnce) => {
113
- const mesh = o as THREE.Mesh;
114
- const material = mesh.material as THREE.Material | THREE.Material[] | undefined;
115
- if (!material) {
116
- warnOnce();
117
- return;
118
- }
119
- for (const mat of Array.isArray(material) ? material : [material]) {
120
- mat.transparent = true;
121
- mat.opacity = v;
122
- mat.needsUpdate = true;
123
- }
124
- },
125
- 'light.intensity': (o, v, warnOnce) => {
126
- const light = o as THREE.Light;
127
- if (!light.isLight) {
128
- warnOnce();
129
- return;
130
- }
131
- light.intensity = v;
132
- },
133
- };
134
-
135
- /**
136
- * Drives 1..N property tracks against a single Object3D. Constructed once per
137
- * entity that declares `animation.tracks`; `update(dt)` is registered in the
138
- * SAME tickFns list AnimationMixers use (scene-loader.ts), so it runs in the
139
- * animation phase on the same deterministic clock.
140
- */
141
- export class PropertyTrackRunner {
142
- private readonly object3D: THREE.Object3D;
143
- private readonly tracks: PropertyTrack[];
144
- private elapsed: number[];
145
- private readonly warned = new Set<string>();
146
-
147
- constructor(object3D: THREE.Object3D, tracks: PropertyTrack[]) {
148
- this.object3D = object3D;
149
- this.tracks = tracks;
150
- this.elapsed = tracks.map(() => 0);
151
- }
152
-
153
- /** Advance every track by `dt` seconds and write the sampled value. A paused
154
- * frame (`dt = 0`) leaves every track's value unchanged — no wall-clock, no
155
- * new clock; determinism follows directly from the caller's `dt`. */
156
- update(dt: number): void {
157
- for (let i = 0; i < this.tracks.length; i++) {
158
- const track = this.tracks[i] as PropertyTrack;
159
- this.elapsed[i] = (this.elapsed[i] ?? 0) + dt;
160
- const time = resolveTrackTime(track, this.elapsed[i] ?? 0);
161
- const value = samplePropertyTrack(track, time);
162
- const setter = TARGET_SETTERS[track.target];
163
- // Unreachable when `target` was parsed through PropertyTrackTargetSchema
164
- // (the allowlist enum) — guarded defensively since TARGET_SETTERS is a
165
- // separate table that must stay in sync with the schema.
166
- if (!setter) continue;
167
- setter(this.object3D, value, () => {
168
- if (this.warned.has(track.target)) return;
169
- this.warned.add(track.target);
170
- log.scene.warn(
171
- `Property track target "${track.target}" has no effect on entity "${this.object3D.name}" ` +
172
- '(no material / not a light) — no-op.',
173
- { entityName: this.object3D.name, target: track.target },
174
- );
175
- });
176
- }
177
- }
178
- }
@@ -1,204 +0,0 @@
1
- // T4.6 — the `.animgraph.json` schema.
2
- //
3
- // Was TS-types-only (`anim-graph-types.ts`) until T4.6 authored this Zod
4
- // schema — see docs/BACKBONE-TASKS.md T4.6. `asset-loaders.ts`'s
5
- // `loadAnimGraphData` is this schema's runtime reader: it parses via this
6
- // schema before handing the data to `AnimGraph`/`LayerRuntime` (anim-graph.ts).
7
- //
8
- // Every field has a `.describe()` (repo policy — powers
9
- // `scripts/generate-schema.ts` and the T4.1/T4.6 schema-walk coverage test).
10
- // No runtime dependency beyond `zod`, matching the `scene/schema/` and
11
- // `manifest/schema.ts` precedent.
12
- //
13
- // T4.1 inheritance + one NEW finding (T4.6 audit, same pattern as `ui.locked`/
14
- // `ui.tags` being found beyond BACKBONE-TASKS.md's originally-named three):
15
- // `LayerRuntime`'s constructor (anim-graph.ts) only ever destructures
16
- // `layerDef.states`/`.transitions`/`.defaultState` — `blendMode` and
17
- // `boneMask` are confirmed dead (named in T4.1/docs/BACKBONE-TASKS.md), and
18
- // `weight` (an optional per-layer field, presumably meant for compositing
19
- // multiple layers) is ALSO never read anywhere — there is no cross-layer
20
- // weight combination in `AnimGraph.update()`, each layer's actions are
21
- // weighted independently. All three are REJECTED at parse, mirroring the
22
- // `scene/schema/ui.ts` dead-field mechanism (a `.superRefine` that throws
23
- // naming the field). `packages/editor/src/components/asset-viewers/
24
- // AnimGraphViewer.tsx` echoes `layer.blendMode` back verbatim in a read-only
25
- // raw-JSON asset preview — that is not a behavioral reader (it fetches raw
26
- // JSON directly, bypassing this schema, and merely echoes whatever value is
27
- // present with no downstream effect), so it does not change the verdict —
28
- // same distinction `schema-consumption-map.ts` draws for `ui.locked`.
29
- //
30
- // `layers[].name` is REQUIRED (not optional) and has no reader either — but
31
- // the T4.1 "throw when authored" mechanism only fits OPTIONAL fields (you
32
- // cannot reject a value that must always be present). It's structural
33
- // identity metadata (distinguishing layers when there is more than one, and
34
- // the natural key a future multi-layer inspector/editor would use), the same
35
- // role the file-format `version` field plays — so it is RESERVED, not dead,
36
- // matching the `2d.version`/`2d.surface` convention in
37
- // `schema-consumption-map.ts`.
38
-
39
- import { z } from 'zod';
40
- import type {
41
- AnimGraphFile,
42
- AnimLayer,
43
- AnimParameter,
44
- AnimState,
45
- AnimTransition,
46
- BlendChild,
47
- BlendTreeDef,
48
- TransitionCondition,
49
- } from './anim-graph-types';
50
-
51
- export const AnimParameterSchema: z.ZodType<AnimParameter> = z.object({
52
- type: z
53
- .enum(['float', 'int', 'bool', 'trigger'])
54
- .describe('Parameter kind — drives which inspector widget/comparison semantics apply'),
55
- default: z
56
- .union([z.number(), z.boolean()])
57
- .describe('Initial value (AnimGraph constructor seeds `this.parameters` with this)'),
58
- });
59
-
60
- // NOTE: the `as z.ZodType<X>` casts below (mirroring `UIRootSchema`'s pattern
61
- // in `scene/schema/ui.ts`) are needed because the hand-written TS interfaces
62
- // in `anim-graph-types.ts` declare optional fields as `foo?: T` rather than
63
- // `foo?: T | undefined` — under this repo's `exactOptionalPropertyTypes`,
64
- // Zod's `.optional()` output (`T | undefined`) isn't structurally assignable
65
- // to that without the cast, even though the two are semantically identical
66
- // (an omittable field). The runtime schema is unaffected; this is purely a
67
- // pure tsc-strictness accommodation.
68
-
69
- const TransitionConditionSchema: z.ZodType<TransitionCondition> = z.object({
70
- param: z.string().describe('Parameter (or trigger) name this condition tests'),
71
- op: z
72
- .enum(['>', '<', '>=', '<=', '==', '!=', 'trigger'])
73
- .describe('Comparison operator, or "trigger" to test a fired-trigger flag'),
74
- value: z
75
- .union([z.number(), z.boolean()])
76
- .optional()
77
- .describe('Value to compare against (unused when op is "trigger")'),
78
- }) as z.ZodType<TransitionCondition>;
79
-
80
- const AnimTransitionSchema: z.ZodType<AnimTransition> = z.object({
81
- from: z.string().describe('Source state name, or "*" to match any current state'),
82
- to: z.string().describe('Destination state name'),
83
- conditions: z
84
- .array(TransitionConditionSchema)
85
- .optional()
86
- .describe('All conditions must hold for this transition to fire'),
87
- duration: z.number().describe('Crossfade duration in seconds'),
88
- exitTime: z
89
- .number()
90
- .optional()
91
- .describe(
92
- 'Normalized time (0-1) into the source state before this transition is eligible to fire',
93
- ),
94
- }) as z.ZodType<AnimTransition>;
95
-
96
- const BlendChildSchema: z.ZodType<BlendChild> = z.object({
97
- clip: z.string().describe('Animation clip name this child plays'),
98
- threshold: z.number().describe('1D/2D blend position on the primary parameter axis'),
99
- thresholdY: z.number().optional().describe('2D blend position on the secondary parameter axis'),
100
- weight: z.number().optional().describe('Explicit weight for "direct" blend trees'),
101
- }) as z.ZodType<BlendChild>;
102
-
103
- const BlendTreeDefSchema: z.ZodType<BlendTreeDef> = z.object({
104
- type: z.enum(['1D', '2D', 'direct']).describe('Blend tree evaluation mode'),
105
- parameter: z.string().describe('Primary parameter driving the blend'),
106
- parameterY: z.string().optional().describe('Secondary parameter driving a 2D blend'),
107
- children: z.array(BlendChildSchema).describe('Clips (and their blend positions/weights)'),
108
- }) as z.ZodType<BlendTreeDef>;
109
-
110
- const AnimStateSchema: z.ZodType<AnimState> = z.object({
111
- clip: z
112
- .string()
113
- .optional()
114
- .describe('Single clip to play in this state (mutually exclusive with blendTree in practice)'),
115
- loop: z.boolean().optional().describe('Loop the clip (default true)'),
116
- speed: z.number().optional().describe('Playback speed multiplier (default 1)'),
117
- blendTree: BlendTreeDefSchema.optional().describe(
118
- 'Blend tree to evaluate instead of a single clip',
119
- ),
120
- }) as z.ZodType<AnimState>;
121
-
122
- const AnimLayerSchema: z.ZodType<AnimLayer> = z
123
- .object({
124
- name: z
125
- .string()
126
- .describe(
127
- 'Layer identifier (RESERVED — no reader today; structural identity metadata, same role ' +
128
- 'as the file-format `version` field. See the file doc comment.)',
129
- ),
130
- blendMode: z
131
- .enum(['override', 'additive'])
132
- .optional()
133
- .describe(
134
- 'How this layer composites with others. REJECTED at parse (T4.1): declared but has no ' +
135
- "runtime reader — LayerRuntime never reads it, each layer's actions are weighted " +
136
- 'independently. Authoring this field throws. Do not author.',
137
- ),
138
- weight: z
139
- .number()
140
- .optional()
141
- .describe(
142
- 'Overall layer weight (for compositing multiple layers). REJECTED at parse (T4.6 audit, ' +
143
- 'new finding): declared but has no runtime reader — AnimGraph.update() never combines ' +
144
- 'per-layer weights. Authoring this field throws. Do not author.',
145
- ),
146
- boneMask: z
147
- .array(z.string())
148
- .optional()
149
- .describe(
150
- 'Bone names this layer is restricted to. REJECTED at parse (T4.1): declared but has no ' +
151
- 'runtime reader anywhere. Authoring this field throws. Do not author.',
152
- ),
153
- defaultState: z.string().describe('State name entered on graph creation'),
154
- states: z.record(z.string(), AnimStateSchema).describe('Named states this layer can be in'),
155
- transitions: z.array(AnimTransitionSchema).describe('State-machine transitions for this layer'),
156
- })
157
- .superRefine((layer, ctx) => {
158
- if (layer.blendMode !== undefined) {
159
- ctx.addIssue({
160
- code: z.ZodIssueCode.custom,
161
- message:
162
- '`blendMode` is authored but not implemented — LayerRuntime (anim-graph.ts) never reads ' +
163
- "it; each layer's actions are weighted independently with no cross-layer compositing " +
164
- 'mode. See T4.1/T4.6.',
165
- path: ['blendMode'],
166
- });
167
- }
168
- if (layer.weight !== undefined) {
169
- ctx.addIssue({
170
- code: z.ZodIssueCode.custom,
171
- message:
172
- '`weight` is authored but not implemented — no reader combines per-layer weights ' +
173
- '(AnimGraph.update() ticks each layer independently). See T4.6.',
174
- path: ['weight'],
175
- });
176
- }
177
- if (layer.boneMask !== undefined) {
178
- ctx.addIssue({
179
- code: z.ZodIssueCode.custom,
180
- message:
181
- '`boneMask` is authored but not implemented — no reader restricts a layer to a bone ' +
182
- 'subset anywhere. See T4.1/T4.6.',
183
- path: ['boneMask'],
184
- });
185
- }
186
- }) as z.ZodType<AnimLayer>;
187
-
188
- /**
189
- * The `.animgraph.json` file format (`asset-loaders.ts`'s `loadAnimGraphData`
190
- * + `AnimGraph`'s constructor).
191
- *
192
- * `version` is RESERVED (no range-check reader exists yet for this format —
193
- * same convention `2d.version`/`InputMapFile.version` use; see
194
- * `schema-consumption-map.ts`).
195
- */
196
- export const AnimGraphFileSchema: z.ZodType<AnimGraphFile> = z.object({
197
- version: z.number().describe('Anim graph file format version (RESERVED — no range check yet)'),
198
- parameters: z
199
- .record(z.string(), AnimParameterSchema)
200
- .describe('Named parameters and their defaults (AnimGraph constructor)'),
201
- layers: z
202
- .array(AnimLayerSchema)
203
- .describe('Independent animation layers, each its own state machine'),
204
- }) as z.ZodType<AnimGraphFile>;
@@ -1,300 +0,0 @@
1
- /**
2
- * Ambient sounds — continuous environmental audio.
3
- *
4
- * Each returns play/stop/dispose. These are designed to loop indefinitely.
5
- */
6
-
7
- function createNoiseBuffer(ctx: AudioContext, duration = 2): AudioBuffer {
8
- const length = ctx.sampleRate * duration;
9
- const buffer = ctx.createBuffer(1, length, ctx.sampleRate);
10
- const data = buffer.getChannelData(0);
11
- for (let i = 0; i < length; i++) data[i] = Math.random() * 2 - 1;
12
- return buffer;
13
- }
14
-
15
- /** Wind — filtered noise with slow LFO modulation on cutoff frequency. */
16
- export function wind(
17
- ctx: AudioContext,
18
- dest: AudioNode,
19
- options?: { volume?: number; speed?: number },
20
- ) {
21
- const volume = options?.volume ?? 0.15;
22
- const speed = options?.speed ?? 0.3;
23
- const noiseBuffer = createNoiseBuffer(ctx, 2);
24
-
25
- const out = ctx.createGain();
26
- out.gain.value = volume;
27
- out.connect(dest);
28
-
29
- const filter = ctx.createBiquadFilter();
30
- filter.type = 'lowpass';
31
- filter.frequency.value = 500;
32
- filter.connect(out);
33
-
34
- // LFO modulates filter cutoff for "gusts"
35
- const lfo = ctx.createOscillator();
36
- lfo.type = 'sine';
37
- lfo.frequency.value = speed;
38
- const lfoGain = ctx.createGain();
39
- lfoGain.gain.value = 300; // ±300 Hz modulation
40
- lfo.connect(lfoGain);
41
- lfoGain.connect(filter.frequency);
42
-
43
- let src: AudioBufferSourceNode | null = null;
44
- let lfoStarted = false;
45
-
46
- return {
47
- play() {
48
- if (src) return;
49
- src = ctx.createBufferSource();
50
- src.buffer = noiseBuffer;
51
- src.loop = true;
52
- src.connect(filter);
53
- src.start();
54
- if (!lfoStarted) {
55
- lfo.start();
56
- lfoStarted = true;
57
- }
58
- },
59
- stop() {
60
- if (!src) return;
61
- const ref = src;
62
- src = null;
63
- try {
64
- ref.stop();
65
- } catch {
66
- /* already stopped */
67
- }
68
- ref.disconnect();
69
- },
70
- dispose() {
71
- if (src) {
72
- try {
73
- src.stop();
74
- } catch {
75
- /* already stopped */
76
- }
77
- src.disconnect();
78
- }
79
- try {
80
- lfo.stop();
81
- } catch {
82
- /* already stopped */
83
- }
84
- lfo.disconnect();
85
- lfoGain.disconnect();
86
- filter.disconnect();
87
- out.disconnect();
88
- },
89
- };
90
- }
91
-
92
- /** Rain — high-frequency filtered noise. */
93
- export function rain(
94
- ctx: AudioContext,
95
- dest: AudioNode,
96
- options?: { volume?: number; intensity?: number },
97
- ) {
98
- const volume = options?.volume ?? 0.2;
99
- const intensity = options?.intensity ?? 0.5;
100
- const noiseBuffer = createNoiseBuffer(ctx, 2);
101
-
102
- const out = ctx.createGain();
103
- out.gain.value = 0.05 + intensity * volume;
104
- out.connect(dest);
105
-
106
- const hp = ctx.createBiquadFilter();
107
- hp.type = 'highpass';
108
- hp.frequency.value = 1000 + intensity * 3000;
109
- hp.connect(out);
110
-
111
- let src: AudioBufferSourceNode | null = null;
112
-
113
- return {
114
- play() {
115
- if (src) return;
116
- src = ctx.createBufferSource();
117
- src.buffer = noiseBuffer;
118
- src.loop = true;
119
- src.connect(hp);
120
- src.start();
121
- },
122
- stop() {
123
- if (!src) return;
124
- const ref = src;
125
- src = null;
126
- try {
127
- ref.stop();
128
- } catch {
129
- /* already stopped */
130
- }
131
- ref.disconnect();
132
- },
133
- dispose() {
134
- if (src) {
135
- try {
136
- src.stop();
137
- } catch {
138
- /* already stopped */
139
- }
140
- src.disconnect();
141
- }
142
- hp.disconnect();
143
- out.disconnect();
144
- },
145
- };
146
- }
147
-
148
- /** Hum — low continuous drone with optional harmonics. */
149
- export function hum(
150
- ctx: AudioContext,
151
- dest: AudioNode,
152
- options?: { frequency?: number; volume?: number; harmonics?: number },
153
- ) {
154
- const frequency = options?.frequency ?? 60;
155
- const volume = options?.volume ?? 0.1;
156
- const harmonics = options?.harmonics ?? 2;
157
-
158
- const out = ctx.createGain();
159
- out.gain.value = 0;
160
- out.connect(dest);
161
-
162
- const oscillators: OscillatorNode[] = [];
163
-
164
- return {
165
- play() {
166
- if (oscillators.length > 0) return;
167
- for (let h = 0; h <= harmonics; h++) {
168
- const osc = ctx.createOscillator();
169
- osc.type = 'sine';
170
- osc.frequency.value = frequency * (h + 1);
171
- const gain = ctx.createGain();
172
- // Each harmonic is quieter
173
- gain.gain.value = 1 / (h + 1);
174
- osc.connect(gain);
175
- gain.connect(out);
176
- osc.start();
177
- oscillators.push(osc);
178
- }
179
- out.gain.setTargetAtTime(volume, ctx.currentTime, 0.1);
180
- },
181
- stop() {
182
- out.gain.setTargetAtTime(0, ctx.currentTime, 0.1);
183
- setTimeout(() => {
184
- for (const osc of oscillators) {
185
- try {
186
- osc.stop();
187
- } catch {
188
- /* already stopped */
189
- }
190
- osc.disconnect();
191
- }
192
- oscillators.length = 0;
193
- }, 300);
194
- },
195
- dispose() {
196
- for (const osc of oscillators) {
197
- try {
198
- osc.stop();
199
- } catch {
200
- /* already stopped */
201
- }
202
- osc.disconnect();
203
- }
204
- oscillators.length = 0;
205
- out.disconnect();
206
- },
207
- };
208
- }
209
-
210
- /** Nature — gentle noise base with random bird-like sine chirps. */
211
- export function nature(
212
- ctx: AudioContext,
213
- dest: AudioNode,
214
- options?: { volume?: number; birdRate?: number },
215
- ) {
216
- const volume = options?.volume ?? 0.15;
217
- const birdRate = options?.birdRate ?? 0.5;
218
- const noiseBuffer = createNoiseBuffer(ctx, 2);
219
-
220
- const out = ctx.createGain();
221
- out.gain.value = volume;
222
- out.connect(dest);
223
-
224
- const lp = ctx.createBiquadFilter();
225
- lp.type = 'lowpass';
226
- lp.frequency.value = 400;
227
- lp.connect(out);
228
-
229
- let src: AudioBufferSourceNode | null = null;
230
- let birdInterval: ReturnType<typeof setInterval> | null = null;
231
-
232
- function chirp() {
233
- const now = ctx.currentTime;
234
- const freq = 2000 + Math.random() * 2000;
235
- const dur = 0.05 + Math.random() * 0.05;
236
-
237
- const osc = ctx.createOscillator();
238
- osc.type = 'sine';
239
- osc.frequency.setValueAtTime(freq, now);
240
- osc.frequency.exponentialRampToValueAtTime(freq * 1.3, now + dur * 0.5);
241
- osc.frequency.exponentialRampToValueAtTime(freq * 0.8, now + dur);
242
-
243
- const env = ctx.createGain();
244
- env.gain.setValueAtTime(0.001, now);
245
- env.gain.linearRampToValueAtTime(0.6, now + dur * 0.2);
246
- env.gain.exponentialRampToValueAtTime(0.001, now + dur);
247
-
248
- osc.connect(env);
249
- env.connect(out);
250
- osc.start(now);
251
- osc.stop(now + dur + 0.01);
252
- }
253
-
254
- return {
255
- play() {
256
- if (src) return;
257
- src = ctx.createBufferSource();
258
- src.buffer = noiseBuffer;
259
- src.loop = true;
260
- src.connect(lp);
261
- src.start();
262
-
263
- // Schedule random chirps
264
- birdInterval = setInterval(() => {
265
- if (Math.random() < birdRate) chirp();
266
- }, 500);
267
- },
268
- stop() {
269
- if (birdInterval) {
270
- clearInterval(birdInterval);
271
- birdInterval = null;
272
- }
273
- if (!src) return;
274
- const ref = src;
275
- src = null;
276
- try {
277
- ref.stop();
278
- } catch {
279
- /* already stopped */
280
- }
281
- ref.disconnect();
282
- },
283
- dispose() {
284
- if (birdInterval) {
285
- clearInterval(birdInterval);
286
- birdInterval = null;
287
- }
288
- if (src) {
289
- try {
290
- src.stop();
291
- } catch {
292
- /* already stopped */
293
- }
294
- src.disconnect();
295
- }
296
- lp.disconnect();
297
- out.disconnect();
298
- },
299
- };
300
- }