@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,274 @@
1
+ import { CompositeTilemap } from '@pixi/tilemap';
2
+ import { AnimatedSprite, Assets, BlurFilter, ColorMatrixFilter, Container, Sprite, Text, Texture, } from 'pixi.js';
3
+ import { SceneParseError } from '../scene/parse';
4
+ import { Scene2DSchema } from './schema/entity2d';
5
+ const BLEND = {
6
+ normal: 'normal',
7
+ add: 'add',
8
+ multiply: 'multiply',
9
+ screen: 'screen',
10
+ };
11
+ function hexToNum(hex, fallback) {
12
+ if (!hex)
13
+ return fallback;
14
+ return Number.parseInt(hex.replace('#', ''), 16);
15
+ }
16
+ /** Generate N asset-light frame textures (a moving accent dot) for an AnimatedSprite. */
17
+ function generateFrames(count, w, h, tint) {
18
+ const frames = [];
19
+ for (let i = 0; i < count; i++) {
20
+ const canvas = document.createElement('canvas');
21
+ canvas.width = w;
22
+ canvas.height = h;
23
+ const g = canvas.getContext('2d');
24
+ g.fillStyle = tint;
25
+ g.fillRect(0, 0, w, h);
26
+ g.fillStyle = '#10101a';
27
+ const t = (i / count) * Math.PI * 2;
28
+ g.beginPath();
29
+ g.arc(w / 2 + Math.cos(t) * w * 0.25, h / 2 + Math.sin(t) * h * 0.25, Math.min(w, h) * 0.18, 0, Math.PI * 2);
30
+ g.fill();
31
+ frames.push(Texture.from(canvas));
32
+ }
33
+ return frames;
34
+ }
35
+ function applyFilter(display, filter) {
36
+ if (!filter || filter === 'none')
37
+ return;
38
+ if (filter === 'blur')
39
+ display.filters = [new BlurFilter({ strength: 6 })];
40
+ else if (filter === 'desaturate') {
41
+ const cm = new ColorMatrixFilter();
42
+ cm.desaturate();
43
+ display.filters = [cm];
44
+ }
45
+ }
46
+ /** Instantiate a PIXI.Sprite / AnimatedSprite from authored `sprite` data. */
47
+ async function createSprite(data) {
48
+ let display;
49
+ if (data.animationFrames && data.animationFrames > 1) {
50
+ const frames = generateFrames(data.animationFrames, data.width ?? 40, data.height ?? 40, data.tint ?? '#ffffff');
51
+ const anim = new AnimatedSprite(frames);
52
+ anim.animationSpeed = (data.fps ?? 8) / 60;
53
+ anim.play();
54
+ display = anim;
55
+ }
56
+ else {
57
+ let texture = Texture.WHITE;
58
+ if (data.texture) {
59
+ const loaded = await Assets.load(data.texture);
60
+ texture =
61
+ data.frame && loaded?.textures?.[data.frame]
62
+ ? loaded.textures[data.frame]
63
+ : loaded;
64
+ }
65
+ display = new Sprite(texture);
66
+ }
67
+ const [ax, ay] = data.anchor ?? [0.5, 0.5];
68
+ display.anchor.set(ax, ay);
69
+ if (data.width !== undefined)
70
+ display.width = data.width;
71
+ if (data.height !== undefined)
72
+ display.height = data.height;
73
+ if (!data.animationFrames)
74
+ display.tint = hexToNum(data.tint, 0xffffff);
75
+ if (data.alpha !== undefined)
76
+ display.alpha = data.alpha;
77
+ if (data.blendMode)
78
+ display.blendMode = BLEND[data.blendMode] ?? 'normal';
79
+ if (data.interactive) {
80
+ display.eventMode = 'static';
81
+ display.cursor = 'pointer';
82
+ }
83
+ applyFilter(display, data.filter);
84
+ return display;
85
+ }
86
+ /** Instantiate a @pixi/tilemap CompositeTilemap from authored `tilemap` data. */
87
+ function createTilemap(data) {
88
+ // Generate one tile texture per palette color (asset-light).
89
+ const textures = data.palette.map((color) => {
90
+ const c = document.createElement('canvas');
91
+ c.width = data.tileSize;
92
+ c.height = data.tileSize;
93
+ const g = c.getContext('2d');
94
+ g.fillStyle = color;
95
+ g.fillRect(0, 0, data.tileSize, data.tileSize);
96
+ g.strokeStyle = 'rgba(0,0,0,0.18)';
97
+ g.strokeRect(0.5, 0.5, data.tileSize - 1, data.tileSize - 1);
98
+ return Texture.from(c);
99
+ });
100
+ const tilemap = new CompositeTilemap();
101
+ for (let y = 0; y < data.tiles.length; y++) {
102
+ const row = data.tiles[y];
103
+ for (let x = 0; x < row.length; x++) {
104
+ const tex = textures[row[x]];
105
+ if (tex)
106
+ tilemap.tile(tex, x * data.tileSize, y * data.tileSize);
107
+ }
108
+ }
109
+ return tilemap;
110
+ }
111
+ /** Instantiate a PIXI.Text from authored `text` data (world-space label). */
112
+ function createText(data) {
113
+ const text = new Text({
114
+ text: data.text,
115
+ style: { fontSize: data.fontSize ?? 24, fill: data.fill ?? '#ffffff' },
116
+ });
117
+ const [ax, ay] = data.anchor ?? [0.5, 0.5];
118
+ text.anchor.set(ax, ay);
119
+ return text;
120
+ }
121
+ /** Map the bodyType enum to a Rapier 2D RigidBodyDesc. */
122
+ function bodyDesc(rapier2d, type) {
123
+ switch (type) {
124
+ case 'fixed':
125
+ return rapier2d.RigidBodyDesc.fixed();
126
+ case 'kinematicVelocity':
127
+ return rapier2d.RigidBodyDesc.kinematicVelocityBased();
128
+ case 'kinematicPosition':
129
+ return rapier2d.RigidBodyDesc.kinematicPositionBased();
130
+ default:
131
+ return rapier2d.RigidBodyDesc.dynamic();
132
+ }
133
+ }
134
+ /** Create the Rapier 2D body + collider for an entity, register it, return the body. */
135
+ // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: one cohesive physics2d-descriptor builder; each branch maps an optional authored field to a Rapier setter
136
+ function createPhysics2D(ctx, entity, display) {
137
+ const p = entity.physics2d;
138
+ if (!p)
139
+ return;
140
+ const { rapier2d, rapier2dWorld, physics2d } = ctx;
141
+ const pos = entity.transform2d?.position ?? [0, 0];
142
+ const rbDesc = bodyDesc(rapier2d, p.bodyType)
143
+ .setTranslation(pos[0], pos[1])
144
+ .setRotation(entity.transform2d?.rotation ?? 0);
145
+ if (p.linearDamping !== undefined)
146
+ rbDesc.setLinearDamping(p.linearDamping);
147
+ if (p.gravityScale !== undefined)
148
+ rbDesc.setGravityScale(p.gravityScale);
149
+ if (p.lockRotations)
150
+ rbDesc.lockRotations();
151
+ const body = rapier2dWorld.createRigidBody(rbDesc);
152
+ let colDesc;
153
+ const c = p.collider;
154
+ if (c.shape === 'cuboid')
155
+ colDesc = rapier2d.ColliderDesc.cuboid(c.halfExtents[0], c.halfExtents[1]);
156
+ else if (c.shape === 'ball')
157
+ colDesc = rapier2d.ColliderDesc.ball(c.radius);
158
+ else
159
+ colDesc = rapier2d.ColliderDesc.capsule(c.halfHeight, c.radius);
160
+ if (p.density !== undefined)
161
+ colDesc.setDensity(p.density);
162
+ if (p.friction !== undefined)
163
+ colDesc.setFriction(p.friction);
164
+ if (p.restitution !== undefined)
165
+ colDesc.setRestitution(p.restitution);
166
+ if (p.sensor) {
167
+ colDesc.setSensor(true);
168
+ colDesc.setActiveEvents(rapier2d.ActiveEvents.COLLISION_EVENTS);
169
+ }
170
+ else {
171
+ colDesc.setActiveEvents(rapier2d.ActiveEvents.COLLISION_EVENTS);
172
+ }
173
+ const collider = rapier2dWorld.createCollider(colDesc, body);
174
+ physics2d.add(display, body, collider);
175
+ }
176
+ /** Hydrate the `components` field — schema.parse + Object.assign + attach (2D analog of applyComponents).
177
+ * `manager` is the unified `ComponentManager` (`ecs/component-manager.ts`), constructed
178
+ * for kind `'pixijs'` — the world2d silo manager this replaced (T7.3) is deleted. */
179
+ function applyComponents2D(registry, display, components, manager) {
180
+ if (!components)
181
+ return;
182
+ for (const [name, data] of Object.entries(components)) {
183
+ const Cls = registry[name];
184
+ if (!Cls)
185
+ throw new Error(`Unknown world2d component: "${name}"`);
186
+ const parsed = Cls.schema ? Cls.schema.parse(data ?? {}) : (data ?? {});
187
+ const instance = new Cls();
188
+ Object.assign(instance, parsed);
189
+ // T5.4: record the registry name + raw authored data — same reasoning as
190
+ // the 3D `applyComponents` (`scene/component-registry.ts`).
191
+ manager.attach(display, instance, { key: name, props: data ?? {} });
192
+ }
193
+ }
194
+ /** Apply a 2D transform to a display object. */
195
+ function applyTransform2D(display, entity) {
196
+ const t = entity.transform2d;
197
+ if (t?.position)
198
+ display.position.set(t.position[0], t.position[1]);
199
+ if (t?.rotation !== undefined)
200
+ display.rotation = t.rotation;
201
+ if (t?.scale)
202
+ display.scale.set(t.scale[0], t.scale[1]);
203
+ const pivot = t?.pivot ?? entity.pivot;
204
+ if (pivot)
205
+ display.pivot.set(pivot[0], pivot[1]);
206
+ if (entity.visible === false)
207
+ display.visible = false;
208
+ }
209
+ let _autoId = 0;
210
+ /**
211
+ * Load a world2d scene from authored data — the 2D analog of `loadSceneFromData`.
212
+ * Three passes: (1) spawn all entities (recursing into children), building an
213
+ * id→display map and creating Rapier 2D bodies; (2) [no joints in 2D yet];
214
+ * (3) `componentManager.initAll()` once everything exists.
215
+ *
216
+ * Re-validates `data` even though the fetch path (`fetchScene2DFile` in
217
+ * `packages/editor/src/adapter-resolver.ts`) already validates before calling
218
+ * in — not every caller goes through that path (test-constructed
219
+ * `PixiSceneConfig.sceneData` literals reach here unvalidated), so a malformed
220
+ * payload still throws a `SceneParseError` naming the file, not a raw
221
+ * `ZodError` (T4.6 convention, closing §7.1-14). `sourceName` is optional
222
+ * because not every caller knows the originating file path; callers that do
223
+ * (or gain the ability to) should thread it through for a better message.
224
+ */
225
+ export async function loadScene2DFromData(data, ctx, registry, sourceName) {
226
+ const result = Scene2DSchema.safeParse(data);
227
+ if (!result.success)
228
+ throw new SceneParseError(result.error.issues, sourceName);
229
+ const scene = result.data;
230
+ const byId = new Map();
231
+ const roots = [];
232
+ async function spawn(entity, parent) {
233
+ let display;
234
+ if (entity.sprite)
235
+ display = await createSprite(entity.sprite);
236
+ else if (entity.text)
237
+ display = createText(entity.text);
238
+ else if (entity.tilemap)
239
+ display = createTilemap(entity.tilemap);
240
+ else
241
+ display = new Container();
242
+ display.label = entity.name;
243
+ const id = entity.id ?? `e2d_${_autoId++}`;
244
+ display.__entityId = id;
245
+ byId.set(id, display);
246
+ applyTransform2D(display, entity);
247
+ parent.addChild(display);
248
+ // Physics bodies live in world space (flat under the world container); the
249
+ // transform-writer drives their pose. Components attach to the display.
250
+ createPhysics2D(ctx, entity, display);
251
+ applyComponents2D(registry, display, entity.components, ctx.components);
252
+ if (entity.children) {
253
+ for (const child of entity.children)
254
+ await spawn(child, display);
255
+ }
256
+ return display;
257
+ }
258
+ for (const entity of scene.entities) {
259
+ roots.push(await spawn(entity, ctx.stage));
260
+ }
261
+ await ctx.components.initAll();
262
+ return {
263
+ roots,
264
+ byId,
265
+ dispose() {
266
+ for (const root of roots) {
267
+ root.removeFromParent();
268
+ root.destroy({ children: true });
269
+ }
270
+ roots.length = 0;
271
+ byId.clear();
272
+ },
273
+ };
274
+ }
@@ -0,0 +1,102 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * A world2d entity — the 2D analog of the 3D `SceneEntity`. The SAME engine model
4
+ * (named components validated against a registry, a tree of children) reused; the
5
+ * sections (`sprite`/`text`/`physics2d`/`transform2d`) name engine-owned data, NOT
6
+ * `PIXI.Sprite`. `surface` defaults to 'world2d' for entities in a Scene2D file.
7
+ */
8
+ declare const Entity2DBase: z.ZodObject<{
9
+ id: z.ZodOptional<z.ZodString>;
10
+ name: z.ZodString;
11
+ surface: z.ZodOptional<z.ZodEnum<{
12
+ world2d: "world2d";
13
+ world3d: "world3d";
14
+ }>>;
15
+ visible: z.ZodOptional<z.ZodBoolean>;
16
+ locked: z.ZodOptional<z.ZodBoolean>;
17
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
+ transform2d: z.ZodOptional<z.ZodObject<{
19
+ position: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
20
+ rotation: z.ZodOptional<z.ZodNumber>;
21
+ scale: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
22
+ pivot: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
23
+ }, z.core.$strip>>;
24
+ pivot: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
25
+ sprite: z.ZodOptional<z.ZodObject<{
26
+ texture: z.ZodOptional<z.ZodString>;
27
+ frame: z.ZodOptional<z.ZodString>;
28
+ anchor: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
29
+ tint: z.ZodOptional<z.ZodString>;
30
+ alpha: z.ZodOptional<z.ZodNumber>;
31
+ width: z.ZodOptional<z.ZodNumber>;
32
+ height: z.ZodOptional<z.ZodNumber>;
33
+ blendMode: z.ZodOptional<z.ZodEnum<{
34
+ normal: "normal";
35
+ screen: "screen";
36
+ add: "add";
37
+ multiply: "multiply";
38
+ }>>;
39
+ interactive: z.ZodOptional<z.ZodBoolean>;
40
+ filter: z.ZodOptional<z.ZodEnum<{
41
+ none: "none";
42
+ blur: "blur";
43
+ desaturate: "desaturate";
44
+ }>>;
45
+ animationFrames: z.ZodOptional<z.ZodNumber>;
46
+ fps: z.ZodOptional<z.ZodNumber>;
47
+ }, z.core.$strip>>;
48
+ text: z.ZodOptional<z.ZodObject<{
49
+ text: z.ZodString;
50
+ fontSize: z.ZodOptional<z.ZodNumber>;
51
+ fill: z.ZodOptional<z.ZodString>;
52
+ anchor: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
53
+ }, z.core.$strip>>;
54
+ tilemap: z.ZodOptional<z.ZodObject<{
55
+ tileSize: z.ZodNumber;
56
+ palette: z.ZodArray<z.ZodString>;
57
+ tiles: z.ZodArray<z.ZodArray<z.ZodNumber>>;
58
+ }, z.core.$strip>>;
59
+ physics2d: z.ZodOptional<z.ZodObject<{
60
+ bodyType: z.ZodEnum<{
61
+ fixed: "fixed";
62
+ dynamic: "dynamic";
63
+ kinematicVelocity: "kinematicVelocity";
64
+ kinematicPosition: "kinematicPosition";
65
+ }>;
66
+ collider: z.ZodDiscriminatedUnion<[z.ZodObject<{
67
+ shape: z.ZodLiteral<"cuboid">;
68
+ halfExtents: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
69
+ }, z.core.$strip>, z.ZodObject<{
70
+ shape: z.ZodLiteral<"ball">;
71
+ radius: z.ZodNumber;
72
+ }, z.core.$strip>, z.ZodObject<{
73
+ shape: z.ZodLiteral<"capsule">;
74
+ halfHeight: z.ZodNumber;
75
+ radius: z.ZodNumber;
76
+ }, z.core.$strip>], "shape">;
77
+ sensor: z.ZodOptional<z.ZodBoolean>;
78
+ density: z.ZodOptional<z.ZodNumber>;
79
+ friction: z.ZodOptional<z.ZodNumber>;
80
+ restitution: z.ZodOptional<z.ZodNumber>;
81
+ linearDamping: z.ZodOptional<z.ZodNumber>;
82
+ gravityScale: z.ZodOptional<z.ZodNumber>;
83
+ lockRotations: z.ZodOptional<z.ZodBoolean>;
84
+ }, z.core.$strip>>;
85
+ components: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>, z.ZodArray<z.ZodNumber>, z.ZodArray<z.ZodString>, z.ZodArray<z.ZodBoolean>]>>>>;
86
+ }, z.core.$strip>;
87
+ export type Entity2D = z.infer<typeof Entity2DBase> & {
88
+ children?: Entity2D[] | undefined;
89
+ };
90
+ export declare const Entity2DSchema: z.ZodType<Entity2D>;
91
+ /** A world2d scene file — the 2D analog of `.vscn.json` (`.scn2d.json`). */
92
+ export declare const Scene2DSchema: z.ZodObject<{
93
+ version: z.ZodOptional<z.ZodNumber>;
94
+ name: z.ZodOptional<z.ZodString>;
95
+ surface: z.ZodOptional<z.ZodLiteral<"world2d">>;
96
+ gravity: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
97
+ background: z.ZodOptional<z.ZodString>;
98
+ entities: z.ZodArray<z.ZodType<Entity2D, unknown, z.core.$ZodTypeInternals<Entity2D, unknown>>>;
99
+ }, z.core.$strip>;
100
+ export type Scene2DFile = z.infer<typeof Scene2DSchema>;
101
+ export {};
102
+ //# sourceMappingURL=entity2d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity2d.d.ts","sourceRoot":"","sources":["../../../src/world2d/schema/entity2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB;;;;;GAKG;AACH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmChB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,GAAG;IACpD,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CA6CvB,CAAC;AAEzB,4EAA4E;AAC5E,eAAO,MAAM,aAAa;;;;;;;iBA8B4B,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -0,0 +1,119 @@
1
+ import { z } from 'zod';
2
+ import { Physics2DSchema } from './physics2d';
3
+ import { SpriteSchema, Text2DSchema } from './sprite';
4
+ import { TilemapSchema } from './tilemap';
5
+ import { Transform2DSchema, Vec2Schema } from './tuples2d';
6
+ /** Component data: same shape as the 3D ComponentsSchema (scalars + scalar arrays). */
7
+ const ComponentScalarSchema = z.union([z.number(), z.string(), z.boolean()]);
8
+ const ComponentValueSchema = z.union([
9
+ ComponentScalarSchema,
10
+ z.array(z.number()),
11
+ z.array(z.string()),
12
+ z.array(z.boolean()),
13
+ ]);
14
+ const ComponentDataSchema = z.record(z.string(), ComponentValueSchema);
15
+ const ComponentsSchema = z.record(z.string(), ComponentDataSchema);
16
+ /**
17
+ * A world2d entity — the 2D analog of the 3D `SceneEntity`. The SAME engine model
18
+ * (named components validated against a registry, a tree of children) reused; the
19
+ * sections (`sprite`/`text`/`physics2d`/`transform2d`) name engine-owned data, NOT
20
+ * `PIXI.Sprite`. `surface` defaults to 'world2d' for entities in a Scene2D file.
21
+ */
22
+ const Entity2DBase = z.object({
23
+ id: z.string().optional().describe('Unique entity ID. Auto-generated if omitted'),
24
+ name: z.string().describe('Human-readable entity name (shown in hierarchy panel)'),
25
+ surface: z
26
+ .enum(['world2d', 'world3d'])
27
+ .optional()
28
+ .describe("Render surface that instantiates this entity. Default 'world2d' in a Scene2D file. The " +
29
+ "'world3d' value is REJECTED at parse (T4.1): declared but has no runtime reader — " +
30
+ "authoring surface: 'world3d' throws. Do not author it ('world2d', the default, is fine)."),
31
+ visible: z.boolean().optional().describe('Whether the entity and its children are rendered'),
32
+ locked: z
33
+ .boolean()
34
+ .optional()
35
+ .describe('Prevent selection and editing in the scene editor. REJECTED at parse (T4.1): declared ' +
36
+ 'but has no runtime reader — authoring this field throws. Do not author.'),
37
+ tags: z
38
+ .array(z.string())
39
+ .optional()
40
+ .describe('Arbitrary string tags for runtime queries. REJECTED at parse (T4.1): declared but has no ' +
41
+ 'runtime reader — authoring this field throws. Do not author.'),
42
+ transform2d: Transform2DSchema.optional().describe('Local 2D transform relative to parent'),
43
+ pivot: Vec2Schema.optional().describe('Local-space pivot point [x, y]'),
44
+ sprite: SpriteSchema.optional().describe('2D sprite appearance'),
45
+ text: Text2DSchema.optional().describe('World-space text label'),
46
+ tilemap: TilemapSchema.optional().describe('2D tilemap (CompositeTilemap)'),
47
+ physics2d: Physics2DSchema.optional().describe('2D physics rigid body + collider'),
48
+ components: ComponentsSchema.optional().describe('User-defined components (validated against the world2d component registry)'),
49
+ });
50
+ export const Entity2DSchema = z.lazy(() => Entity2DBase.extend({
51
+ children: z.array(Entity2DSchema).optional().describe('Child entities'),
52
+ })
53
+ // T4.1: three fields are authored/typed but have no runtime reader in
54
+ // `scene2d-loader.ts`'s `spawn()` (unlike their 3D `SceneEntity` siblings,
55
+ // which ARE read — editor selection-locking for `locked`, `scene-query.ts`
56
+ // for `tags`):
57
+ // - `locked` — spawn() never checks it (no 2D editor selection-lock yet).
58
+ // - `tags` — never copied onto userData; no 2D equivalent of scene-query.ts.
59
+ // - `surface: 'world3d'` — spawn() always instantiates as world2d
60
+ // regardless of this field's value, so a 'world3d' entity is silently
61
+ // spawned into the 2D world anyway. ('world2d', the default, is a
62
+ // harmless no-op and is not flagged.)
63
+ // Loud load errors until readers exist — see T4.1.
64
+ .superRefine((entity, ctx) => {
65
+ if (entity.locked !== undefined) {
66
+ ctx.addIssue({
67
+ code: z.ZodIssueCode.custom,
68
+ message: `world2d entity "${entity.name}": \`locked\` is authored but not implemented — ` +
69
+ 'scene2d-loader.ts has no 2D editor selection-lock reader yet. See T4.1.',
70
+ path: ['locked'],
71
+ });
72
+ }
73
+ if (entity.tags !== undefined) {
74
+ ctx.addIssue({
75
+ code: z.ZodIssueCode.custom,
76
+ message: `world2d entity "${entity.name}": \`tags\` is authored but not implemented — ` +
77
+ 'no 2D equivalent of scene-query.ts reads it yet. See T4.1.',
78
+ path: ['tags'],
79
+ });
80
+ }
81
+ if (entity.surface === 'world3d') {
82
+ ctx.addIssue({
83
+ code: z.ZodIssueCode.custom,
84
+ message: `world2d entity "${entity.name}": \`surface: 'world3d'\` is authored but not ` +
85
+ 'implemented — spawn() always instantiates entities as world2d regardless of this ' +
86
+ 'field, so a world3d entity would be silently spawned into the 2D world. See T4.1.',
87
+ path: ['surface'],
88
+ });
89
+ }
90
+ }));
91
+ /** A world2d scene file — the 2D analog of `.vscn.json` (`.scn2d.json`). */
92
+ export const Scene2DSchema = z
93
+ .object({
94
+ version: z.number().optional().describe('Scene format version'),
95
+ name: z
96
+ .string()
97
+ .optional()
98
+ .describe('Scene name. REJECTED at parse (T4.1): declared but has no runtime reader — authoring ' +
99
+ 'this field throws. Do not author.'),
100
+ surface: z.literal('world2d').optional().describe("Render surface. Always 'world2d'"),
101
+ gravity: Vec2Schema.optional().describe('World gravity [x, y] in px/s^2. Default [0, 980]'),
102
+ background: z.string().optional().describe("Background color hex string. Default '#10101a'"),
103
+ entities: z.array(Entity2DSchema).describe('Root entities of the world2d scene'),
104
+ })
105
+ // T4.1: `name` is authored/typed but has no runtime reader anywhere (unlike
106
+ // `SceneFile.name`/`PrefabFile.name`, which the editor reads via
107
+ // `editor-store.ts`'s `sceneName` getter/setter) — no 2D scene-name display
108
+ // exists yet. Loud load error until a reader exists — see T4.1.
109
+ .superRefine((scene, ctx) => {
110
+ if (scene.name !== undefined) {
111
+ ctx.addIssue({
112
+ code: z.ZodIssueCode.custom,
113
+ message: '`name` is authored but not implemented — no runtime reader displays/consumes a ' +
114
+ 'world2d scene name yet (unlike SceneFile.name). See T4.1.',
115
+ path: ['name'],
116
+ });
117
+ }
118
+ })
119
+ .describe('A world2d scene (PixiJS render surface)');
@@ -0,0 +1,46 @@
1
+ import { z } from 'zod';
2
+ /** A single 2D collider shape (Rapier 2D). Cuboid takes 2 half-extents; ball a radius. */
3
+ export declare const Collider2DSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
4
+ shape: z.ZodLiteral<"cuboid">;
5
+ halfExtents: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
6
+ }, z.core.$strip>, z.ZodObject<{
7
+ shape: z.ZodLiteral<"ball">;
8
+ radius: z.ZodNumber;
9
+ }, z.core.$strip>, z.ZodObject<{
10
+ shape: z.ZodLiteral<"capsule">;
11
+ halfHeight: z.ZodNumber;
12
+ radius: z.ZodNumber;
13
+ }, z.core.$strip>], "shape">;
14
+ export type SceneCollider2D = z.infer<typeof Collider2DSchema>;
15
+ /**
16
+ * `physics2d` authored section — engine-owned 2D physics data, instantiated as a
17
+ * Rapier 2D RigidBody + Collider. The world2d analog of the 3D `physics` section.
18
+ */
19
+ export declare const Physics2DSchema: z.ZodObject<{
20
+ bodyType: z.ZodEnum<{
21
+ fixed: "fixed";
22
+ dynamic: "dynamic";
23
+ kinematicVelocity: "kinematicVelocity";
24
+ kinematicPosition: "kinematicPosition";
25
+ }>;
26
+ collider: z.ZodDiscriminatedUnion<[z.ZodObject<{
27
+ shape: z.ZodLiteral<"cuboid">;
28
+ halfExtents: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
29
+ }, z.core.$strip>, z.ZodObject<{
30
+ shape: z.ZodLiteral<"ball">;
31
+ radius: z.ZodNumber;
32
+ }, z.core.$strip>, z.ZodObject<{
33
+ shape: z.ZodLiteral<"capsule">;
34
+ halfHeight: z.ZodNumber;
35
+ radius: z.ZodNumber;
36
+ }, z.core.$strip>], "shape">;
37
+ sensor: z.ZodOptional<z.ZodBoolean>;
38
+ density: z.ZodOptional<z.ZodNumber>;
39
+ friction: z.ZodOptional<z.ZodNumber>;
40
+ restitution: z.ZodOptional<z.ZodNumber>;
41
+ linearDamping: z.ZodOptional<z.ZodNumber>;
42
+ gravityScale: z.ZodOptional<z.ZodNumber>;
43
+ lockRotations: z.ZodOptional<z.ZodBoolean>;
44
+ }, z.core.$strip>;
45
+ export type ScenePhysics2D = z.infer<typeof Physics2DSchema>;
46
+ //# sourceMappingURL=physics2d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"physics2d.d.ts","sourceRoot":"","sources":["../../../src/world2d/schema/physics2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,0FAA0F;AAC1F,eAAO,MAAM,gBAAgB;;;;;;;;;;4BAgBe,CAAC;AAE7C,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;iBAsBwC,CAAC;AAErE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { z } from 'zod';
2
+ import { Vec2Schema } from './tuples2d';
3
+ /** A single 2D collider shape (Rapier 2D). Cuboid takes 2 half-extents; ball a radius. */
4
+ export const Collider2DSchema = z
5
+ .discriminatedUnion('shape', [
6
+ z.object({
7
+ shape: z.literal('cuboid').describe('Axis-aligned box collider'),
8
+ halfExtents: Vec2Schema.describe('Half-width and half-height [hx, hy] in pixels'),
9
+ }),
10
+ z.object({
11
+ shape: z.literal('ball').describe('Circle collider'),
12
+ radius: z.number().describe('Radius in pixels'),
13
+ }),
14
+ z.object({
15
+ shape: z.literal('capsule').describe('Capsule collider (vertical)'),
16
+ halfHeight: z.number().describe('Half the straight segment length'),
17
+ radius: z.number().describe('Cap radius'),
18
+ }),
19
+ ])
20
+ .describe('2D collider shape (Rapier 2D)');
21
+ /**
22
+ * `physics2d` authored section — engine-owned 2D physics data, instantiated as a
23
+ * Rapier 2D RigidBody + Collider. The world2d analog of the 3D `physics` section.
24
+ */
25
+ export const Physics2DSchema = z
26
+ .object({
27
+ bodyType: z
28
+ .enum(['dynamic', 'fixed', 'kinematicVelocity', 'kinematicPosition'])
29
+ .describe('Rapier 2D rigid-body type'),
30
+ collider: Collider2DSchema.describe('Collider shape attached to the body'),
31
+ sensor: z
32
+ .boolean()
33
+ .optional()
34
+ .describe('If true, a sensor (trigger) collider — overlaps fire onTriggerEnter/Exit, no solid response'),
35
+ density: z.number().optional().describe('Collider density (drives mass). Default 1'),
36
+ friction: z.number().optional().describe('Coefficient of friction. Default 0.5'),
37
+ restitution: z.number().optional().describe('Bounciness 0..1. Default 0'),
38
+ linearDamping: z.number().optional().describe('Linear velocity damping. Default 0'),
39
+ gravityScale: z.number().optional().describe('Per-body gravity multiplier. Default 1'),
40
+ lockRotations: z
41
+ .boolean()
42
+ .optional()
43
+ .describe('Lock the body so it cannot rotate. Default false'),
44
+ })
45
+ .describe('2D physics rigid body + collider (world2d, Rapier 2D)');
@@ -0,0 +1,42 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * `sprite` authored section — engine-owned 2D sprite data, NOT a `PIXI.Sprite`.
4
+ *
5
+ * Per ARCHITECTURE.md §Render Surfaces: authored data says `sprite`, and a runtime
6
+ * adapter instantiates it onto the appropriate backend (here, a `PIXI.Sprite` on
7
+ * the world2d surface). A 1x1 white texture is used when `texture` is omitted, so a
8
+ * tinted rectangle sprite needs no asset.
9
+ */
10
+ export declare const SpriteSchema: z.ZodObject<{
11
+ texture: z.ZodOptional<z.ZodString>;
12
+ frame: z.ZodOptional<z.ZodString>;
13
+ anchor: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
14
+ tint: z.ZodOptional<z.ZodString>;
15
+ alpha: z.ZodOptional<z.ZodNumber>;
16
+ width: z.ZodOptional<z.ZodNumber>;
17
+ height: z.ZodOptional<z.ZodNumber>;
18
+ blendMode: z.ZodOptional<z.ZodEnum<{
19
+ normal: "normal";
20
+ screen: "screen";
21
+ add: "add";
22
+ multiply: "multiply";
23
+ }>>;
24
+ interactive: z.ZodOptional<z.ZodBoolean>;
25
+ filter: z.ZodOptional<z.ZodEnum<{
26
+ none: "none";
27
+ blur: "blur";
28
+ desaturate: "desaturate";
29
+ }>>;
30
+ animationFrames: z.ZodOptional<z.ZodNumber>;
31
+ fps: z.ZodOptional<z.ZodNumber>;
32
+ }, z.core.$strip>;
33
+ export type SceneSprite = z.infer<typeof SpriteSchema>;
34
+ /** `text` authored section — a world-space PIXI.Text label (world-space UI). */
35
+ export declare const Text2DSchema: z.ZodObject<{
36
+ text: z.ZodString;
37
+ fontSize: z.ZodOptional<z.ZodNumber>;
38
+ fill: z.ZodOptional<z.ZodString>;
39
+ anchor: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
40
+ }, z.core.$strip>;
41
+ export type SceneText2D = z.infer<typeof Text2DSchema>;
42
+ //# sourceMappingURL=sprite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprite.d.ts","sourceRoot":"","sources":["../../../src/world2d/schema/sprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;iBA6CqE,CAAC;AAE/F,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAEvD,gFAAgF;AAChF,eAAO,MAAM,YAAY;;;;;iBAOsD,CAAC;AAEhF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC"}