@vgai/engine 0.5.0-canary.20260719.0 → 0.5.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 (527) hide show
  1. package/dist/adapter/adapter-surface.d.ts +30 -0
  2. package/dist/adapter/adapter-surface.d.ts.map +1 -0
  3. package/dist/adapter/adapter-surface.js +18 -0
  4. package/dist/adapter/authoring.d.ts +461 -0
  5. package/dist/adapter/authoring.d.ts.map +1 -0
  6. package/dist/adapter/authoring.js +22 -0
  7. package/dist/adapter/colyseus-networking-adapter.d.ts +43 -0
  8. package/dist/adapter/colyseus-networking-adapter.d.ts.map +1 -0
  9. package/dist/adapter/colyseus-networking-adapter.js +38 -0
  10. package/dist/adapter/first-party-systems.d.ts +38 -0
  11. package/dist/adapter/first-party-systems.d.ts.map +1 -0
  12. package/dist/adapter/first-party-systems.js +77 -0
  13. package/dist/adapter/game-adapter.d.ts +133 -0
  14. package/dist/adapter/game-adapter.d.ts.map +1 -0
  15. package/dist/adapter/game-adapter.js +10 -0
  16. package/dist/adapter/host-context.d.ts +71 -0
  17. package/dist/adapter/host-context.d.ts.map +1 -0
  18. package/dist/adapter/host-context.js +16 -0
  19. package/dist/adapter/index.d.ts +22 -0
  20. package/dist/adapter/index.d.ts.map +1 -0
  21. package/dist/adapter/index.js +15 -0
  22. package/dist/adapter/ingest/game-contract.d.ts +53 -0
  23. package/dist/adapter/ingest/game-contract.d.ts.map +1 -0
  24. package/dist/adapter/ingest/game-contract.js +30 -0
  25. package/dist/adapter/ingest/overlay-applier.d.ts +118 -0
  26. package/dist/adapter/ingest/overlay-applier.d.ts.map +1 -0
  27. package/dist/adapter/ingest/overlay-applier.js +132 -0
  28. package/dist/adapter/ingest/overlay-apply.d.ts +60 -0
  29. package/dist/adapter/ingest/overlay-apply.d.ts.map +1 -0
  30. package/dist/adapter/ingest/overlay-apply.js +101 -0
  31. package/dist/adapter/ingest/overlay-file.d.ts +79 -0
  32. package/dist/adapter/ingest/overlay-file.d.ts.map +1 -0
  33. package/dist/adapter/ingest/overlay-file.js +66 -0
  34. package/dist/adapter/ingest/overlay-report.d.ts +113 -0
  35. package/dist/adapter/ingest/overlay-report.d.ts.map +1 -0
  36. package/dist/adapter/ingest/overlay-report.js +103 -0
  37. package/dist/adapter/ingest/scene-capture.d.ts +97 -0
  38. package/dist/adapter/ingest/scene-capture.d.ts.map +1 -0
  39. package/dist/adapter/ingest/scene-capture.js +248 -0
  40. package/dist/adapter/ingest/upstream-pin.d.ts +47 -0
  41. package/dist/adapter/ingest/upstream-pin.d.ts.map +1 -0
  42. package/dist/adapter/ingest/upstream-pin.js +50 -0
  43. package/dist/adapter/loop-gate-report.d.ts +34 -0
  44. package/dist/adapter/loop-gate-report.d.ts.map +1 -0
  45. package/dist/adapter/loop-gate-report.js +37 -0
  46. package/dist/adapter/rapier-physics-adapter.d.ts +12 -0
  47. package/dist/adapter/rapier-physics-adapter.d.ts.map +1 -0
  48. package/dist/adapter/rapier-physics-adapter.js +46 -0
  49. package/dist/adapter/system-adapter.d.ts +206 -0
  50. package/dist/adapter/system-adapter.d.ts.map +1 -0
  51. package/dist/adapter/system-adapter.js +13 -0
  52. package/dist/adapter/transform.d.ts +18 -0
  53. package/dist/adapter/transform.d.ts.map +1 -0
  54. package/dist/adapter/transform.js +1 -0
  55. package/dist/adapter/vgai-scene-game-adapter.d.ts +108 -0
  56. package/dist/adapter/vgai-scene-game-adapter.d.ts.map +1 -0
  57. package/dist/adapter/vgai-scene-game-adapter.js +762 -0
  58. package/dist/ai/navigation.d.ts +64 -0
  59. package/dist/ai/navigation.d.ts.map +1 -0
  60. package/dist/ai/navigation.js +133 -0
  61. package/dist/animation/anim-graph-types.d.ts +25 -0
  62. package/dist/animation/anim-graph-types.d.ts.map +1 -0
  63. package/dist/animation/anim-graph-types.js +1 -0
  64. package/dist/animation/animation-clock.d.ts +213 -0
  65. package/dist/animation/animation-clock.d.ts.map +1 -0
  66. package/dist/animation/animation-clock.js +301 -0
  67. package/dist/animation/blend-node.d.ts +22 -0
  68. package/dist/animation/blend-node.d.ts.map +1 -0
  69. package/dist/animation/blend-node.js +97 -0
  70. package/dist/animation/camera-ownership.d.ts +250 -0
  71. package/dist/animation/camera-ownership.d.ts.map +1 -0
  72. package/dist/animation/camera-ownership.js +169 -0
  73. package/dist/animation/cinematic-cues.d.ts +200 -0
  74. package/dist/animation/cinematic-cues.d.ts.map +1 -0
  75. package/dist/animation/cinematic-cues.js +213 -0
  76. package/dist/animation/clip-map.d.ts +12 -0
  77. package/dist/animation/clip-map.d.ts.map +1 -0
  78. package/dist/animation/clip-map.js +37 -0
  79. package/dist/animation/gsap-registration.d.ts +119 -0
  80. package/dist/animation/gsap-registration.d.ts.map +1 -0
  81. package/dist/animation/gsap-registration.js +92 -0
  82. package/dist/animation/theatre-clock-binding.d.ts +89 -0
  83. package/dist/animation/theatre-clock-binding.d.ts.map +1 -0
  84. package/dist/animation/theatre-clock-binding.js +29 -0
  85. package/dist/animation/theatre-director.d.ts +242 -0
  86. package/dist/animation/theatre-director.d.ts.map +1 -0
  87. package/dist/animation/theatre-director.js +235 -0
  88. package/dist/animation/theatre-object-binding.d.ts +305 -0
  89. package/dist/animation/theatre-object-binding.d.ts.map +1 -0
  90. package/dist/animation/theatre-object-binding.js +351 -0
  91. package/dist/animation/xstate-animation-binding.d.ts +56 -0
  92. package/dist/animation/xstate-animation-binding.d.ts.map +1 -0
  93. package/dist/animation/xstate-animation-binding.js +331 -0
  94. package/dist/animation/xstate-animation-meta.d.ts +266 -0
  95. package/dist/animation/xstate-animation-meta.d.ts.map +1 -0
  96. package/dist/animation/xstate-animation-meta.js +252 -0
  97. package/dist/assets.d.ts +26 -0
  98. package/dist/assets.d.ts.map +1 -0
  99. package/dist/assets.js +55 -0
  100. package/dist/audio/index.d.ts +4 -0
  101. package/dist/audio/index.d.ts.map +1 -0
  102. package/dist/audio/index.js +24 -0
  103. package/dist/audio/tone-clock-binding.d.ts +75 -0
  104. package/dist/audio/tone-clock-binding.d.ts.map +1 -0
  105. package/dist/audio/tone-clock-binding.js +29 -0
  106. package/dist/audio/tone-context.d.ts +114 -0
  107. package/dist/audio/tone-context.d.ts.map +1 -0
  108. package/dist/audio/tone-context.js +39 -0
  109. package/dist/audio/tone-offline-render.d.ts +90 -0
  110. package/dist/audio/tone-offline-render.d.ts.map +1 -0
  111. package/dist/audio/tone-offline-render.js +56 -0
  112. package/dist/audio/wav-encode.d.ts +38 -0
  113. package/dist/audio/wav-encode.d.ts.map +1 -0
  114. package/dist/audio/wav-encode.js +97 -0
  115. package/dist/character/cloth-sim.d.ts +179 -0
  116. package/dist/character/cloth-sim.d.ts.map +1 -0
  117. package/dist/character/cloth-sim.js +334 -0
  118. package/dist/character/spring-chain.d.ts +135 -0
  119. package/dist/character/spring-chain.d.ts.map +1 -0
  120. package/dist/character/spring-chain.js +165 -0
  121. package/dist/core/game-loop.d.ts +42 -0
  122. package/dist/core/game-loop.d.ts.map +1 -0
  123. package/dist/core/game-loop.js +167 -0
  124. package/dist/core/seeded-random.d.ts +69 -0
  125. package/dist/core/seeded-random.d.ts.map +1 -0
  126. package/dist/core/seeded-random.js +121 -0
  127. package/dist/core/system-runner.d.ts +120 -0
  128. package/dist/core/system-runner.d.ts.map +1 -0
  129. package/dist/core/system-runner.js +297 -0
  130. package/dist/core/types.d.ts +92 -0
  131. package/dist/core/types.d.ts.map +1 -0
  132. package/dist/core/types.js +25 -0
  133. package/dist/data/data-asset.d.ts +101 -0
  134. package/dist/data/data-asset.d.ts.map +1 -0
  135. package/dist/data/data-asset.js +122 -0
  136. package/dist/data/data-check-core.d.ts +110 -0
  137. package/dist/data/data-check-core.d.ts.map +1 -0
  138. package/dist/data/data-check-core.js +178 -0
  139. package/dist/data/data-ref.d.ts +79 -0
  140. package/dist/data/data-ref.d.ts.map +1 -0
  141. package/dist/data/data-ref.js +130 -0
  142. package/dist/data/vite-plugin-data.d.ts +79 -0
  143. package/dist/data/vite-plugin-data.d.ts.map +1 -0
  144. package/dist/data/vite-plugin-data.js +217 -0
  145. package/dist/dev/console-bridge.d.ts +22 -0
  146. package/dist/dev/console-bridge.d.ts.map +1 -0
  147. package/dist/dev/console-bridge.js +71 -0
  148. package/dist/dev/debug-draw.d.ts +24 -0
  149. package/dist/dev/debug-draw.d.ts.map +1 -0
  150. package/dist/dev/debug-draw.js +73 -0
  151. package/dist/dev/logger.d.ts +30 -0
  152. package/dist/dev/logger.d.ts.map +1 -0
  153. package/dist/dev/logger.js +90 -0
  154. package/dist/dev/performance-profiler.d.ts +60 -0
  155. package/dist/dev/performance-profiler.d.ts.map +1 -0
  156. package/dist/dev/performance-profiler.js +181 -0
  157. package/dist/dev/webgl-gpu-timer.d.ts +8 -0
  158. package/dist/dev/webgl-gpu-timer.d.ts.map +1 -0
  159. package/dist/dev/webgl-gpu-timer.js +52 -0
  160. package/dist/ecs/component-manager.d.ts +205 -0
  161. package/dist/ecs/component-manager.d.ts.map +1 -0
  162. package/dist/ecs/component-manager.js +706 -0
  163. package/dist/ecs/game-component.d.ts +146 -0
  164. package/dist/ecs/game-component.d.ts.map +1 -0
  165. package/dist/ecs/game-component.js +141 -0
  166. package/dist/ecs/hmr-swap-report.d.ts +53 -0
  167. package/dist/ecs/hmr-swap-report.d.ts.map +1 -0
  168. package/dist/ecs/hmr-swap-report.js +55 -0
  169. package/dist/humanoid/bake.operation.d.ts +119 -0
  170. package/dist/humanoid/bake.operation.d.ts.map +1 -0
  171. package/dist/humanoid/bake.operation.js +228 -0
  172. package/dist/humanoid/body.d.ts +101 -0
  173. package/dist/humanoid/body.d.ts.map +1 -0
  174. package/dist/humanoid/body.js +530 -0
  175. package/dist/humanoid/clips.d.ts +62 -0
  176. package/dist/humanoid/clips.d.ts.map +1 -0
  177. package/dist/humanoid/clips.js +121 -0
  178. package/dist/humanoid/compose.d.ts +75 -0
  179. package/dist/humanoid/compose.d.ts.map +1 -0
  180. package/dist/humanoid/compose.js +176 -0
  181. package/dist/humanoid/generate.d.ts +92 -0
  182. package/dist/humanoid/generate.d.ts.map +1 -0
  183. package/dist/humanoid/generate.js +124 -0
  184. package/dist/humanoid/index.d.ts +24 -0
  185. package/dist/humanoid/index.d.ts.map +1 -0
  186. package/dist/humanoid/index.js +18 -0
  187. package/dist/humanoid/schema.d.ts +35 -0
  188. package/dist/humanoid/schema.d.ts.map +1 -0
  189. package/dist/humanoid/schema.js +87 -0
  190. package/dist/humanoid/skeleton.d.ts +103 -0
  191. package/dist/humanoid/skeleton.d.ts.map +1 -0
  192. package/dist/humanoid/skeleton.js +289 -0
  193. package/dist/index.d.ts +37 -0
  194. package/dist/index.d.ts.map +1 -0
  195. package/dist/index.js +30 -0
  196. package/dist/input/input-manager.d.ts +945 -0
  197. package/dist/input/input-manager.d.ts.map +1 -0
  198. package/dist/input/input-manager.js +2207 -0
  199. package/dist/input/input-types.d.ts +174 -0
  200. package/dist/input/input-types.d.ts.map +1 -0
  201. package/dist/input/input-types.js +1 -0
  202. package/dist/input/prompt-labels.d.ts +21 -0
  203. package/dist/input/prompt-labels.d.ts.map +1 -0
  204. package/dist/input/prompt-labels.js +121 -0
  205. package/dist/input/rebind-controller.d.ts +59 -0
  206. package/dist/input/rebind-controller.d.ts.map +1 -0
  207. package/dist/input/rebind-controller.js +85 -0
  208. package/dist/input/schema.d.ts +16 -0
  209. package/dist/input/schema.d.ts.map +1 -0
  210. package/dist/input/schema.js +228 -0
  211. package/dist/loader.d.ts +43 -0
  212. package/dist/loader.d.ts.map +1 -0
  213. package/dist/loader.js +59 -0
  214. package/dist/manifest/index.d.ts +5 -0
  215. package/dist/manifest/index.d.ts.map +1 -0
  216. package/dist/manifest/index.js +8 -0
  217. package/dist/manifest/load-file.d.ts +4 -0
  218. package/dist/manifest/load-file.d.ts.map +1 -0
  219. package/dist/manifest/load-file.js +14 -0
  220. package/dist/manifest/load.d.ts +144 -0
  221. package/dist/manifest/load.d.ts.map +1 -0
  222. package/dist/manifest/load.js +273 -0
  223. package/dist/manifest/schema.d.ts +230 -0
  224. package/dist/manifest/schema.d.ts.map +1 -0
  225. package/dist/manifest/schema.js +394 -0
  226. package/dist/physics/collision-system.d.ts +41 -0
  227. package/dist/physics/collision-system.d.ts.map +1 -0
  228. package/dist/physics/collision-system.js +64 -0
  229. package/dist/physics/physics-registry.d.ts +45 -0
  230. package/dist/physics/physics-registry.d.ts.map +1 -0
  231. package/dist/physics/physics-registry.js +65 -0
  232. package/dist/physics/transform-writer.d.ts +16 -0
  233. package/dist/physics/transform-writer.d.ts.map +1 -0
  234. package/dist/physics/transform-writer.js +38 -0
  235. package/dist/physics/trigger-dispatch.d.ts +24 -0
  236. package/dist/physics/trigger-dispatch.d.ts.map +1 -0
  237. package/dist/physics/trigger-dispatch.js +80 -0
  238. package/dist/react/game-state.d.ts +156 -0
  239. package/dist/react/game-state.d.ts.map +1 -0
  240. package/dist/react/game-state.js +222 -0
  241. package/dist/react/root-adapter.d.ts +11 -0
  242. package/dist/react/root-adapter.d.ts.map +1 -0
  243. package/dist/react/root-adapter.js +41 -0
  244. package/dist/react/unmanaged-root-detector.d.ts +12 -0
  245. package/dist/react/unmanaged-root-detector.d.ts.map +1 -0
  246. package/dist/react/unmanaged-root-detector.js +45 -0
  247. package/dist/react/use-data.d.ts +60 -0
  248. package/dist/react/use-data.d.ts.map +1 -0
  249. package/dist/react/use-data.js +101 -0
  250. package/dist/react/use-selection.d.ts +75 -0
  251. package/dist/react/use-selection.d.ts.map +1 -0
  252. package/dist/react/use-selection.js +90 -0
  253. package/dist/render/auto-batcher.d.ts +34 -0
  254. package/dist/render/auto-batcher.d.ts.map +1 -0
  255. package/dist/render/auto-batcher.js +140 -0
  256. package/dist/render/render-batch-system.d.ts +33 -0
  257. package/dist/render/render-batch-system.d.ts.map +1 -0
  258. package/dist/render/render-batch-system.js +230 -0
  259. package/dist/render/render-features.d.ts +47 -0
  260. package/dist/render/render-features.d.ts.map +1 -0
  261. package/dist/render/render-features.js +105 -0
  262. package/dist/render/render-settings.d.ts +36 -0
  263. package/dist/render/render-settings.d.ts.map +1 -0
  264. package/dist/render/render-settings.js +51 -0
  265. package/dist/runtime/create-runtime.d.ts +249 -0
  266. package/dist/runtime/create-runtime.d.ts.map +1 -0
  267. package/dist/runtime/create-runtime.js +641 -0
  268. package/dist/runtime/debug-bridge.d.ts +257 -0
  269. package/dist/runtime/debug-bridge.d.ts.map +1 -0
  270. package/dist/runtime/debug-bridge.js +224 -0
  271. package/dist/runtime/debug-registry.d.ts +288 -0
  272. package/dist/runtime/debug-registry.d.ts.map +1 -0
  273. package/dist/runtime/debug-registry.js +513 -0
  274. package/dist/runtime/frame-selector-cache.d.ts +41 -0
  275. package/dist/runtime/frame-selector-cache.d.ts.map +1 -0
  276. package/dist/runtime/frame-selector-cache.js +65 -0
  277. package/dist/runtime/game.d.ts +496 -0
  278. package/dist/runtime/game.d.ts.map +1 -0
  279. package/dist/runtime/game.js +741 -0
  280. package/dist/runtime/gameplay-rng-trap.d.ts +48 -0
  281. package/dist/runtime/gameplay-rng-trap.d.ts.map +1 -0
  282. package/dist/runtime/gameplay-rng-trap.js +96 -0
  283. package/dist/runtime/input-router.d.ts +78 -0
  284. package/dist/runtime/input-router.d.ts.map +1 -0
  285. package/dist/runtime/input-router.js +171 -0
  286. package/dist/runtime/mount-game.d.ts +129 -0
  287. package/dist/runtime/mount-game.d.ts.map +1 -0
  288. package/dist/runtime/mount-game.js +152 -0
  289. package/dist/runtime/mount-manifest.d.ts +173 -0
  290. package/dist/runtime/mount-manifest.d.ts.map +1 -0
  291. package/dist/runtime/mount-manifest.js +297 -0
  292. package/dist/runtime/render-audio-control.d.ts +110 -0
  293. package/dist/runtime/render-audio-control.d.ts.map +1 -0
  294. package/dist/runtime/render-audio-control.js +111 -0
  295. package/dist/runtime/render-control.d.ts +291 -0
  296. package/dist/runtime/render-control.d.ts.map +1 -0
  297. package/dist/runtime/render-control.js +264 -0
  298. package/dist/runtime/render-seed.d.ts +57 -0
  299. package/dist/runtime/render-seed.d.ts.map +1 -0
  300. package/dist/runtime/render-seed.js +74 -0
  301. package/dist/runtime/state-bridge.d.ts +61 -0
  302. package/dist/runtime/state-bridge.d.ts.map +1 -0
  303. package/dist/runtime/state-bridge.js +63 -0
  304. package/dist/runtime/types.d.ts +253 -0
  305. package/dist/runtime/types.d.ts.map +1 -0
  306. package/dist/runtime/types.js +1 -0
  307. package/dist/scene/asset-loaders.d.ts +79 -0
  308. package/dist/scene/asset-loaders.d.ts.map +1 -0
  309. package/dist/scene/asset-loaders.js +141 -0
  310. package/dist/scene/asset-paths.d.ts +11 -0
  311. package/dist/scene/asset-paths.d.ts.map +1 -0
  312. package/dist/scene/asset-paths.js +108 -0
  313. package/dist/scene/asset-ref-check.d.ts +88 -0
  314. package/dist/scene/asset-ref-check.d.ts.map +1 -0
  315. package/dist/scene/asset-ref-check.js +214 -0
  316. package/dist/scene/asset-registry.d.ts +38 -0
  317. package/dist/scene/asset-registry.d.ts.map +1 -0
  318. package/dist/scene/asset-registry.js +66 -0
  319. package/dist/scene/collider-dimensions.d.ts +63 -0
  320. package/dist/scene/collider-dimensions.d.ts.map +1 -0
  321. package/dist/scene/collider-dimensions.js +98 -0
  322. package/dist/scene/component-registry.d.ts +22 -0
  323. package/dist/scene/component-registry.d.ts.map +1 -0
  324. package/dist/scene/component-registry.js +37 -0
  325. package/dist/scene/defaults.d.ts +252 -0
  326. package/dist/scene/defaults.d.ts.map +1 -0
  327. package/dist/scene/defaults.js +151 -0
  328. package/dist/scene/geometries/index.d.ts +8 -0
  329. package/dist/scene/geometries/index.d.ts.map +1 -0
  330. package/dist/scene/geometries/index.js +7 -0
  331. package/dist/scene/geometries/terrain.d.ts +2 -0
  332. package/dist/scene/geometries/terrain.d.ts.map +1 -0
  333. package/dist/scene/geometries/terrain.js +37 -0
  334. package/dist/scene/geometry-registry.d.ts +24 -0
  335. package/dist/scene/geometry-registry.d.ts.map +1 -0
  336. package/dist/scene/geometry-registry.js +20 -0
  337. package/dist/scene/instance-registry.d.ts +36 -0
  338. package/dist/scene/instance-registry.d.ts.map +1 -0
  339. package/dist/scene/instance-registry.js +55 -0
  340. package/dist/scene/instancers/grid.d.ts +2 -0
  341. package/dist/scene/instancers/grid.d.ts.map +1 -0
  342. package/dist/scene/instancers/grid.js +36 -0
  343. package/dist/scene/instancers/index.d.ts +8 -0
  344. package/dist/scene/instancers/index.d.ts.map +1 -0
  345. package/dist/scene/instancers/index.js +7 -0
  346. package/dist/scene/light-camera-factory.d.ts +23 -0
  347. package/dist/scene/light-camera-factory.d.ts.map +1 -0
  348. package/dist/scene/light-camera-factory.js +68 -0
  349. package/dist/scene/material-factory.d.ts +17 -0
  350. package/dist/scene/material-factory.d.ts.map +1 -0
  351. package/dist/scene/material-factory.js +197 -0
  352. package/dist/scene/material-registry.d.ts +40 -0
  353. package/dist/scene/material-registry.d.ts.map +1 -0
  354. package/dist/scene/material-registry.js +44 -0
  355. package/dist/scene/materials/index.d.ts +8 -0
  356. package/dist/scene/materials/index.d.ts.map +1 -0
  357. package/dist/scene/materials/index.js +7 -0
  358. package/dist/scene/materials/water.d.ts +2 -0
  359. package/dist/scene/materials/water.d.ts.map +1 -0
  360. package/dist/scene/materials/water.js +54 -0
  361. package/dist/scene/parse.d.ts +23 -0
  362. package/dist/scene/parse.d.ts.map +1 -0
  363. package/dist/scene/parse.js +179 -0
  364. package/dist/scene/particles-factory.d.ts +33 -0
  365. package/dist/scene/particles-factory.d.ts.map +1 -0
  366. package/dist/scene/particles-factory.js +282 -0
  367. package/dist/scene/scene-apply.d.ts +109 -0
  368. package/dist/scene/scene-apply.d.ts.map +1 -0
  369. package/dist/scene/scene-apply.js +370 -0
  370. package/dist/scene/scene-diff-schema.d.ts +285 -0
  371. package/dist/scene/scene-diff-schema.d.ts.map +1 -0
  372. package/dist/scene/scene-diff-schema.js +92 -0
  373. package/dist/scene/scene-diff-types.d.ts +40 -0
  374. package/dist/scene/scene-diff-types.d.ts.map +1 -0
  375. package/dist/scene/scene-diff-types.js +14 -0
  376. package/dist/scene/scene-loader.d.ts +167 -0
  377. package/dist/scene/scene-loader.d.ts.map +1 -0
  378. package/dist/scene/scene-loader.js +1211 -0
  379. package/dist/scene/scene-query.d.ts +11 -0
  380. package/dist/scene/scene-query.d.ts.map +1 -0
  381. package/dist/scene/scene-query.js +63 -0
  382. package/dist/scene/scene-types.d.ts +10 -0
  383. package/dist/scene/scene-types.d.ts.map +1 -0
  384. package/dist/scene/scene-types.js +8 -0
  385. package/dist/scene/scene-version.d.ts +26 -0
  386. package/dist/scene/scene-version.d.ts.map +1 -0
  387. package/dist/scene/scene-version.js +34 -0
  388. package/dist/scene/schema/animation.d.ts +8 -0
  389. package/dist/scene/schema/animation.d.ts.map +1 -0
  390. package/dist/scene/schema/animation.js +42 -0
  391. package/dist/scene/schema/audio.d.ts +13 -0
  392. package/dist/scene/schema/audio.d.ts.map +1 -0
  393. package/dist/scene/schema/audio.js +22 -0
  394. package/dist/scene/schema/camera.d.ts +28 -0
  395. package/dist/scene/schema/camera.d.ts.map +1 -0
  396. package/dist/scene/schema/camera.js +17 -0
  397. package/dist/scene/schema/collider.d.ts +40 -0
  398. package/dist/scene/schema/collider.d.ts.map +1 -0
  399. package/dist/scene/schema/collider.js +55 -0
  400. package/dist/scene/schema/entity-ref.d.ts +31 -0
  401. package/dist/scene/schema/entity-ref.d.ts.map +1 -0
  402. package/dist/scene/schema/entity-ref.js +61 -0
  403. package/dist/scene/schema/entity.d.ts +1036 -0
  404. package/dist/scene/schema/entity.d.ts.map +1 -0
  405. package/dist/scene/schema/entity.js +153 -0
  406. package/dist/scene/schema/environment.d.ts +425 -0
  407. package/dist/scene/schema/environment.d.ts.map +1 -0
  408. package/dist/scene/schema/environment.js +357 -0
  409. package/dist/scene/schema/index.d.ts +37 -0
  410. package/dist/scene/schema/index.d.ts.map +1 -0
  411. package/dist/scene/schema/index.js +19 -0
  412. package/dist/scene/schema/instances.d.ts +14 -0
  413. package/dist/scene/schema/instances.d.ts.map +1 -0
  414. package/dist/scene/schema/instances.js +28 -0
  415. package/dist/scene/schema/joint.d.ts +23 -0
  416. package/dist/scene/schema/joint.d.ts.map +1 -0
  417. package/dist/scene/schema/joint.js +23 -0
  418. package/dist/scene/schema/light.d.ts +38 -0
  419. package/dist/scene/schema/light.d.ts.map +1 -0
  420. package/dist/scene/schema/light.js +26 -0
  421. package/dist/scene/schema/material.d.ts +199 -0
  422. package/dist/scene/schema/material.d.ts.map +1 -0
  423. package/dist/scene/schema/material.js +103 -0
  424. package/dist/scene/schema/mesh.d.ts +48 -0
  425. package/dist/scene/schema/mesh.d.ts.map +1 -0
  426. package/dist/scene/schema/mesh.js +82 -0
  427. package/dist/scene/schema/particles.d.ts +2178 -0
  428. package/dist/scene/schema/particles.d.ts.map +1 -0
  429. package/dist/scene/schema/particles.js +321 -0
  430. package/dist/scene/schema/physics.d.ts +56 -0
  431. package/dist/scene/schema/physics.d.ts.map +1 -0
  432. package/dist/scene/schema/physics.js +37 -0
  433. package/dist/scene/schema/scene-file.d.ts +303 -0
  434. package/dist/scene/schema/scene-file.d.ts.map +1 -0
  435. package/dist/scene/schema/scene-file.js +256 -0
  436. package/dist/scene/schema/shadow.d.ts +28 -0
  437. package/dist/scene/schema/shadow.d.ts.map +1 -0
  438. package/dist/scene/schema/shadow.js +20 -0
  439. package/dist/scene/schema/spline.d.ts +25 -0
  440. package/dist/scene/schema/spline.d.ts.map +1 -0
  441. package/dist/scene/schema/spline.js +15 -0
  442. package/dist/scene/schema/tuples.d.ts +12 -0
  443. package/dist/scene/schema/tuples.d.ts.map +1 -0
  444. package/dist/scene/schema/tuples.js +14 -0
  445. package/dist/scene/user-data.d.ts +185 -0
  446. package/dist/scene/user-data.d.ts.map +1 -0
  447. package/dist/scene/user-data.js +144 -0
  448. package/dist/setup/setup-audio.d.ts +20 -0
  449. package/dist/setup/setup-audio.d.ts.map +1 -0
  450. package/dist/setup/setup-audio.js +41 -0
  451. package/dist/setup/setup-particles.d.ts +17 -0
  452. package/dist/setup/setup-particles.d.ts.map +1 -0
  453. package/dist/setup/setup-particles.js +16 -0
  454. package/dist/setup/setup-physics.d.ts +25 -0
  455. package/dist/setup/setup-physics.d.ts.map +1 -0
  456. package/dist/setup/setup-physics.js +51 -0
  457. package/dist/setup/setup-renderer.d.ts +69 -0
  458. package/dist/setup/setup-renderer.d.ts.map +1 -0
  459. package/dist/setup/setup-renderer.js +363 -0
  460. package/dist/tools/define-tool.d.ts +130 -0
  461. package/dist/tools/define-tool.d.ts.map +1 -0
  462. package/dist/tools/define-tool.js +96 -0
  463. package/dist/world2d/authoring-2d.d.ts +80 -0
  464. package/dist/world2d/authoring-2d.d.ts.map +1 -0
  465. package/dist/world2d/authoring-2d.js +195 -0
  466. package/dist/world2d/capture-to-scene2d.d.ts +5 -0
  467. package/dist/world2d/capture-to-scene2d.d.ts.map +1 -0
  468. package/dist/world2d/capture-to-scene2d.js +49 -0
  469. package/dist/world2d/collision-2d.d.ts +52 -0
  470. package/dist/world2d/collision-2d.d.ts.map +1 -0
  471. package/dist/world2d/collision-2d.js +70 -0
  472. package/dist/world2d/components-2d.d.ts +47 -0
  473. package/dist/world2d/components-2d.d.ts.map +1 -0
  474. package/dist/world2d/components-2d.js +77 -0
  475. package/dist/world2d/index.d.ts +34 -0
  476. package/dist/world2d/index.d.ts.map +1 -0
  477. package/dist/world2d/index.js +32 -0
  478. package/dist/world2d/ingest-iframe-2d.d.ts +82 -0
  479. package/dist/world2d/ingest-iframe-2d.d.ts.map +1 -0
  480. package/dist/world2d/ingest-iframe-2d.js +166 -0
  481. package/dist/world2d/ingest2d.d.ts +97 -0
  482. package/dist/world2d/ingest2d.d.ts.map +1 -0
  483. package/dist/world2d/ingest2d.js +40 -0
  484. package/dist/world2d/physics2d-registry.d.ts +24 -0
  485. package/dist/world2d/physics2d-registry.d.ts.map +1 -0
  486. package/dist/world2d/physics2d-registry.js +38 -0
  487. package/dist/world2d/pixi-game-adapter.d.ts +107 -0
  488. package/dist/world2d/pixi-game-adapter.d.ts.map +1 -0
  489. package/dist/world2d/pixi-game-adapter.js +210 -0
  490. package/dist/world2d/pixi-surface.d.ts +39 -0
  491. package/dist/world2d/pixi-surface.d.ts.map +1 -0
  492. package/dist/world2d/pixi-surface.js +47 -0
  493. package/dist/world2d/scene-capture-2d.d.ts +43 -0
  494. package/dist/world2d/scene-capture-2d.d.ts.map +1 -0
  495. package/dist/world2d/scene-capture-2d.js +92 -0
  496. package/dist/world2d/scene2d-loader.d.ts +27 -0
  497. package/dist/world2d/scene2d-loader.d.ts.map +1 -0
  498. package/dist/world2d/scene2d-loader.js +275 -0
  499. package/dist/world2d/schema/entity2d.d.ts +102 -0
  500. package/dist/world2d/schema/entity2d.d.ts.map +1 -0
  501. package/dist/world2d/schema/entity2d.js +119 -0
  502. package/dist/world2d/schema/physics2d.d.ts +46 -0
  503. package/dist/world2d/schema/physics2d.d.ts.map +1 -0
  504. package/dist/world2d/schema/physics2d.js +45 -0
  505. package/dist/world2d/schema/sprite.d.ts +42 -0
  506. package/dist/world2d/schema/sprite.d.ts.map +1 -0
  507. package/dist/world2d/schema/sprite.js +63 -0
  508. package/dist/world2d/schema/tilemap.d.ts +15 -0
  509. package/dist/world2d/schema/tilemap.d.ts.map +1 -0
  510. package/dist/world2d/schema/tilemap.js +19 -0
  511. package/dist/world2d/schema/tuples2d.d.ts +20 -0
  512. package/dist/world2d/schema/tuples2d.d.ts.map +1 -0
  513. package/dist/world2d/schema/tuples2d.js +19 -0
  514. package/dist/world2d/system-adapters-2d.d.ts +16 -0
  515. package/dist/world2d/system-adapters-2d.d.ts.map +1 -0
  516. package/dist/world2d/system-adapters-2d.js +37 -0
  517. package/dist/world2d/transform-writer-2d.d.ts +16 -0
  518. package/dist/world2d/transform-writer-2d.d.ts.map +1 -0
  519. package/dist/world2d/transform-writer-2d.js +22 -0
  520. package/dist/world2d/types.d.ts +59 -0
  521. package/dist/world2d/types.d.ts.map +1 -0
  522. package/dist/world2d/types.js +1 -0
  523. package/package.json +1 -1
  524. package/schemas/vgai-game.schema.json +63 -0
  525. package/src/manifest/load.ts +7 -0
  526. package/src/manifest/schema.ts +58 -0
  527. package/src/world3d-react/r3f-adapter.tsx +8 -8
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Built-in instancer definitions. Importing this module for its side effects
3
+ * registers the built-ins into the instancer registry. Both the runtime factory
4
+ * (scene-loader) and the editor factory (entity-factory) import it so instanced
5
+ * meshes resolve on whichever side builds first.
6
+ */
7
+ import './grid';
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Shared light + camera factory (T1.13 — DEFAULTS truth).
3
+ *
4
+ * `createLight`/`createCamera` used to be duplicated verbatim between the
5
+ * runtime loader (`scene-loader.ts`) and the editor preview
6
+ * (`entity-factory.ts`) — both hardcoded the same fallback literals (color
7
+ * '#ffffff', fov 60, near 0.1, far 1000, etc.) that happened to agree with
8
+ * `DEFAULTS.light`/`DEFAULTS.camera` by luck rather than by reading them. Any
9
+ * edit to one copy (or to `DEFAULTS`) could silently diverge from the other.
10
+ *
11
+ * This module is now the ONE place that builds a `THREE.Light`/`THREE.Camera`
12
+ * from a `SceneLight`/`SceneCamera` descriptor, reading its fallbacks from
13
+ * `DEFAULTS` (the single source of truth for scene default values — see
14
+ * `scene/defaults.ts`). Both the loader and the editor import it, so they
15
+ * can no longer disagree.
16
+ */
17
+ import * as THREE from 'three';
18
+ import type { SceneCamera, SceneLight } from './scene-types';
19
+ /** Build a Three.js light from a `SceneLight` descriptor. */
20
+ export declare function createLight(def: SceneLight): THREE.Light;
21
+ /** Build a Three.js camera from a `SceneCamera` descriptor. */
22
+ export declare function createCamera(def: SceneCamera): THREE.Camera;
23
+ //# sourceMappingURL=light-camera-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light-camera-factory.d.ts","sourceRoot":"","sources":["../../src/scene/light-camera-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI7D,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,KAAK,CAAC,KAAK,CAsCxD;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,KAAK,CAAC,MAAM,CAoB3D"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Shared light + camera factory (T1.13 — DEFAULTS truth).
3
+ *
4
+ * `createLight`/`createCamera` used to be duplicated verbatim between the
5
+ * runtime loader (`scene-loader.ts`) and the editor preview
6
+ * (`entity-factory.ts`) — both hardcoded the same fallback literals (color
7
+ * '#ffffff', fov 60, near 0.1, far 1000, etc.) that happened to agree with
8
+ * `DEFAULTS.light`/`DEFAULTS.camera` by luck rather than by reading them. Any
9
+ * edit to one copy (or to `DEFAULTS`) could silently diverge from the other.
10
+ *
11
+ * This module is now the ONE place that builds a `THREE.Light`/`THREE.Camera`
12
+ * from a `SceneLight`/`SceneCamera` descriptor, reading its fallbacks from
13
+ * `DEFAULTS` (the single source of truth for scene default values — see
14
+ * `scene/defaults.ts`). Both the loader and the editor import it, so they
15
+ * can no longer disagree.
16
+ */
17
+ import * as THREE from 'three';
18
+ // F2 (docs/VSCN-STRUCTURAL-GAPS-DESIGN.md) — area lights. `RectAreaLight`
19
+ // requires its LTC lookup-texture uniforms initialized once before the first
20
+ // instance is constructed; three.js ships that setup as an addon, not part
21
+ // of core. Imported via the `three/addons/*` alias (package.json `exports`:
22
+ // `"./addons/*": "./examples/jsm/*"` — the identical file as
23
+ // `three/examples/jsm/lights/RectAreaLightUniformsLib.js`) because a literal
24
+ // `/examples/` specifier trips `engine-host-no-game-imports.test.ts`'s
25
+ // game/editor-example guard (a same-substring false positive against this
26
+ // repo's OWN `packages/editor/template/src/examples/` convention, unrelated
27
+ // to three.js's addon folder naming).
28
+ import { RectAreaLightUniformsLib } from 'three/addons/lights/RectAreaLightUniformsLib.js';
29
+ import { DEFAULTS } from './defaults';
30
+ let rectAreaLightUniformsInitialized = false;
31
+ /** Build a Three.js light from a `SceneLight` descriptor. */
32
+ export function createLight(def) {
33
+ const d = DEFAULTS.light;
34
+ const color = def.color ?? d.color;
35
+ const intensity = def.intensity ?? d.intensity;
36
+ switch (def.type) {
37
+ case 'directional':
38
+ return new THREE.DirectionalLight(color, intensity);
39
+ case 'point':
40
+ return new THREE.PointLight(color, intensity, def.distance ?? d.distance);
41
+ case 'spot':
42
+ return new THREE.SpotLight(color, intensity, def.distance ?? d.distance, def.angle ?? d.angle, def.penumbra ?? d.penumbra);
43
+ case 'hemisphere':
44
+ return new THREE.HemisphereLight(color, def.groundColor ?? d.groundColor, intensity);
45
+ case 'area': {
46
+ // No shadow map is ever wired for this light (RectAreaLight does not
47
+ // support shadows in three.js — see the honesty note on the schema
48
+ // field's .describe(); degrade loudly, not silently).
49
+ if (!rectAreaLightUniformsInitialized) {
50
+ RectAreaLightUniformsLib.init();
51
+ rectAreaLightUniformsInitialized = true;
52
+ }
53
+ return new THREE.RectAreaLight(color, intensity, def.width ?? d.width, def.height ?? d.height);
54
+ }
55
+ default:
56
+ return new THREE.DirectionalLight(color, intensity);
57
+ }
58
+ }
59
+ /** Build a Three.js camera from a `SceneCamera` descriptor. */
60
+ export function createCamera(def) {
61
+ const d = DEFAULTS.camera;
62
+ const aspect = (def.width ?? d.width) / (def.height ?? d.height);
63
+ if (def.type === 'orthographic') {
64
+ const size = def.orthoSize ?? d.orthoSize;
65
+ return new THREE.OrthographicCamera(-size * aspect, size * aspect, size, -size, def.near ?? d.near, def.far ?? d.far);
66
+ }
67
+ return new THREE.PerspectiveCamera(def.fov ?? d.fov, aspect, def.near ?? d.near, def.far ?? d.far);
68
+ }
@@ -0,0 +1,17 @@
1
+ import * as THREE from 'three';
2
+ import type { SceneMaterial, SceneMesh } from './scene-types';
3
+ /**
4
+ * Single source of truth for turning a `SceneMesh` / `SceneMaterial` descriptor
5
+ * into Three.js geometry/material. Both the runtime scene-loader and the editor's
6
+ * entity-factory import these, so the editor preview renders exactly what the game
7
+ * renders (the WYSIWYG guarantee in ARCHITECTURE.md). Previously these were
8
+ * copy-pasted in two places and had to be hand-synced — any new material feature
9
+ * added to one and not the other silently broke that guarantee.
10
+ *
11
+ * Callers must have imported the side-effect registration modules
12
+ * (`./geometries`, `./materials`, plus any custom defs) so `buildGeneratedGeometry`
13
+ * and `buildCustomMaterial` resolve their registries.
14
+ */
15
+ export declare function createGeometry(mesh: SceneMesh): THREE.BufferGeometry;
16
+ export declare function createMaterial(mat?: SceneMaterial): THREE.Material;
17
+ //# sourceMappingURL=material-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-factory.d.ts","sourceRoot":"","sources":["../../src/scene/material-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE9D;;;;;;;;;;;GAWG;AAEH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,KAAK,CAAC,cAAc,CAwBpE;AAGD,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC,QAAQ,CAmKlE"}
@@ -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"}