@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
@@ -0,0 +1,30 @@
1
+ /**
2
+ * `WorldKind` — the kinds of render surface a world can be (T7.1/T7.3/T6.2).
3
+ *
4
+ * Moved here (T7.5, `docs/BACKBONE-TASKS.md`'s D6 row) from `runtime/game.ts`
5
+ * so `adapter/game-adapter.ts`'s kind-tagged `MountedWorld` types can name it
6
+ * without a value-level import cycle (`runtime/game.ts` type-imports from
7
+ * `adapter/game-adapter.ts` already). This is a leaf module — it imports
8
+ * nothing — so anything may import it with zero risk of a cycle.
9
+ * `runtime/game.ts` re-exports this SAME type (`export type { WorldKind }`),
10
+ * so no existing `import type { WorldKind } from '../runtime/game'` call site
11
+ * needed to change.
12
+ */
13
+ export type WorldKind = 'threejs' | 'pixijs' | 'react';
14
+ /**
15
+ * Exhaustiveness guard for `WorldKind` dispatch (v4 architecture-review
16
+ * §7.4-2: a hypothetical 4th kind must fail to COMPILE at every kind-dispatch
17
+ * site, not silently contribute nothing or silently default to an existing
18
+ * kind). Lives here — colocated with the kind vocabulary itself, not in a
19
+ * generic util module — so the three call sites that need it
20
+ * (`runtime/create-runtime.ts`'s mount loop, `editor/adapter-resolver.ts`'s
21
+ * `resolveAllWorlds`, `editor/play-mode.ts`'s `installMultiWorldAuthoring`)
22
+ * import it from the same leaf module that defines `WorldKind`, keeping the
23
+ * type and its guard from drifting apart. The `never` parameter is the
24
+ * compile-time half of the guard (TS refuses to call this with anything the
25
+ * compiler hasn't already narrowed to zero remaining variants); the thrown
26
+ * Error is the runtime half, in case a value's static type lied (e.g. data
27
+ * crossing a JSON boundary).
28
+ */
29
+ export declare function assertNever(value: never, context?: string): never;
30
+ //# sourceMappingURL=world-kind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world-kind.d.ts","sourceRoot":"","sources":["../../src/adapter/world-kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEvD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAIjE"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Exhaustiveness guard for `WorldKind` dispatch (v4 architecture-review
3
+ * §7.4-2: a hypothetical 4th kind must fail to COMPILE at every kind-dispatch
4
+ * site, not silently contribute nothing or silently default to an existing
5
+ * kind). Lives here — colocated with the kind vocabulary itself, not in a
6
+ * generic util module — so the three call sites that need it
7
+ * (`runtime/create-runtime.ts`'s mount loop, `editor/adapter-resolver.ts`'s
8
+ * `resolveAllWorlds`, `editor/play-mode.ts`'s `installMultiWorldAuthoring`)
9
+ * import it from the same leaf module that defines `WorldKind`, keeping the
10
+ * type and its guard from drifting apart. The `never` parameter is the
11
+ * compile-time half of the guard (TS refuses to call this with anything the
12
+ * compiler hasn't already narrowed to zero remaining variants); the thrown
13
+ * Error is the runtime half, in case a value's static type lied (e.g. data
14
+ * crossing a JSON boundary).
15
+ */
16
+ export function assertNever(value, context) {
17
+ throw new Error(`Unreachable${context ? ` ${context}` : ''}: unexpected value ${JSON.stringify(value)}`);
18
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * NavMeshManager — wraps recast-navigation for navmesh generation + crowd pathfinding.
3
+ *
4
+ * Usage:
5
+ * await init(); // WASM init (call once per app)
6
+ * const nav = new NavMeshManager();
7
+ * await nav.buildFromMeshes(meshes);
8
+ * const path = nav.findPath(start, end);
9
+ * const crowd = nav.createCrowd(10);
10
+ * // In game loop: nav.updateCrowd(dt);
11
+ */
12
+ import { NavMeshHelper } from '@recast-navigation/three';
13
+ import type { CrowdAgent } from 'recast-navigation';
14
+ import { Crowd } from 'recast-navigation';
15
+ import type { Mesh, Scene } from 'three';
16
+ export type { CrowdAgent };
17
+ export interface Vector3Like {
18
+ x: number;
19
+ y: number;
20
+ z: number;
21
+ }
22
+ export interface NavMeshBuildParams {
23
+ cellSize?: number | undefined;
24
+ cellHeight?: number | undefined;
25
+ walkableSlopeAngle?: number | undefined;
26
+ walkableHeight?: number | undefined;
27
+ walkableClimb?: number | undefined;
28
+ walkableRadius?: number | undefined;
29
+ maxEdgeLen?: number | undefined;
30
+ maxSimplificationError?: number | undefined;
31
+ minRegionArea?: number | undefined;
32
+ mergeRegionArea?: number | undefined;
33
+ }
34
+ export declare function initNavigation(): Promise<void>;
35
+ export declare class NavMeshManager {
36
+ private navMesh;
37
+ private query;
38
+ private crowd;
39
+ private helper;
40
+ /** Build navmesh from Three.js Mesh objects (grounds, obstacles, etc.). */
41
+ buildFromMeshes(meshes: Mesh[], params?: NavMeshBuildParams): boolean;
42
+ /**
43
+ * Destroy all live recast handles (crowd, query, navmesh) and dispose the
44
+ * debug helper. Recast objects live on the WASM heap and are NOT GC'd —
45
+ * they must be explicitly `.destroy()`ed or they leak.
46
+ */
47
+ private destroyRecast;
48
+ /** True once a navmesh has been built (for the NavigationAdapter to gate on). */
49
+ hasNavMesh(): boolean;
50
+ /** Find a straight path between two world positions. Returns [] if no path. */
51
+ findPath(start: Vector3Like, end: Vector3Like): Vector3Like[];
52
+ /** Create a crowd with up to maxAgents agents. */
53
+ createCrowd(maxAgents: number): Crowd;
54
+ /** Step the crowd simulation. Call once per frame. */
55
+ updateCrowd(dt: number): void;
56
+ /** Get or create the wireframe debug mesh. Add to scene once, call update() after rebuilding. */
57
+ getDebugMesh(scene: Scene): NavMeshHelper | null;
58
+ /** Serialize the current navmesh to a binary blob. */
59
+ exportData(): Uint8Array;
60
+ /** Load a navmesh from a previously exported binary blob. */
61
+ loadFromData(data: Uint8Array): void;
62
+ dispose(scene: Scene): void;
63
+ }
64
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/ai/navigation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAW,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAoD,MAAM,mBAAmB,CAAC;AAC5F,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAGzC,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAID,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpD;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,MAAM,CAA8B;IAE5C,2EAA2E;IAC3E,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO;IA4BrE;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAoBrB,iFAAiF;IACjF,UAAU,IAAI,OAAO;IAIrB,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,GAAG,WAAW,EAAE;IAO7D,kDAAkD;IAClD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK;IAMrC,sDAAsD;IACtD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI7B,iGAAiG;IACjG,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,GAAG,IAAI;IAShD,sDAAsD;IACtD,UAAU,IAAI,UAAU;IAKxB,6DAA6D;IAC7D,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAQpC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAM5B"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * NavMeshManager — wraps recast-navigation for navmesh generation + crowd pathfinding.
3
+ *
4
+ * Usage:
5
+ * await init(); // WASM init (call once per app)
6
+ * const nav = new NavMeshManager();
7
+ * await nav.buildFromMeshes(meshes);
8
+ * const path = nav.findPath(start, end);
9
+ * const crowd = nav.createCrowd(10);
10
+ * // In game loop: nav.updateCrowd(dt);
11
+ */
12
+ import { NavMeshHelper, threeToSoloNavMesh } from '@recast-navigation/three';
13
+ import { Crowd, exportNavMesh, importNavMesh, init, NavMeshQuery } from 'recast-navigation';
14
+ import { DEFAULTS } from '../scene/defaults';
15
+ let wasmInitialized = false;
16
+ export async function initNavigation() {
17
+ if (wasmInitialized)
18
+ return;
19
+ await init();
20
+ wasmInitialized = true;
21
+ }
22
+ export class NavMeshManager {
23
+ navMesh = null;
24
+ query = null;
25
+ crowd = null;
26
+ helper = null;
27
+ /** Build navmesh from Three.js Mesh objects (grounds, obstacles, etc.). */
28
+ buildFromMeshes(meshes, params) {
29
+ const d = DEFAULTS.navigation;
30
+ const result = threeToSoloNavMesh(meshes, {
31
+ cs: params?.cellSize ?? d.cellSize,
32
+ ch: params?.cellHeight ?? d.cellHeight,
33
+ walkableSlopeAngle: params?.walkableSlopeAngle ?? d.walkableSlopeAngle,
34
+ walkableHeight: params?.walkableHeight ?? d.walkableHeight,
35
+ walkableClimb: params?.walkableClimb ?? d.walkableClimb,
36
+ walkableRadius: params?.walkableRadius ?? d.walkableRadius,
37
+ maxEdgeLen: params?.maxEdgeLen ?? d.maxEdgeLen,
38
+ maxSimplificationError: params?.maxSimplificationError ?? d.maxSimplificationError,
39
+ minRegionArea: params?.minRegionArea ?? d.minRegionArea,
40
+ mergeRegionArea: params?.mergeRegionArea ?? d.mergeRegionArea,
41
+ // Recast tuning knobs with no DEFAULTS counterpart (not modeled there).
42
+ maxVertsPerPoly: 6,
43
+ detailSampleDist: 6,
44
+ detailSampleMaxError: 1,
45
+ });
46
+ if (!result.success || !result.navMesh)
47
+ return false;
48
+ // Free the previous recast objects before replacing them (WASM heap leak).
49
+ this.destroyRecast();
50
+ this.navMesh = result.navMesh;
51
+ this.query = new NavMeshQuery(this.navMesh);
52
+ return true;
53
+ }
54
+ /**
55
+ * Destroy all live recast handles (crowd, query, navmesh) and dispose the
56
+ * debug helper. Recast objects live on the WASM heap and are NOT GC'd —
57
+ * they must be explicitly `.destroy()`ed or they leak.
58
+ */
59
+ destroyRecast() {
60
+ if (this.helper) {
61
+ this.helper.parent?.remove(this.helper);
62
+ this.helper.dispose?.();
63
+ this.helper = null;
64
+ }
65
+ if (this.crowd) {
66
+ this.crowd.destroy();
67
+ this.crowd = null;
68
+ }
69
+ if (this.query) {
70
+ this.query.destroy();
71
+ this.query = null;
72
+ }
73
+ if (this.navMesh) {
74
+ this.navMesh.destroy();
75
+ this.navMesh = null;
76
+ }
77
+ }
78
+ /** True once a navmesh has been built (for the NavigationAdapter to gate on). */
79
+ hasNavMesh() {
80
+ return this.navMesh !== null;
81
+ }
82
+ /** Find a straight path between two world positions. Returns [] if no path. */
83
+ findPath(start, end) {
84
+ if (!this.query)
85
+ return [];
86
+ const result = this.query.computePath(start, end);
87
+ if (!result.success)
88
+ return [];
89
+ return result.path;
90
+ }
91
+ /** Create a crowd with up to maxAgents agents. */
92
+ createCrowd(maxAgents) {
93
+ if (!this.navMesh)
94
+ throw new Error('Build navmesh first');
95
+ this.crowd = new Crowd(this.navMesh, { maxAgents, maxAgentRadius: 0.6 });
96
+ return this.crowd;
97
+ }
98
+ /** Step the crowd simulation. Call once per frame. */
99
+ updateCrowd(dt) {
100
+ this.crowd?.update(dt);
101
+ }
102
+ /** Get or create the wireframe debug mesh. Add to scene once, call update() after rebuilding. */
103
+ getDebugMesh(scene) {
104
+ if (!this.navMesh)
105
+ return null;
106
+ if (!this.helper) {
107
+ this.helper = new NavMeshHelper(this.navMesh);
108
+ scene.add(this.helper);
109
+ }
110
+ return this.helper;
111
+ }
112
+ /** Serialize the current navmesh to a binary blob. */
113
+ exportData() {
114
+ if (!this.navMesh)
115
+ throw new Error('No navmesh to export');
116
+ return exportNavMesh(this.navMesh);
117
+ }
118
+ /** Load a navmesh from a previously exported binary blob. */
119
+ loadFromData(data) {
120
+ const { navMesh } = importNavMesh(data);
121
+ // Free the previous recast objects before replacing them.
122
+ this.destroyRecast();
123
+ this.navMesh = navMesh;
124
+ this.query = new NavMeshQuery(this.navMesh);
125
+ }
126
+ dispose(scene) {
127
+ // Ensure the helper is removed from the passed scene as well, then destroy
128
+ // every recast handle (crowd/query/navmesh) so nothing leaks on the WASM heap.
129
+ if (this.helper)
130
+ scene.remove(this.helper);
131
+ this.destroyRecast();
132
+ }
133
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Blend-tree shapes shared by the (removed, E5) legacy `AnimGraph` runtime and
3
+ * the current XState -> AnimationMixer binding (`xstate-animation-binding.ts`,
4
+ * E2). Retained deliberately — see `packages/engine/test/removal-inventory.ts`'s
5
+ * `animgraph` family note: `BlendTreeDef`/`BlendChild` are imported directly by
6
+ * `xstate-animation-binding.ts`, so this file survived E5's removal as a
7
+ * partial edit rather than being deleted whole. Every other type this file
8
+ * used to declare (`AnimGraphFile`, `AnimParameter`, `AnimLayer`, `AnimState`,
9
+ * `AnimTransition`, `TransitionCondition` — the state-machine-shaped half of
10
+ * the old `.animgraph.json` format) was deleted with the runtime that read
11
+ * them (`anim-graph.ts`).
12
+ */
13
+ export interface BlendTreeDef {
14
+ type: '1D' | '2D' | 'direct';
15
+ parameter: string;
16
+ parameterY?: string;
17
+ children: BlendChild[];
18
+ }
19
+ export interface BlendChild {
20
+ clip: string;
21
+ threshold: number;
22
+ thresholdY?: number;
23
+ weight?: number;
24
+ }
25
+ //# sourceMappingURL=anim-graph-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anim-graph-types.d.ts","sourceRoot":"","sources":["../../src/animation/anim-graph-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,QAAQ,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,213 @@
1
+ import { type SystemPhaseName } from '../core/types';
2
+ /**
3
+ * D1 — the canonical `AnimationClock` (spec §10 D1, §3.2, §4).
4
+ *
5
+ * VGAI owns exactly one clock per cinematic/scene context. It is the single
6
+ * source of truth for "what time is it" that Theatre sequences, registered
7
+ * GSAP timelines, and cinematic cue evaluators are seeked against (D2/D5/D7
8
+ * — NOT implemented here, this unit is the clock only). The render seam
9
+ * (I2) drives this clock's `seek(t)`/frame-index API directly, without ever
10
+ * advancing gameplay substeps.
11
+ *
12
+ * Design constraints (from the spec and the D1 review notes):
13
+ *
14
+ * - Time is in SECONDS with no hidden wall-clock read. This class never
15
+ * reads the system clock or a monotonic timer directly — the caller (the
16
+ * fixed-step game loop for live playback, or a render/export harness for
17
+ * offline scrubbing) is the only source of `dt`/target time. That is
18
+ * what makes `seek(t)` and frame-index seeking reproducible offline.
19
+ * - No parallel scheduler. Evaluator registration reuses the engine's own
20
+ * `SystemPhaseName`/`PHASE_ORDER` vocabulary (`core/types.ts`) — the same
21
+ * phase names every `GameComponent`/system in the engine already uses —
22
+ * so a Theatre binding (D2), a GSAP registration (D7), and a cue
23
+ * evaluator (D5) can each declare which phase they conceptually belong
24
+ * to and be invoked in one deterministic, engine-wide order instead of
25
+ * each subsystem inventing its own ordering rule. IMPORTANT: this only
26
+ * orders evaluators relative to each other WITHIN one `emit()` — i.e.
27
+ * within a single `seek()`/`advance()` call. Registering at `'preRender'`
28
+ * does NOT mean an evaluator runs during the live engine's own
29
+ * `system-runner` `preRender` phase inside a running RAF frame — the
30
+ * clock is independent of the live game loop's phase execution (and
31
+ * during offline export/scrub there is no RAF frame at all). The shared
32
+ * vocabulary buys a familiar, documented ordering convention between
33
+ * clock-side evaluators, not a promise of interleaving with unrelated
34
+ * engine systems that happen to run in a same-named phase during a live
35
+ * frame.
36
+ * - Frame-index seeking for export must be EXACT: frame `n` at fps `f`
37
+ * always evaluates `start + n / f`, computed directly from `n` and `f`
38
+ * on every call — never by accumulating `1/f` repeatedly, which would
39
+ * drift. See `seekFrame` below.
40
+ */
41
+ /** Sign of time evolution while the clock is actually playing. */
42
+ export type ClockDirection = 'forward' | 'reverse';
43
+ /** Coarse playback state. `advance()` is a no-op unless this is `'playing'`. */
44
+ export type ClockPlaybackState = 'playing' | 'paused' | 'stopped';
45
+ /** Loop/range metadata — the valid time domain `[start, end]`. */
46
+ export interface ClockRange {
47
+ readonly start: number;
48
+ readonly end: number;
49
+ readonly loop: boolean;
50
+ }
51
+ /**
52
+ * One contiguous, monotonic sweep of time within a single `[start, end]`
53
+ * lap. A step that crosses a loop boundary produces MORE THAN ONE interval
54
+ * (one per lap segment) so a cue evaluator can test each segment
55
+ * independently and never conflate "crossed near the end of lap 1" with
56
+ * "crossed near the start of lap 2".
57
+ *
58
+ * ## Cue-crossing detection convention (half-open)
59
+ *
60
+ * A cue/marker at time `t` is considered CROSSED by an interval iff:
61
+ *
62
+ * - forward interval: `t > interval.from && t <= interval.to`
63
+ * - reverse interval: `t < interval.from && t >= interval.to`
64
+ *
65
+ * This is deliberately half-open on the "from" side and closed on the "to"
66
+ * side (i.e. the endpoint the sweep is *arriving at* counts, the endpoint it
67
+ * *departed from* does not). Consumers (D5 cinematic cues) MUST use exactly
68
+ * this convention, never an inclusive-both-ends test: `seek()` is
69
+ * idempotent and re-asserts a zero-length interval `{from: t, to: t}` on a
70
+ * repeated seek to the same `t` (see `AnimationClock.seek`), and an
71
+ * inclusive-both-ends detector would re-match that zero-length interval
72
+ * (`from === to === t`) and double-fire on every repeated seek. The
73
+ * half-open test above never matches a zero-length interval (`t > t` and
74
+ * `t < t` are both always false), so a fire-once cue evaluator built on it
75
+ * gets idempotent re-seeks "for free" with no extra bookkeeping.
76
+ */
77
+ export interface ClockInterval {
78
+ readonly from: number;
79
+ readonly to: number;
80
+ readonly direction: ClockDirection;
81
+ }
82
+ /**
83
+ * What a subscribed evaluator receives on every `seek`/`advance` call that
84
+ * changes (or idempotently re-asserts) the clock's position.
85
+ */
86
+ export interface ClockCrossing {
87
+ readonly previousTime: number;
88
+ readonly currentTime: number;
89
+ /** Direction of this specific crossing (not necessarily `clock.direction`,
90
+ * which reflects live playback intent — a `seek()` while paused still
91
+ * reports the direction it moved, or the last known direction if it was
92
+ * a no-op re-seek to the same time). */
93
+ readonly direction: ClockDirection;
94
+ readonly timeScale: number;
95
+ /** True iff this crossing wrapped a loop boundary (produced 2+ intervals). */
96
+ readonly looped: boolean;
97
+ /**
98
+ * The monotonic sweep segment(s) covered by this crossing, in
99
+ * chronological evaluation order. Normally exactly one interval
100
+ * `[previousTime, currentTime]`; a loop-wrapping step yields one interval
101
+ * per lap segment traversed. A subscriber determines exactly which cue
102
+ * times were crossed (and in which direction) by testing each interval,
103
+ * never by comparing `previousTime`/`currentTime` directly — that alone
104
+ * is ambiguous across a wrap.
105
+ */
106
+ readonly intervals: readonly ClockInterval[];
107
+ }
108
+ export type ClockEvaluator = (crossing: ClockCrossing) => void;
109
+ export interface ClockEvaluatorHandle {
110
+ dispose(): void;
111
+ }
112
+ export interface AnimationClockOptions {
113
+ /** Range start, in seconds. Default 0. */
114
+ start?: number;
115
+ /** Range end, in seconds. Default `Math.max(start, 1)`. */
116
+ end?: number;
117
+ /** Whether `advance()` wraps at the range boundary instead of clamping. Default false. */
118
+ loop?: boolean;
119
+ /** Playback rate multiplier, must be finite and >= 0. Default 1. */
120
+ timeScale?: number;
121
+ }
122
+ /**
123
+ * The engine-owned canonical clock. See the module doc comment above for
124
+ * the design constraints this implementation is bound by.
125
+ */
126
+ export declare class AnimationClock {
127
+ private _previousTime;
128
+ private _currentTime;
129
+ private _range;
130
+ private _timeScale;
131
+ private _playDirection;
132
+ private _lastCrossingDirection;
133
+ private _playbackState;
134
+ private _evaluators;
135
+ private _registrationCounter;
136
+ constructor(options?: AnimationClockOptions);
137
+ /** Current playhead time, in seconds. */
138
+ get time(): number;
139
+ /** Playhead time immediately before the most recent seek/advance. */
140
+ get previousTime(): number;
141
+ /**
142
+ * Playback direction. `'paused'` whenever `playbackState !== 'playing'`
143
+ * (covers both `pause()` and `stop()`) — matches the spec's literal
144
+ * `direction: forward | reverse | paused` acceptance criterion. The
145
+ * underlying intended direction is preserved across pause/resume; see
146
+ * `play()`.
147
+ */
148
+ get direction(): ClockDirection | 'paused';
149
+ get playbackState(): ClockPlaybackState;
150
+ get timeScale(): number;
151
+ set timeScale(value: number);
152
+ get range(): ClockRange;
153
+ /**
154
+ * Update loop/range metadata. The current playhead is clamped into the
155
+ * new range if necessary (reported as an ordinary crossing — same
156
+ * evaluator path as `seek`/`advance` — so subscribers observe it).
157
+ */
158
+ setRange(next: Partial<Pick<ClockRange, 'start' | 'end' | 'loop'>>): void;
159
+ /**
160
+ * Begin/resume playback. `direction` sets (or re-asserts) the intended
161
+ * playback direction for subsequent `advance()` calls; omit it to resume
162
+ * in whatever direction was last set (default `'forward'` the first time).
163
+ */
164
+ play(direction?: ClockDirection): void;
165
+ /** Halt playback at the current position. `advance()` becomes a no-op. */
166
+ pause(): void;
167
+ /**
168
+ * Halt playback at the current position (distinct from `pause()` only in
169
+ * reported `playbackState`; this unit does not prescribe a reset-to-start
170
+ * policy — that is a cinematic-controller/render-seam decision, D5/I2).
171
+ * `advance()` is a no-op in this state, same as `paused`.
172
+ */
173
+ stop(): void;
174
+ /**
175
+ * Jump directly to `t` (clamped into `range`). Idempotent: calling
176
+ * `seek(t)` twice in a row leaves `time`/`previousTime` identical to
177
+ * calling it once — the second call is a true no-op (no state mutation,
178
+ * though evaluators still fire so a subscriber can rely on `seek` always
179
+ * producing a crossing for e.g. re-asserting visual state).
180
+ */
181
+ seek(t: number): ClockCrossing;
182
+ /**
183
+ * Frame-index seek for export (D1 AC): seeks to EXACTLY `range.start +
184
+ * n / fps`, computed fresh from `n`/`fps` on every call. This is what
185
+ * keeps a rendered frame sequence drift-free — unlike repeatedly calling
186
+ * `advance(1 / fps)` `n` times (which accumulates float error), this
187
+ * always derives the same exact double for a given `(n, fps)` pair no
188
+ * matter what the clock's prior state was.
189
+ */
190
+ seekFrame(n: number, fps: number): ClockCrossing;
191
+ /**
192
+ * Fixed-step advance by `dt` seconds (magnitude; sign of movement comes
193
+ * from `direction`/`play()`, not from `dt`'s sign). A no-op whenever
194
+ * `playbackState !== 'playing'` — this is what makes `advance()` do
195
+ * nothing while paused (D1 AC). Returns `null` for that no-op case;
196
+ * otherwise returns the resulting crossing (which may span multiple loop
197
+ * laps if `dt * timeScale` exceeds the range length).
198
+ */
199
+ advance(dt: number): ClockCrossing | null;
200
+ /**
201
+ * Register an evaluator against a phase from the engine's own
202
+ * `SystemPhaseName` vocabulary (`core/types.ts`). Evaluators fire on
203
+ * every `seek()`/`advance()` (including idempotent no-op seeks and
204
+ * `setRange` clamps) in `PHASE_ORDER` order, then registration order
205
+ * within a phase — the same "deterministic phase order" every other
206
+ * engine system is invoked in, so a Theatre binding, a registered-GSAP
207
+ * seek, and a cue evaluator can each declare their phase and compose
208
+ * without inventing a second ordering rule.
209
+ */
210
+ subscribe(phase: SystemPhaseName, evaluator: ClockEvaluator): ClockEvaluatorHandle;
211
+ private emit;
212
+ }
213
+ //# sourceMappingURL=animation-clock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation-clock.d.ts","sourceRoot":"","sources":["../../src/animation/animation-clock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,kEAAkE;AAClE,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnD,gFAAgF;AAChF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElE,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;6CAGyC;IACzC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;CAC9C;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;AAE/D,MAAM,WAAW,oBAAoB;IACnC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0GD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,sBAAsB,CAA6B;IAC3D,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,oBAAoB,CAAK;gBAErB,OAAO,GAAE,qBAA0B;IAgB/C,yCAAyC;IACzC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,qEAAqE;IACrE,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;;;;;OAMG;IACH,IAAI,SAAS,IAAI,cAAc,GAAG,QAAQ,CAEzC;IAED,IAAI,aAAa,IAAI,kBAAkB,CAEtC;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,EAK1B;IAED,IAAI,KAAK,IAAI,UAAU,CAEtB;IAED;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI;IAczE;;;;OAIG;IACH,IAAI,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI;IAKtC,0EAA0E;IAC1E,KAAK,IAAI,IAAI;IAIb;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IAIZ;;;;;;OAMG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa;IAmB9B;;;;;;;OAOG;IACH,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa;IAOhD;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAsBzC;;;;;;;;;OASG;IACH,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,GAAG,oBAAoB;IAgBlF,OAAO,CAAC,IAAI;CA+Bb"}