@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,197 @@
1
+ import * as THREE from 'three';
2
+ import { loadTexture } from './asset-loaders';
3
+ import { DEFAULTS } from './defaults';
4
+ import { buildGeneratedGeometry } from './geometry-registry';
5
+ import { buildCustomMaterial } from './material-registry';
6
+ /**
7
+ * Single source of truth for turning a `SceneMesh` / `SceneMaterial` descriptor
8
+ * into Three.js geometry/material. Both the runtime scene-loader and the editor's
9
+ * entity-factory import these, so the editor preview renders exactly what the game
10
+ * renders (the WYSIWYG guarantee in ARCHITECTURE.md). Previously these were
11
+ * copy-pasted in two places and had to be hand-synced — any new material feature
12
+ * added to one and not the other silently broke that guarantee.
13
+ *
14
+ * Callers must have imported the side-effect registration modules
15
+ * (`./geometries`, `./materials`, plus any custom defs) so `buildGeneratedGeometry`
16
+ * and `buildCustomMaterial` resolve their registries.
17
+ */
18
+ // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: straightforward type-based switch with fallback args
19
+ export function createGeometry(mesh) {
20
+ if (mesh.generator) {
21
+ return buildGeneratedGeometry(mesh.generator, mesh.generatorParams ?? {});
22
+ }
23
+ const args = mesh.args ?? [];
24
+ switch (mesh.type) {
25
+ case 'box':
26
+ return new THREE.BoxGeometry(args[0] ?? 1, args[1] ?? 1, args[2] ?? 1);
27
+ case 'sphere':
28
+ return new THREE.SphereGeometry(args[0] ?? 0.5, args[1] ?? 32, args[2] ?? 16);
29
+ case 'plane':
30
+ return new THREE.PlaneGeometry(args[0] ?? 1, args[1] ?? 1);
31
+ case 'cylinder':
32
+ return new THREE.CylinderGeometry(args[0] ?? 0.5, args[1] ?? 0.5, args[2] ?? 1, args[3] ?? 32);
33
+ case 'capsule':
34
+ return new THREE.CapsuleGeometry(args[0] ?? 0.5, args[1] ?? 1, args[2] ?? 4, args[3] ?? 16);
35
+ default:
36
+ return new THREE.BoxGeometry(1, 1, 1);
37
+ }
38
+ }
39
+ // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: flat type-based switch building Three materials
40
+ export function createMaterial(mat) {
41
+ if (!mat)
42
+ return new THREE.MeshStandardMaterial({ color: DEFAULTS.material.color });
43
+ // Only include texture props when actually defined (Three.js warns on undefined values)
44
+ const textures = {};
45
+ if (mat.map)
46
+ textures.map = loadTexture(mat.map);
47
+ if (mat.normalMap)
48
+ textures.normalMap = loadTexture(mat.normalMap);
49
+ if (mat.emissiveMap)
50
+ textures.emissiveMap = loadTexture(mat.emissiveMap);
51
+ if (mat.aoMap)
52
+ textures.aoMap = loadTexture(mat.aoMap);
53
+ if (mat.lightMap)
54
+ textures.lightMap = loadTexture(mat.lightMap);
55
+ if (mat.roughnessMap)
56
+ textures.roughnessMap = loadTexture(mat.roughnessMap);
57
+ if (mat.metalnessMap)
58
+ textures.metalnessMap = loadTexture(mat.metalnessMap);
59
+ // R1c — every fallback below reads DEFAULTS.material.* instead of
60
+ // duplicating its value as a bare literal, so DEFAULTS stays the single
61
+ // source of truth for what an omitted field renders as (see
62
+ // defaults-out-of-scope-consistency.test.ts / material-factory.test.ts's
63
+ // "omitted-field" locks, which fail if either copy drifts from the other).
64
+ const dMat = DEFAULTS.material;
65
+ const sideValue = mat.side ?? dMat.side;
66
+ const side = sideValue === 'back'
67
+ ? THREE.BackSide
68
+ : sideValue === 'double'
69
+ ? THREE.DoubleSide
70
+ : THREE.FrontSide;
71
+ const opacity = mat.opacity ?? dMat.opacity;
72
+ const transparent = mat.transparent ?? dMat.transparent;
73
+ switch (mat.type) {
74
+ case 'basic':
75
+ return new THREE.MeshBasicMaterial({
76
+ color: mat.color ?? dMat.color,
77
+ ...textures,
78
+ lightMapIntensity: mat.lightMapIntensity ?? 1,
79
+ opacity,
80
+ transparent,
81
+ side,
82
+ });
83
+ case 'toon':
84
+ return new THREE.MeshToonMaterial({
85
+ color: mat.color ?? dMat.color,
86
+ ...textures,
87
+ lightMapIntensity: mat.lightMapIntensity ?? 1,
88
+ emissive: mat.emissive ?? dMat.emissive,
89
+ emissiveIntensity: mat.emissiveIntensity ?? dMat.emissiveIntensity,
90
+ opacity,
91
+ transparent,
92
+ side,
93
+ });
94
+ case 'physical':
95
+ return new THREE.MeshPhysicalMaterial({
96
+ color: mat.color ?? dMat.color,
97
+ metalness: mat.metalness ?? dMat.metalness,
98
+ roughness: mat.roughness ?? dMat.roughness,
99
+ ...textures,
100
+ lightMapIntensity: mat.lightMapIntensity ?? 1,
101
+ emissive: mat.emissive ?? dMat.emissive,
102
+ emissiveIntensity: mat.emissiveIntensity ?? dMat.emissiveIntensity,
103
+ opacity,
104
+ transparent,
105
+ side,
106
+ flatShading: mat.flatShading ?? dMat.flatShading,
107
+ // Clearcoat
108
+ ...(mat.clearcoat
109
+ ? {
110
+ clearcoat: mat.clearcoat.clearcoat,
111
+ clearcoatRoughness: mat.clearcoat.clearcoatRoughness ?? dMat.clearcoat.clearcoatRoughness,
112
+ ...(mat.clearcoat.clearcoatMap
113
+ ? { clearcoatMap: loadTexture(mat.clearcoat.clearcoatMap) }
114
+ : {}),
115
+ ...(mat.clearcoat.clearcoatRoughnessMap
116
+ ? { clearcoatRoughnessMap: loadTexture(mat.clearcoat.clearcoatRoughnessMap) }
117
+ : {}),
118
+ }
119
+ : {}),
120
+ // Transmission — `thickness` used to hardcode a literal `0` here,
121
+ // silently diverging from DEFAULTS.material.transmission.thickness
122
+ // (0.5, per the editor's Transmission inspector default). Fixed:
123
+ // read DEFAULTS directly, like every other fallback in this file.
124
+ ...(mat.transmission
125
+ ? {
126
+ transmission: mat.transmission.transmission,
127
+ ior: mat.transmission.ior ?? dMat.transmission.ior,
128
+ thickness: mat.transmission.thickness ?? dMat.transmission.thickness,
129
+ ...(mat.transmission.attenuationColor
130
+ ? { attenuationColor: new THREE.Color(mat.transmission.attenuationColor) }
131
+ : {}),
132
+ attenuationDistance: mat.transmission.attenuationDistance ?? Infinity,
133
+ ...(mat.transmission.transmissionMap
134
+ ? { transmissionMap: loadTexture(mat.transmission.transmissionMap) }
135
+ : {}),
136
+ }
137
+ : {}),
138
+ // Sheen
139
+ ...(mat.sheen
140
+ ? {
141
+ sheen: mat.sheen.sheen,
142
+ sheenColor: new THREE.Color(mat.sheen.sheenColor ?? dMat.sheen.sheenColor),
143
+ sheenRoughness: mat.sheen.sheenRoughness ?? dMat.sheen.sheenRoughness,
144
+ ...(mat.sheen.sheenColorMap
145
+ ? { sheenColorMap: loadTexture(mat.sheen.sheenColorMap) }
146
+ : {}),
147
+ ...(mat.sheen.sheenRoughnessMap
148
+ ? { sheenRoughnessMap: loadTexture(mat.sheen.sheenRoughnessMap) }
149
+ : {}),
150
+ }
151
+ : {}),
152
+ // Iridescence
153
+ ...(mat.iridescence
154
+ ? {
155
+ iridescence: mat.iridescence.iridescence,
156
+ iridescenceIOR: mat.iridescence.iridescenceIOR ?? dMat.iridescence.iridescenceIOR,
157
+ iridescenceThicknessRange: mat.iridescence.iridescenceThicknessRange ??
158
+ dMat.iridescence.iridescenceThicknessRange,
159
+ ...(mat.iridescence.iridescenceMap
160
+ ? { iridescenceMap: loadTexture(mat.iridescence.iridescenceMap) }
161
+ : {}),
162
+ ...(mat.iridescence.iridescenceThicknessMap
163
+ ? {
164
+ iridescenceThicknessMap: loadTexture(mat.iridescence.iridescenceThicknessMap),
165
+ }
166
+ : {}),
167
+ }
168
+ : {}),
169
+ // Displacement
170
+ ...(mat.displacementMap ? { displacementMap: loadTexture(mat.displacementMap) } : {}),
171
+ ...(mat.displacementScale !== undefined
172
+ ? { displacementScale: mat.displacementScale }
173
+ : {}),
174
+ ...(mat.displacementBias !== undefined ? { displacementBias: mat.displacementBias } : {}),
175
+ });
176
+ case 'custom': {
177
+ if (!mat.def) {
178
+ throw new Error('Custom material requires a "def" (registered material name)');
179
+ }
180
+ return buildCustomMaterial(mat.def, mat.uniforms ?? {});
181
+ }
182
+ default:
183
+ return new THREE.MeshStandardMaterial({
184
+ color: mat.color ?? dMat.color,
185
+ metalness: mat.metalness ?? dMat.metalness,
186
+ roughness: mat.roughness ?? dMat.roughness,
187
+ ...textures,
188
+ lightMapIntensity: mat.lightMapIntensity ?? 1,
189
+ emissive: mat.emissive ?? dMat.emissive,
190
+ emissiveIntensity: mat.emissiveIntensity ?? dMat.emissiveIntensity,
191
+ opacity,
192
+ transparent,
193
+ side,
194
+ flatShading: mat.flatShading ?? dMat.flatShading,
195
+ });
196
+ }
197
+ }
@@ -0,0 +1,40 @@
1
+ import type * as THREE from 'three';
2
+ /**
3
+ * A custom-material definition. Registered by name and resolved when a scene
4
+ * material declares `{ type: 'custom', def: <name> }`.
5
+ *
6
+ * The GLSL program lives here in code (the "behavior" half); the per-entity
7
+ * authored uniform values arrive as data on the scene material's `uniforms`
8
+ * (the "data" half) and are passed to `build`. A def may optionally tick its
9
+ * own uniforms each frame (e.g. uTime) via `update`.
10
+ *
11
+ * This is the native extension point of the material system — not a wrapper:
12
+ * `build` returns a real THREE.Material (typically a ShaderMaterial, or a stock
13
+ * material patched via onBeforeCompile), and the engine renders it directly.
14
+ */
15
+ export interface MaterialDef {
16
+ /** Build a real THREE material from authored uniform values. */
17
+ build(uniforms: Record<string, unknown>): THREE.Material;
18
+ /** Optional per-frame uniform update for self-animating materials. */
19
+ update?(dt: number, material: THREE.Material, uniforms: Record<string, unknown>): void;
20
+ /** Representative flat color (CSS hex) for the editor's "unlit" view mode. */
21
+ previewColor?: string;
22
+ }
23
+ /** Register a custom-material definition under `name`. */
24
+ export declare function registerMaterial(name: string, def: MaterialDef): void;
25
+ /** Look up a registered material definition. */
26
+ export declare function getMaterialDef(name: string): MaterialDef | undefined;
27
+ /**
28
+ * Build a custom material by registered def name. Tags the resulting material's
29
+ * `userData` so the per-frame tick and the editor view-mode override can find it.
30
+ * Throws if the def is unknown (fail loud — same posture as the component registry).
31
+ */
32
+ export declare function buildCustomMaterial(name: string, uniforms: Record<string, unknown>): THREE.Material;
33
+ /**
34
+ * Tick every custom material under `root` (self-animating uniforms). Called from
35
+ * the runtime `preRender` phase and from the editor's edit-mode RAF — one code
36
+ * path, both modes. Walks the scene graph; materials without a `__matDef` tag are
37
+ * skipped.
38
+ */
39
+ export declare function tickCustomMaterials(root: THREE.Object3D, dt: number): void;
40
+ //# sourceMappingURL=material-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-registry.d.ts","sourceRoot":"","sources":["../../src/scene/material-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;IACzD,sEAAsE;IACtE,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvF,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAErE;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,KAAK,CAAC,QAAQ,CAShB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAW1E"}
@@ -0,0 +1,44 @@
1
+ const registry = new Map();
2
+ /** Register a custom-material definition under `name`. */
3
+ export function registerMaterial(name, def) {
4
+ registry.set(name, def);
5
+ }
6
+ /** Look up a registered material definition. */
7
+ export function getMaterialDef(name) {
8
+ return registry.get(name);
9
+ }
10
+ /**
11
+ * Build a custom material by registered def name. Tags the resulting material's
12
+ * `userData` so the per-frame tick and the editor view-mode override can find it.
13
+ * Throws if the def is unknown (fail loud — same posture as the component registry).
14
+ */
15
+ export function buildCustomMaterial(name, uniforms) {
16
+ const def = registry.get(name);
17
+ if (!def) {
18
+ throw new Error(`Custom material def "${name}" not found in material registry`);
19
+ }
20
+ const material = def.build(uniforms ?? {});
21
+ material.userData['__matDef'] = name;
22
+ material.userData['__uniforms'] = uniforms ?? {};
23
+ return material;
24
+ }
25
+ /**
26
+ * Tick every custom material under `root` (self-animating uniforms). Called from
27
+ * the runtime `preRender` phase and from the editor's edit-mode RAF — one code
28
+ * path, both modes. Walks the scene graph; materials without a `__matDef` tag are
29
+ * skipped.
30
+ */
31
+ export function tickCustomMaterials(root, dt) {
32
+ root.traverse((obj) => {
33
+ const material = obj.material;
34
+ if (!material)
35
+ return;
36
+ const list = Array.isArray(material) ? material : [material];
37
+ for (const mat of list) {
38
+ const defName = mat.userData?.['__matDef'];
39
+ if (!defName)
40
+ continue;
41
+ registry.get(defName)?.update?.(dt, mat, mat.userData['__uniforms'] ?? {});
42
+ }
43
+ });
44
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Built-in custom-material definitions. Importing this module for its side
3
+ * effects registers the built-ins into the material registry. Both the runtime
4
+ * factory (scene-loader) and the editor factory (entity-factory) import it so
5
+ * custom materials resolve on whichever side builds first.
6
+ */
7
+ import './water';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/scene/materials/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,SAAS,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Built-in custom-material definitions. Importing this module for its side
3
+ * effects registers the built-ins into the material registry. Both the runtime
4
+ * factory (scene-loader) and the editor factory (entity-factory) import it so
5
+ * custom materials resolve on whichever side builds first.
6
+ */
7
+ import './water';
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=water.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"water.d.ts","sourceRoot":"","sources":["../../../src/scene/materials/water.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ import * as THREE from 'three';
2
+ import { registerMaterial } from '../material-registry';
3
+ /**
4
+ * Built-in "Water" custom material — the proof-of-concept for first-class custom
5
+ * shaders (roadmap item #1). Vertex shader displaces a plane with travelling sine
6
+ * waves driven by `uTime`; fragment tints by `uColor` with a little wave-crest
7
+ * lightening. Demonstrates: authored uniforms (color, waveHeight), a real
8
+ * ShaderMaterial built from scene JSON, and a self-animating uniform (uTime).
9
+ */
10
+ const vertexShader = /* glsl */ `
11
+ uniform float uTime;
12
+ uniform float uWaveHeight;
13
+ varying float vWave;
14
+ void main() {
15
+ vec3 p = position;
16
+ // PlaneGeometry lies in local XY with normal +Z; displace along the normal so
17
+ // a plane rotated flat (XZ) ripples upward in world Y.
18
+ float wave =
19
+ sin(p.x * 1.5 + uTime) * 0.6 +
20
+ cos(p.y * 1.2 + uTime * 0.8) * 0.4;
21
+ p.z += wave * uWaveHeight;
22
+ vWave = wave;
23
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(p, 1.0);
24
+ }
25
+ `;
26
+ const fragmentShader = /* glsl */ `
27
+ uniform vec3 uColor;
28
+ varying float vWave;
29
+ void main() {
30
+ vec3 c = uColor + vWave * 0.12;
31
+ gl_FragColor = vec4(c, 1.0);
32
+ }
33
+ `;
34
+ registerMaterial('Water', {
35
+ previewColor: '#0a5fa5',
36
+ build(uniforms) {
37
+ const color = uniforms['color'] ?? '#0a5fa5';
38
+ const waveHeight = uniforms['waveHeight'] ?? 0.4;
39
+ return new THREE.ShaderMaterial({
40
+ uniforms: {
41
+ uTime: { value: 0 },
42
+ uColor: { value: new THREE.Color(color) },
43
+ uWaveHeight: { value: waveHeight },
44
+ },
45
+ vertexShader,
46
+ fragmentShader,
47
+ });
48
+ },
49
+ update(dt, material) {
50
+ const uTime = material.uniforms['uTime'];
51
+ if (uTime)
52
+ uTime.value += dt;
53
+ },
54
+ });
@@ -0,0 +1,23 @@
1
+ import type { ZodIssue } from 'zod';
2
+ import type { InstancesFile, MaterialFile, PrefabFile, SceneFile } from './schema';
3
+ export declare class SceneParseError extends Error {
4
+ readonly issues: ZodIssue[];
5
+ /** The offending file's path/URL, when the caller knows it (T4.6). */
6
+ readonly filePath?: string | undefined;
7
+ constructor(issues: ZodIssue[], filePath?: string);
8
+ }
9
+ export declare function parseSceneFile(json: unknown, filePath?: string): SceneFile;
10
+ export declare function parsePrefabFile(json: unknown, filePath?: string): PrefabFile;
11
+ /**
12
+ * Parse a `.mat.json` shared material asset (T4.6). Unlike scene/prefab files,
13
+ * there is no version-range gate yet for this format — `MaterialFileSchema`'s
14
+ * `version` field is RESERVED (see `schema-consumption-map.ts`).
15
+ */
16
+ export declare function parseMaterialFile(json: unknown, filePath?: string): MaterialFile;
17
+ /**
18
+ * Parse a `.instances.json` instance-transform asset (F3,
19
+ * docs/VSCN-STRUCTURAL-GAPS-DESIGN.md). Mirrors `parseMaterialFile` exactly —
20
+ * no version-range gate (the format is a bare tuple array, no `version` field).
21
+ */
22
+ export declare function parseInstancesFile(json: unknown, filePath?: string): InstancesFile;
23
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/scene/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAQnF,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE3B,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM;CAQlD;AAmID,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAY1E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAS5E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,CAMhF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,CAMlF"}
@@ -0,0 +1,179 @@
1
+ import { checkSceneVersionInRange } from './scene-version';
2
+ import { InstancesFileSchema, MaterialFileSchema, PrefabFileSchema, SceneFileSchema, } from './schema';
3
+ export class SceneParseError extends Error {
4
+ issues;
5
+ /** The offending file's path/URL, when the caller knows it (T4.6). */
6
+ filePath;
7
+ constructor(issues, filePath) {
8
+ const msg = issues.map((i) => ` ${i.path.join('.')}: ${i.message}`).join('\n');
9
+ const header = filePath ? `Scene validation failed (${filePath}):` : 'Scene validation failed:';
10
+ super(`${header}\n${msg}`);
11
+ this.name = 'SceneParseError';
12
+ this.issues = issues;
13
+ this.filePath = filePath;
14
+ }
15
+ }
16
+ // ---------------------------------------------------------------------------
17
+ // D8 — removed-format migration guard: declarative property tracks
18
+ // (`animation.tracks`) were deleted (spec §3.2/§10 D8; Theatre — `@theatre/core`
19
+ // — is the sole authored continuous-animation source now). `SceneAnimationSchema`
20
+ // no longer declares a `tracks` field at all (so the generated JSON schema stays
21
+ // clean), which means Zod's default object mode would otherwise silently STRIP
22
+ // an authored `animation.tracks` rather than reporting it — violating Global AC
23
+ // §6 ("Removed formats fail with a concise migration/removal error rather than
24
+ // being partially read"). This walks the RAW pre-Zod JSON (Zod would already
25
+ // have stripped `tracks` by the time any schema-level check could see it) and
26
+ // throws a `SceneParseError` before Zod ever parses the data. Matches on the
27
+ // literal key `animation` (singular, an object) carrying a `tracks` property —
28
+ // this is deliberately narrower than Scene UI's unrelated, RETAINED
29
+ // `ui[].animations[].tracks` (plural `animations`), which this guard must not
30
+ // trip on.
31
+ // ---------------------------------------------------------------------------
32
+ /** True when `value` is a plain object (not an array) carrying a `tracks` property — the shape
33
+ * `SceneAnimationSchema` used to declare before D8 deleted it. */
34
+ function isRemovedTracksAnimation(value) {
35
+ return !!value && typeof value === 'object' && !Array.isArray(value) && 'tracks' in value;
36
+ }
37
+ function findRemovedPropertyTrackPathInArray(node, path) {
38
+ for (let i = 0; i < node.length; i++) {
39
+ const hit = findRemovedPropertyTrackPath(node[i], `${path}[${i}]`);
40
+ if (hit)
41
+ return hit;
42
+ }
43
+ return undefined;
44
+ }
45
+ function findRemovedPropertyTrackPathInObject(obj, path) {
46
+ if (isRemovedTracksAnimation(obj['animation'])) {
47
+ return `${path ? `${path}.` : ''}animation.tracks`;
48
+ }
49
+ for (const [key, value] of Object.entries(obj)) {
50
+ const hit = findRemovedPropertyTrackPath(value, path ? `${path}.${key}` : key);
51
+ if (hit)
52
+ return hit;
53
+ }
54
+ return undefined;
55
+ }
56
+ function findRemovedPropertyTrackPath(node, path) {
57
+ if (Array.isArray(node))
58
+ return findRemovedPropertyTrackPathInArray(node, path);
59
+ if (node && typeof node === 'object') {
60
+ return findRemovedPropertyTrackPathInObject(node, path);
61
+ }
62
+ return undefined;
63
+ }
64
+ function assertNoRemovedPropertyTracks(json, filePath) {
65
+ const hit = findRemovedPropertyTrackPath(json, '');
66
+ if (!hit)
67
+ return;
68
+ const issue = {
69
+ code: 'custom',
70
+ message: 'property tracks were removed; author continuous animation with Theatre (@theatre/core) ' +
71
+ 'instead — see docs/AI-NATIVE-AUTHORING-IMPLEMENTATION-SPEC.md §3.2/§10 D8.',
72
+ path: hit.split('.'),
73
+ };
74
+ throw new SceneParseError([issue], filePath);
75
+ }
76
+ // ---------------------------------------------------------------------------
77
+ // E5 — removed-format migration guard: the AnimGraph state-machine runtime,
78
+ // `.animgraph.json` format, and `SceneAnimationSchema.animGraph` field were
79
+ // deleted (spec §3.3/§11 E5; XState + native Three `AnimationMixer` — see
80
+ // `xstate-animation-binding.ts` — replace it). `SceneAnimationSchema` no
81
+ // longer declares an `animGraph` field at all (so it carries zero trace in
82
+ // the generated JSON schema), which means Zod's default object mode would
83
+ // otherwise silently STRIP an authored `animation.animGraph` rather than
84
+ // reporting it — violating Global AC §6. Mirrors
85
+ // `assertNoRemovedPropertyTracks` above exactly: walks the RAW pre-Zod JSON
86
+ // and throws a `SceneParseError` before Zod ever parses the data.
87
+ // ---------------------------------------------------------------------------
88
+ /** True when `value` is a plain object (not an array) carrying an `animGraph` property — the
89
+ * shape `SceneAnimationSchema` used to declare before E5 deleted it. */
90
+ function isRemovedAnimGraphAnimation(value) {
91
+ return !!value && typeof value === 'object' && !Array.isArray(value) && 'animGraph' in value;
92
+ }
93
+ function findRemovedAnimGraphPathInArray(node, path) {
94
+ for (let i = 0; i < node.length; i++) {
95
+ const hit = findRemovedAnimGraphPath(node[i], `${path}[${i}]`);
96
+ if (hit)
97
+ return hit;
98
+ }
99
+ return undefined;
100
+ }
101
+ function findRemovedAnimGraphPathInObject(obj, path) {
102
+ if (isRemovedAnimGraphAnimation(obj['animation'])) {
103
+ return `${path ? `${path}.` : ''}animation.animGraph`;
104
+ }
105
+ for (const [key, value] of Object.entries(obj)) {
106
+ const hit = findRemovedAnimGraphPath(value, path ? `${path}.${key}` : key);
107
+ if (hit)
108
+ return hit;
109
+ }
110
+ return undefined;
111
+ }
112
+ function findRemovedAnimGraphPath(node, path) {
113
+ if (Array.isArray(node))
114
+ return findRemovedAnimGraphPathInArray(node, path);
115
+ if (node && typeof node === 'object') {
116
+ return findRemovedAnimGraphPathInObject(node, path);
117
+ }
118
+ return undefined;
119
+ }
120
+ function assertNoRemovedAnimGraph(json, filePath) {
121
+ const hit = findRemovedAnimGraphPath(json, '');
122
+ if (!hit)
123
+ return;
124
+ const issue = {
125
+ code: 'custom',
126
+ message: 'AnimGraph was removed; drive character animation with an XState animation machine instead ' +
127
+ '— see docs/AI-NATIVE-AUTHORING-IMPLEMENTATION-SPEC.md §3.3/§5.6/§11 E5 and ' +
128
+ 'packages/engine/src/animation/xstate-animation-binding.ts.',
129
+ path: hit.split('.'),
130
+ };
131
+ throw new SceneParseError([issue], filePath);
132
+ }
133
+ export function parseSceneFile(json, filePath) {
134
+ assertNoRemovedPropertyTracks(json, filePath);
135
+ assertNoRemovedAnimGraph(json, filePath);
136
+ const result = SceneFileSchema.safeParse(json);
137
+ if (!result.success) {
138
+ throw new SceneParseError(result.error.issues, filePath);
139
+ }
140
+ // Post-Zod-parse range check (T2.3/D3 §1.E) — the Zod shape stays a bare
141
+ // `z.number()`; this is where the file-format `version` axis is actually
142
+ // read/enforced.
143
+ checkSceneVersionInRange(result.data.version, 'scene');
144
+ return result.data;
145
+ }
146
+ export function parsePrefabFile(json, filePath) {
147
+ assertNoRemovedPropertyTracks(json, filePath);
148
+ assertNoRemovedAnimGraph(json, filePath);
149
+ const result = PrefabFileSchema.safeParse(json);
150
+ if (!result.success) {
151
+ throw new SceneParseError(result.error.issues, filePath);
152
+ }
153
+ checkSceneVersionInRange(result.data.version, 'prefab');
154
+ return result.data;
155
+ }
156
+ /**
157
+ * Parse a `.mat.json` shared material asset (T4.6). Unlike scene/prefab files,
158
+ * there is no version-range gate yet for this format — `MaterialFileSchema`'s
159
+ * `version` field is RESERVED (see `schema-consumption-map.ts`).
160
+ */
161
+ export function parseMaterialFile(json, filePath) {
162
+ const result = MaterialFileSchema.safeParse(json);
163
+ if (!result.success) {
164
+ throw new SceneParseError(result.error.issues, filePath);
165
+ }
166
+ return result.data;
167
+ }
168
+ /**
169
+ * Parse a `.instances.json` instance-transform asset (F3,
170
+ * docs/VSCN-STRUCTURAL-GAPS-DESIGN.md). Mirrors `parseMaterialFile` exactly —
171
+ * no version-range gate (the format is a bare tuple array, no `version` field).
172
+ */
173
+ export function parseInstancesFile(json, filePath) {
174
+ const result = InstancesFileSchema.safeParse(json);
175
+ if (!result.success) {
176
+ throw new SceneParseError(result.error.issues, filePath);
177
+ }
178
+ return result.data;
179
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Converts SceneParticles JSON → three.quarks ParticleSystem.
3
+ *
4
+ * Shared between the editor entity-factory and the runtime scene-loader.
5
+ * The schema mirrors quarks' native JSON format, so most fields pass through
6
+ * directly to quarks' fromJSON or constructor methods.
7
+ */
8
+ import * as THREE from 'three';
9
+ import { type BatchedRenderer, ParticleSystem } from 'three.quarks';
10
+ import type { SceneParticles } from './scene-types';
11
+ export interface ParticleSystemResult {
12
+ /** The emitter Object3D (add to scene for transform) */
13
+ emitter: THREE.Object3D;
14
+ /** The ParticleSystem instance (register with BatchedRenderer) */
15
+ system: ParticleSystem;
16
+ }
17
+ /**
18
+ * Create a three.quarks ParticleSystem from SceneParticles JSON data.
19
+ */
20
+ export declare function createParticleSystemFromData(data: SceneParticles): ParticleSystemResult;
21
+ /**
22
+ * Register a particle system with a BatchedRenderer.
23
+ */
24
+ export declare function registerParticleSystem(batchedRenderer: BatchedRenderer, system: ParticleSystem): void;
25
+ /**
26
+ * Unregister a particle system from a BatchedRenderer.
27
+ */
28
+ export declare function unregisterParticleSystem(batchedRenderer: BatchedRenderer, system: ParticleSystem): void;
29
+ /**
30
+ * Default particle data for creating a new particle emitter via AddSectionMenu.
31
+ */
32
+ export declare function defaultParticlesData(): SceneParticles;
33
+ //# sourceMappingURL=particles-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particles-factory.d.ts","sourceRoot":"","sources":["../../src/scene/particles-factory.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AA6BH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,eAAe,EAAE,cAAc,EAAc,MAAM,cAAc,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AA+NpD,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC;IACxB,kEAAkE;IAClE,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;GAEG;AAEH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,cAAc,GAAG,oBAAoB,CAwDvF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,cAAc,GACrB,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,cAAc,GACrB,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CA6BrD"}