@vgai/engine 0.5.4 → 0.5.6

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 (448) 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 +597 -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 +77 -0
  8. package/dist/adapter/colyseus-networking-adapter.d.ts.map +1 -0
  9. package/dist/adapter/colyseus-networking-adapter.js +76 -0
  10. package/dist/adapter/first-party-systems.d.ts +23 -0
  11. package/dist/adapter/first-party-systems.d.ts.map +1 -0
  12. package/dist/adapter/first-party-systems.js +196 -0
  13. package/dist/adapter/host-context.d.ts +194 -0
  14. package/dist/adapter/host-context.d.ts.map +1 -0
  15. package/dist/adapter/host-context.js +80 -0
  16. package/dist/adapter/index.d.ts +33 -0
  17. package/dist/adapter/index.d.ts.map +1 -0
  18. package/dist/adapter/index.js +25 -0
  19. package/dist/adapter/ingest/game-contract.d.ts +53 -0
  20. package/dist/adapter/ingest/game-contract.d.ts.map +1 -0
  21. package/dist/adapter/ingest/game-contract.js +30 -0
  22. package/dist/adapter/ingest/scene-capture.d.ts +121 -0
  23. package/dist/adapter/ingest/scene-capture.d.ts.map +1 -0
  24. package/dist/adapter/ingest/scene-capture.js +270 -0
  25. package/dist/adapter/ingest/structural-ids.d.ts +64 -0
  26. package/dist/adapter/ingest/structural-ids.d.ts.map +1 -0
  27. package/dist/adapter/ingest/structural-ids.js +110 -0
  28. package/dist/adapter/ingest/upstream-pin.d.ts +44 -0
  29. package/dist/adapter/ingest/upstream-pin.d.ts.map +1 -0
  30. package/dist/adapter/ingest/upstream-pin.js +47 -0
  31. package/dist/adapter/loop-gate-report.d.ts +34 -0
  32. package/dist/adapter/loop-gate-report.d.ts.map +1 -0
  33. package/dist/adapter/loop-gate-report.js +37 -0
  34. package/dist/adapter/rapier-physics-adapter.d.ts +69 -0
  35. package/dist/adapter/rapier-physics-adapter.d.ts.map +1 -0
  36. package/dist/adapter/rapier-physics-adapter.js +135 -0
  37. package/dist/adapter/root-adapter.d.ts +195 -0
  38. package/dist/adapter/root-adapter.d.ts.map +1 -0
  39. package/dist/adapter/root-adapter.js +25 -0
  40. package/dist/adapter/setup-three-root-adapter.d.ts +87 -0
  41. package/dist/adapter/setup-three-root-adapter.d.ts.map +1 -0
  42. package/dist/adapter/setup-three-root-adapter.js +791 -0
  43. package/dist/adapter/system-adapter.d.ts +453 -0
  44. package/dist/adapter/system-adapter.d.ts.map +1 -0
  45. package/dist/adapter/system-adapter.js +13 -0
  46. package/dist/adapter/transform.d.ts +18 -0
  47. package/dist/adapter/transform.d.ts.map +1 -0
  48. package/dist/adapter/transform.js +1 -0
  49. package/dist/ai/navigation.d.ts +78 -0
  50. package/dist/ai/navigation.d.ts.map +1 -0
  51. package/dist/ai/navigation.js +152 -0
  52. package/dist/animation/anim-graph-types.d.ts +25 -0
  53. package/dist/animation/anim-graph-types.d.ts.map +1 -0
  54. package/dist/animation/anim-graph-types.js +1 -0
  55. package/dist/animation/animation-clock.d.ts +213 -0
  56. package/dist/animation/animation-clock.d.ts.map +1 -0
  57. package/dist/animation/animation-clock.js +301 -0
  58. package/dist/animation/blend-node.d.ts +22 -0
  59. package/dist/animation/blend-node.d.ts.map +1 -0
  60. package/dist/animation/blend-node.js +97 -0
  61. package/dist/animation/camera-ownership.d.ts +249 -0
  62. package/dist/animation/camera-ownership.d.ts.map +1 -0
  63. package/dist/animation/camera-ownership.js +169 -0
  64. package/dist/animation/cinematic-cues.d.ts +200 -0
  65. package/dist/animation/cinematic-cues.d.ts.map +1 -0
  66. package/dist/animation/cinematic-cues.js +213 -0
  67. package/dist/animation/clip-map.d.ts +12 -0
  68. package/dist/animation/clip-map.d.ts.map +1 -0
  69. package/dist/animation/clip-map.js +31 -0
  70. package/dist/animation/cubic-spline-interpolant.d.ts +54 -0
  71. package/dist/animation/cubic-spline-interpolant.d.ts.map +1 -0
  72. package/dist/animation/cubic-spline-interpolant.js +111 -0
  73. package/dist/animation/theatre-clock-binding.d.ts +89 -0
  74. package/dist/animation/theatre-clock-binding.d.ts.map +1 -0
  75. package/dist/animation/theatre-clock-binding.js +29 -0
  76. package/dist/animation/theatre-director.d.ts +277 -0
  77. package/dist/animation/theatre-director.d.ts.map +1 -0
  78. package/dist/animation/theatre-director.js +248 -0
  79. package/dist/animation/theatre-object-binding.d.ts +305 -0
  80. package/dist/animation/theatre-object-binding.d.ts.map +1 -0
  81. package/dist/animation/theatre-object-binding.js +351 -0
  82. package/dist/animation/xstate-animation-binding.d.ts +119 -0
  83. package/dist/animation/xstate-animation-binding.d.ts.map +1 -0
  84. package/dist/animation/xstate-animation-binding.js +349 -0
  85. package/dist/animation/xstate-animation-meta.d.ts +266 -0
  86. package/dist/animation/xstate-animation-meta.d.ts.map +1 -0
  87. package/dist/animation/xstate-animation-meta.js +252 -0
  88. package/dist/asset-formats/camera.d.ts +15 -0
  89. package/dist/asset-formats/camera.d.ts.map +1 -0
  90. package/dist/asset-formats/camera.js +15 -0
  91. package/dist/asset-formats/collider.d.ts +21 -0
  92. package/dist/asset-formats/collider.d.ts.map +1 -0
  93. package/dist/asset-formats/collider.js +53 -0
  94. package/dist/asset-formats/index.d.ts +46 -0
  95. package/dist/asset-formats/index.d.ts.map +1 -0
  96. package/dist/asset-formats/index.js +36 -0
  97. package/dist/asset-formats/instances.d.ts +17 -0
  98. package/dist/asset-formats/instances.d.ts.map +1 -0
  99. package/dist/asset-formats/instances.js +31 -0
  100. package/dist/asset-formats/light.d.ts +21 -0
  101. package/dist/asset-formats/light.d.ts.map +1 -0
  102. package/dist/asset-formats/light.js +35 -0
  103. package/dist/asset-formats/material.d.ts +129 -0
  104. package/dist/asset-formats/material.d.ts.map +1 -0
  105. package/dist/asset-formats/material.js +88 -0
  106. package/dist/asset-formats/mesh.d.ts +22 -0
  107. package/dist/asset-formats/mesh.d.ts.map +1 -0
  108. package/dist/asset-formats/mesh.js +64 -0
  109. package/dist/asset-formats/parse.d.ts +20 -0
  110. package/dist/asset-formats/parse.d.ts.map +1 -0
  111. package/dist/asset-formats/parse.js +34 -0
  112. package/dist/asset-formats/particles.d.ts +1390 -0
  113. package/dist/asset-formats/particles.d.ts.map +1 -0
  114. package/dist/asset-formats/particles.js +319 -0
  115. package/dist/asset-formats/render-env.d.ts +387 -0
  116. package/dist/asset-formats/render-env.d.ts.map +1 -0
  117. package/dist/asset-formats/render-env.js +300 -0
  118. package/dist/asset-formats/tuples.d.ts +12 -0
  119. package/dist/asset-formats/tuples.d.ts.map +1 -0
  120. package/dist/asset-formats/tuples.js +14 -0
  121. package/dist/asset-loaders.d.ts +97 -0
  122. package/dist/asset-loaders.d.ts.map +1 -0
  123. package/dist/asset-loaders.js +209 -0
  124. package/dist/asset-parse-error.d.ts +24 -0
  125. package/dist/asset-parse-error.d.ts.map +1 -0
  126. package/dist/asset-parse-error.js +29 -0
  127. package/dist/asset-registry.d.ts +38 -0
  128. package/dist/asset-registry.d.ts.map +1 -0
  129. package/dist/asset-registry.js +66 -0
  130. package/dist/assets.d.ts +26 -0
  131. package/dist/assets.d.ts.map +1 -0
  132. package/dist/assets.js +55 -0
  133. package/dist/audio/wav-encode.d.ts +38 -0
  134. package/dist/audio/wav-encode.d.ts.map +1 -0
  135. package/dist/audio/wav-encode.js +97 -0
  136. package/dist/canvas-react/engine-bridge.d.ts +45 -0
  137. package/dist/canvas-react/engine-bridge.d.ts.map +1 -0
  138. package/dist/canvas-react/engine-bridge.js +45 -0
  139. package/dist/canvas-react/index.d.ts +42 -0
  140. package/dist/canvas-react/index.d.ts.map +1 -0
  141. package/dist/canvas-react/index.js +41 -0
  142. package/dist/canvas-react/pixi-primitive.d.ts +85 -0
  143. package/dist/canvas-react/pixi-primitive.d.ts.map +1 -0
  144. package/dist/canvas-react/pixi-primitive.js +181 -0
  145. package/dist/canvas-react/pixi-react-adapter.d.ts +71 -0
  146. package/dist/canvas-react/pixi-react-adapter.d.ts.map +1 -0
  147. package/dist/canvas-react/pixi-react-adapter.js +229 -0
  148. package/dist/canvas-react/pixi-react-root-factory.d.ts +56 -0
  149. package/dist/canvas-react/pixi-react-root-factory.d.ts.map +1 -0
  150. package/dist/canvas-react/pixi-react-root-factory.js +73 -0
  151. package/dist/canvas-react/world-context.d.ts +88 -0
  152. package/dist/canvas-react/world-context.d.ts.map +1 -0
  153. package/dist/canvas-react/world-context.js +212 -0
  154. package/dist/config.d.ts +9 -0
  155. package/dist/config.d.ts.map +1 -0
  156. package/dist/config.js +8 -0
  157. package/dist/core/frame-pacing.d.ts +90 -0
  158. package/dist/core/frame-pacing.d.ts.map +1 -0
  159. package/dist/core/frame-pacing.js +89 -0
  160. package/dist/core/game-loop.d.ts +62 -0
  161. package/dist/core/game-loop.d.ts.map +1 -0
  162. package/dist/core/game-loop.js +189 -0
  163. package/dist/core/seeded-random.d.ts +69 -0
  164. package/dist/core/seeded-random.d.ts.map +1 -0
  165. package/dist/core/seeded-random.js +121 -0
  166. package/dist/core/sim-clock.d.ts +199 -0
  167. package/dist/core/sim-clock.d.ts.map +1 -0
  168. package/dist/core/sim-clock.js +291 -0
  169. package/dist/core/system-runner.d.ts +96 -0
  170. package/dist/core/system-runner.d.ts.map +1 -0
  171. package/dist/core/system-runner.js +253 -0
  172. package/dist/core/types.d.ts +111 -0
  173. package/dist/core/types.d.ts.map +1 -0
  174. package/dist/core/types.js +25 -0
  175. package/dist/data/data-asset.d.ts +101 -0
  176. package/dist/data/data-asset.d.ts.map +1 -0
  177. package/dist/data/data-asset.js +122 -0
  178. package/dist/data/data-check-core.d.ts +109 -0
  179. package/dist/data/data-check-core.d.ts.map +1 -0
  180. package/dist/data/data-check-core.js +177 -0
  181. package/dist/data/data-ref.d.ts +79 -0
  182. package/dist/data/data-ref.d.ts.map +1 -0
  183. package/dist/data/data-ref.js +130 -0
  184. package/dist/data/vite-plugin-data.d.ts +79 -0
  185. package/dist/data/vite-plugin-data.d.ts.map +1 -0
  186. package/dist/data/vite-plugin-data.js +217 -0
  187. package/dist/defaults.d.ts +233 -0
  188. package/dist/defaults.d.ts.map +1 -0
  189. package/dist/defaults.js +137 -0
  190. package/dist/dev/chrome-trace.d.ts +45 -0
  191. package/dist/dev/chrome-trace.d.ts.map +1 -0
  192. package/dist/dev/chrome-trace.js +114 -0
  193. package/dist/dev/console-bridge.d.ts +22 -0
  194. package/dist/dev/console-bridge.d.ts.map +1 -0
  195. package/dist/dev/console-bridge.js +71 -0
  196. package/dist/dev/debug-draw.d.ts +24 -0
  197. package/dist/dev/debug-draw.d.ts.map +1 -0
  198. package/dist/dev/debug-draw.js +73 -0
  199. package/dist/dev/instruments.d.ts +133 -0
  200. package/dist/dev/instruments.d.ts.map +1 -0
  201. package/dist/dev/instruments.js +231 -0
  202. package/dist/dev/logger.d.ts +30 -0
  203. package/dist/dev/logger.d.ts.map +1 -0
  204. package/dist/dev/logger.js +90 -0
  205. package/dist/dev/performance-profiler.d.ts +111 -0
  206. package/dist/dev/performance-profiler.d.ts.map +1 -0
  207. package/dist/dev/performance-profiler.js +215 -0
  208. package/dist/dev/render-debug-adapter.d.ts +57 -0
  209. package/dist/dev/render-debug-adapter.d.ts.map +1 -0
  210. package/dist/dev/render-debug-adapter.js +141 -0
  211. package/dist/dev/render-memory.d.ts +53 -0
  212. package/dist/dev/render-memory.d.ts.map +1 -0
  213. package/dist/dev/render-memory.js +190 -0
  214. package/dist/dev/webgl-frame-capture.d.ts +134 -0
  215. package/dist/dev/webgl-frame-capture.d.ts.map +1 -0
  216. package/dist/dev/webgl-frame-capture.js +270 -0
  217. package/dist/dev/webgl-gpu-timer.d.ts +8 -0
  218. package/dist/dev/webgl-gpu-timer.d.ts.map +1 -0
  219. package/dist/dev/webgl-gpu-timer.js +52 -0
  220. package/dist/ecs/scene-index.d.ts +179 -0
  221. package/dist/ecs/scene-index.d.ts.map +1 -0
  222. package/dist/ecs/scene-index.js +331 -0
  223. package/dist/ecs/scene-query.d.ts +6 -0
  224. package/dist/ecs/scene-query.d.ts.map +1 -0
  225. package/dist/ecs/scene-query.js +40 -0
  226. package/dist/ecs/user-data.d.ts +193 -0
  227. package/dist/ecs/user-data.d.ts.map +1 -0
  228. package/dist/ecs/user-data.js +145 -0
  229. package/dist/index.d.ts +35 -0
  230. package/dist/index.d.ts.map +1 -0
  231. package/dist/index.js +29 -0
  232. package/dist/input/input-manager.d.ts +944 -0
  233. package/dist/input/input-manager.d.ts.map +1 -0
  234. package/dist/input/input-manager.js +2209 -0
  235. package/dist/input/input-types.d.ts +174 -0
  236. package/dist/input/input-types.d.ts.map +1 -0
  237. package/dist/input/input-types.js +1 -0
  238. package/dist/input/prompt-labels.d.ts +21 -0
  239. package/dist/input/prompt-labels.d.ts.map +1 -0
  240. package/dist/input/prompt-labels.js +121 -0
  241. package/dist/input/rebind-controller.d.ts +59 -0
  242. package/dist/input/rebind-controller.d.ts.map +1 -0
  243. package/dist/input/rebind-controller.js +85 -0
  244. package/dist/input/schema.d.ts +16 -0
  245. package/dist/input/schema.d.ts.map +1 -0
  246. package/dist/input/schema.js +228 -0
  247. package/dist/loader.d.ts +76 -0
  248. package/dist/loader.d.ts.map +1 -0
  249. package/dist/loader.js +114 -0
  250. package/dist/manifest/editor-port.d.ts +53 -0
  251. package/dist/manifest/editor-port.d.ts.map +1 -0
  252. package/dist/manifest/editor-port.js +67 -0
  253. package/dist/manifest/filename.d.ts +14 -0
  254. package/dist/manifest/filename.d.ts.map +1 -0
  255. package/dist/manifest/filename.js +43 -0
  256. package/dist/manifest/index.d.ts +6 -0
  257. package/dist/manifest/index.d.ts.map +1 -0
  258. package/dist/manifest/index.js +9 -0
  259. package/dist/manifest/load-file.d.ts +7 -0
  260. package/dist/manifest/load-file.d.ts.map +1 -0
  261. package/dist/manifest/load-file.js +23 -0
  262. package/dist/manifest/load.d.ts +161 -0
  263. package/dist/manifest/load.d.ts.map +1 -0
  264. package/dist/manifest/load.js +269 -0
  265. package/dist/manifest/locate.d.ts +24 -0
  266. package/dist/manifest/locate.d.ts.map +1 -0
  267. package/dist/manifest/locate.js +48 -0
  268. package/dist/manifest/schema.d.ts +293 -0
  269. package/dist/manifest/schema.d.ts.map +1 -0
  270. package/dist/manifest/schema.js +633 -0
  271. package/dist/physics/collider-dimensions.d.ts +63 -0
  272. package/dist/physics/collider-dimensions.d.ts.map +1 -0
  273. package/dist/physics/collider-dimensions.js +98 -0
  274. package/dist/physics/collision-system.d.ts +41 -0
  275. package/dist/physics/collision-system.d.ts.map +1 -0
  276. package/dist/physics/collision-system.js +64 -0
  277. package/dist/physics/physics-registry.d.ts +45 -0
  278. package/dist/physics/physics-registry.d.ts.map +1 -0
  279. package/dist/physics/physics-registry.js +65 -0
  280. package/dist/physics/transform-writer.d.ts +16 -0
  281. package/dist/physics/transform-writer.d.ts.map +1 -0
  282. package/dist/physics/transform-writer.js +38 -0
  283. package/dist/pixi/authoring.d.ts +93 -0
  284. package/dist/pixi/authoring.d.ts.map +1 -0
  285. package/dist/pixi/authoring.js +207 -0
  286. package/dist/pixi/index.d.ts +16 -0
  287. package/dist/pixi/index.d.ts.map +1 -0
  288. package/dist/pixi/index.js +15 -0
  289. package/dist/pixi/ingest-iframe.d.ts +82 -0
  290. package/dist/pixi/ingest-iframe.d.ts.map +1 -0
  291. package/dist/pixi/ingest-iframe.js +166 -0
  292. package/dist/pixi/ingest.d.ts +97 -0
  293. package/dist/pixi/ingest.d.ts.map +1 -0
  294. package/dist/pixi/ingest.js +40 -0
  295. package/dist/pixi/physics-registry.d.ts +24 -0
  296. package/dist/pixi/physics-registry.d.ts.map +1 -0
  297. package/dist/pixi/physics-registry.js +38 -0
  298. package/dist/pixi/scene-capture.d.ts +43 -0
  299. package/dist/pixi/scene-capture.d.ts.map +1 -0
  300. package/dist/pixi/scene-capture.js +92 -0
  301. package/dist/pixi/system-adapters.d.ts +16 -0
  302. package/dist/pixi/system-adapters.d.ts.map +1 -0
  303. package/dist/pixi/system-adapters.js +37 -0
  304. package/dist/react/unmanaged-root-detector.d.ts +18 -0
  305. package/dist/react/unmanaged-root-detector.d.ts.map +1 -0
  306. package/dist/react/unmanaged-root-detector.js +70 -0
  307. package/dist/react/use-data.d.ts +60 -0
  308. package/dist/react/use-data.d.ts.map +1 -0
  309. package/dist/react/use-data.js +101 -0
  310. package/dist/react/use-selection.d.ts +54 -0
  311. package/dist/react/use-selection.d.ts.map +1 -0
  312. package/dist/react/use-selection.js +71 -0
  313. package/dist/react/world-state.d.ts +154 -0
  314. package/dist/react/world-state.d.ts.map +1 -0
  315. package/dist/react/world-state.js +220 -0
  316. package/dist/render/auto-batcher.d.ts +34 -0
  317. package/dist/render/auto-batcher.d.ts.map +1 -0
  318. package/dist/render/auto-batcher.js +140 -0
  319. package/dist/render/instance-mesh.d.ts +5 -0
  320. package/dist/render/instance-mesh.d.ts.map +1 -0
  321. package/dist/render/instance-mesh.js +19 -0
  322. package/dist/render/light-camera-factory.d.ts +24 -0
  323. package/dist/render/light-camera-factory.d.ts.map +1 -0
  324. package/dist/render/light-camera-factory.js +71 -0
  325. package/dist/render/lod.d.ts +13 -0
  326. package/dist/render/lod.d.ts.map +1 -0
  327. package/dist/render/lod.js +16 -0
  328. package/dist/render/material-factory.d.ts +15 -0
  329. package/dist/render/material-factory.d.ts.map +1 -0
  330. package/dist/render/material-factory.js +186 -0
  331. package/dist/render/mesh-shadow.d.ts +11 -0
  332. package/dist/render/mesh-shadow.d.ts.map +1 -0
  333. package/dist/render/mesh-shadow.js +19 -0
  334. package/dist/render/particles-factory.d.ts +99 -0
  335. package/dist/render/particles-factory.d.ts.map +1 -0
  336. package/dist/render/particles-factory.js +361 -0
  337. package/dist/render/render-batch-system.d.ts +33 -0
  338. package/dist/render/render-batch-system.d.ts.map +1 -0
  339. package/dist/render/render-batch-system.js +223 -0
  340. package/dist/render/render-features.d.ts +47 -0
  341. package/dist/render/render-features.d.ts.map +1 -0
  342. package/dist/render/render-features.js +105 -0
  343. package/dist/render/render-settings.d.ts +35 -0
  344. package/dist/render/render-settings.d.ts.map +1 -0
  345. package/dist/render/render-settings.js +51 -0
  346. package/dist/render/spark-renderer-lifecycle.d.ts +18 -0
  347. package/dist/render/spark-renderer-lifecycle.d.ts.map +1 -0
  348. package/dist/render/spark-renderer-lifecycle.js +57 -0
  349. package/dist/render/viewport-shading.d.ts +17 -0
  350. package/dist/render/viewport-shading.d.ts.map +1 -0
  351. package/dist/render/viewport-shading.js +87 -0
  352. package/dist/runtime/create-runtime.d.ts +259 -0
  353. package/dist/runtime/create-runtime.d.ts.map +1 -0
  354. package/dist/runtime/create-runtime.js +666 -0
  355. package/dist/runtime/debug-bridge.d.ts +288 -0
  356. package/dist/runtime/debug-bridge.d.ts.map +1 -0
  357. package/dist/runtime/debug-bridge.js +277 -0
  358. package/dist/runtime/debug-registry.d.ts +287 -0
  359. package/dist/runtime/debug-registry.d.ts.map +1 -0
  360. package/dist/runtime/debug-registry.js +528 -0
  361. package/dist/runtime/dev-layers.d.ts +34 -0
  362. package/dist/runtime/dev-layers.d.ts.map +1 -0
  363. package/dist/runtime/dev-layers.js +40 -0
  364. package/dist/runtime/frame-selector-cache.d.ts +41 -0
  365. package/dist/runtime/frame-selector-cache.d.ts.map +1 -0
  366. package/dist/runtime/frame-selector-cache.js +65 -0
  367. package/dist/runtime/game.d.ts +576 -0
  368. package/dist/runtime/game.d.ts.map +1 -0
  369. package/dist/runtime/game.js +1003 -0
  370. package/dist/runtime/gameplay-rng-trap.d.ts +47 -0
  371. package/dist/runtime/gameplay-rng-trap.d.ts.map +1 -0
  372. package/dist/runtime/gameplay-rng-trap.js +95 -0
  373. package/dist/runtime/input-router.d.ts +78 -0
  374. package/dist/runtime/input-router.d.ts.map +1 -0
  375. package/dist/runtime/input-router.js +171 -0
  376. package/dist/runtime/mount-game.d.ts +126 -0
  377. package/dist/runtime/mount-game.d.ts.map +1 -0
  378. package/dist/runtime/mount-game.js +159 -0
  379. package/dist/runtime/mount-manifest.d.ts +174 -0
  380. package/dist/runtime/mount-manifest.d.ts.map +1 -0
  381. package/dist/runtime/mount-manifest.js +304 -0
  382. package/dist/runtime/presentation.d.ts +85 -0
  383. package/dist/runtime/presentation.d.ts.map +1 -0
  384. package/dist/runtime/presentation.js +92 -0
  385. package/dist/runtime/render-audio-control.d.ts +126 -0
  386. package/dist/runtime/render-audio-control.d.ts.map +1 -0
  387. package/dist/runtime/render-audio-control.js +116 -0
  388. package/dist/runtime/render-control.d.ts +347 -0
  389. package/dist/runtime/render-control.d.ts.map +1 -0
  390. package/dist/runtime/render-control.js +317 -0
  391. package/dist/runtime/render-seed.d.ts +56 -0
  392. package/dist/runtime/render-seed.d.ts.map +1 -0
  393. package/dist/runtime/render-seed.js +73 -0
  394. package/dist/runtime/state-bridge.d.ts +60 -0
  395. package/dist/runtime/state-bridge.d.ts.map +1 -0
  396. package/dist/runtime/state-bridge.js +62 -0
  397. package/dist/runtime/types.d.ts +285 -0
  398. package/dist/runtime/types.d.ts.map +1 -0
  399. package/dist/runtime/types.js +1 -0
  400. package/dist/runtime/unexported-game-trap.d.ts +36 -0
  401. package/dist/runtime/unexported-game-trap.d.ts.map +1 -0
  402. package/dist/runtime/unexported-game-trap.js +80 -0
  403. package/dist/setup/setup-audio.d.ts +20 -0
  404. package/dist/setup/setup-audio.d.ts.map +1 -0
  405. package/dist/setup/setup-audio.js +41 -0
  406. package/dist/setup/setup-particles.d.ts +17 -0
  407. package/dist/setup/setup-particles.d.ts.map +1 -0
  408. package/dist/setup/setup-particles.js +16 -0
  409. package/dist/setup/setup-physics.d.ts +25 -0
  410. package/dist/setup/setup-physics.d.ts.map +1 -0
  411. package/dist/setup/setup-physics.js +51 -0
  412. package/dist/setup/setup-renderer.d.ts +82 -0
  413. package/dist/setup/setup-renderer.d.ts.map +1 -0
  414. package/dist/setup/setup-renderer.js +381 -0
  415. package/dist/world3d-react/engine-bridge.d.ts +47 -0
  416. package/dist/world3d-react/engine-bridge.d.ts.map +1 -0
  417. package/dist/world3d-react/engine-bridge.js +48 -0
  418. package/dist/world3d-react/index.d.ts +47 -0
  419. package/dist/world3d-react/index.d.ts.map +1 -0
  420. package/dist/world3d-react/index.js +46 -0
  421. package/dist/world3d-react/r3f-adapter.d.ts +51 -0
  422. package/dist/world3d-react/r3f-adapter.d.ts.map +1 -0
  423. package/dist/world3d-react/r3f-adapter.js +368 -0
  424. package/dist/world3d-react/r3f-root-factory.d.ts +62 -0
  425. package/dist/world3d-react/r3f-root-factory.d.ts.map +1 -0
  426. package/dist/world3d-react/r3f-root-factory.js +79 -0
  427. package/dist/world3d-react/rapier-physics-bridge.d.ts +76 -0
  428. package/dist/world3d-react/rapier-physics-bridge.d.ts.map +1 -0
  429. package/dist/world3d-react/rapier-physics-bridge.js +120 -0
  430. package/dist/world3d-react/renderer-config.d.ts +58 -0
  431. package/dist/world3d-react/renderer-config.d.ts.map +1 -0
  432. package/dist/world3d-react/renderer-config.js +96 -0
  433. package/dist/world3d-react/world-context.d.ts +123 -0
  434. package/dist/world3d-react/world-context.d.ts.map +1 -0
  435. package/dist/world3d-react/world-context.js +204 -0
  436. package/dist-config/config.js +303 -0
  437. package/dist-config/config.js.map +7 -0
  438. package/package.json +14 -3
  439. package/src/adapter/rapier-physics-adapter.ts +77 -34
  440. package/src/config.ts +8 -0
  441. package/src/core/frame-pacing.ts +26 -0
  442. package/src/core/game-loop.ts +4 -3
  443. package/src/dev/instruments.ts +302 -0
  444. package/src/runtime/mount-game.ts +6 -0
  445. package/src/runtime/unexported-game-trap.ts +82 -0
  446. package/src/setup/setup-renderer.ts +2 -0
  447. package/src/world3d-react/index.ts +9 -0
  448. package/src/world3d-react/rapier-physics-bridge.tsx +137 -0
@@ -0,0 +1,331 @@
1
+ /**
2
+ * `createSceneIndex` — the LIVE scene index (punchlist P2, `observe`).
3
+ *
4
+ * `scene-query.ts` answers "which objects carry tag X?" by walking the whole
5
+ * graph on every call, and it tells nobody when the answer changes. This
6
+ * module is the notified half: a tag/entity-id index kept current as objects
7
+ * join and leave the scene, plus the change signals a game needs so it never
8
+ * has to poll.
9
+ *
10
+ * ## The one event primitive is `EventTarget`
11
+ *
12
+ * There is no bus, no emitter class, no `subscribe()` returning a closure.
13
+ * `index.events` is a plain `EventTarget` dispatching `CustomEvent`s, and
14
+ * **unsubscribe is `AbortSignal`** — the platform's own answer:
15
+ *
16
+ * ```ts
17
+ * const ac = new AbortController();
18
+ * ctx.sceneIndex.events.addEventListener(
19
+ * 'tagadded',
20
+ * (e) => console.log((e as SceneIndexEvent<'tagadded'>).detail.object.name),
21
+ * { signal: ac.signal },
22
+ * );
23
+ * ac.abort(); // done — nothing to remember, nothing to leak
24
+ * ```
25
+ *
26
+ * {@link onSceneIndexEvent} is the same call with the detail typed for you.
27
+ * `index.eventsFor(obj)` is the per-object target (Roblox's `inst.Changed`):
28
+ * the same events, already filtered to one object, so a listener that only
29
+ * cares about one entity does not filter by hand.
30
+ *
31
+ * ## How the index stays live: three's own parent events, not a monkeypatch
32
+ *
33
+ * three r155+ dispatches `childadded`/`childremoved` on the **parent** from
34
+ * `Object3D.add`/`remove` (and therefore from `attach`, `clear`,
35
+ * `removeFromParent`, and R3F's reconciler, which all go through those two).
36
+ * The index subscribes to those two events on every object it indexes; on
37
+ * `childadded` it walks the new subtree, indexes it, and subscribes each
38
+ * node, and on `childremoved` it does the inverse. `Object3D.prototype` is
39
+ * NOT patched — nothing in this repo patches a library prototype.
40
+ *
41
+ * Consequences worth knowing:
42
+ *
43
+ * - **The quiet-frame cost is zero.** The index registers no system and runs
44
+ * no per-frame reconcile; it does work only when three tells it something
45
+ * moved. Nothing here ticks.
46
+ * - **Reparenting nets out to one entry.** `parent.add(obj)` removes `obj`
47
+ * from its old parent first, so a move inside the indexed tree fires
48
+ * `childremoved` then `childadded` — unindex, then index. The object ends
49
+ * up indexed exactly once (and a listener sees an `entityremoved` followed
50
+ * by an `entityadded`, which is the truth about what happened).
51
+ * - **Splicing `parent.children` by hand is invisible to the index**, because
52
+ * it is invisible to three as well. Use `add`/`remove`.
53
+ *
54
+ * ## Tags are stored where they always were
55
+ *
56
+ * `addTag`/`removeTag` write the existing `userData['tags']` array, so
57
+ * `queryByTag` keeps returning the truth and nothing has to be migrated. The
58
+ * index is the fast, notified path over the same storage. A game that writes
59
+ * `userData['tags']` by hand gets a stale index — that is not prevented, it is
60
+ * repaired: call {@link SceneIndex.reindex} on the object.
61
+ *
62
+ * ## Attributes
63
+ *
64
+ * `getAttribute`/`setAttribute`/`deleteAttribute` are typed accessors over ONE
65
+ * new reserved userData key, `attributes` (registered in `ecs/user-data.ts`,
66
+ * `Record<string, string | number | boolean>`). They emit `attributechanged`
67
+ * only when the value actually changes, so a re-set of the same value is
68
+ * silent.
69
+ *
70
+ * ## What this deliberately does NOT do
71
+ *
72
+ * - **No property-level `Changed` on transforms.** three does not notify on
73
+ * `position.set(...)`; faking it means diffing every transform every frame,
74
+ * and a signal that is really a per-frame poll is worse than no signal —
75
+ * it hides its own cost. Read the transform when you need it, or drive the
76
+ * change from the code that made it.
77
+ * - **No `Touched`.** Contact/trigger events are Rapier's, dispatched through
78
+ * `ctx.collisions.onCollision`. A second path would be a second truth.
79
+ * - **No 2D index.** This module indexes a three graph only.
80
+ */
81
+ import { deleteUserData, getUserData, setUserData } from './user-data';
82
+ /**
83
+ * `addEventListener` with the detail typed — the ONLY convenience over the
84
+ * platform call, and it returns nothing on purpose: unsubscribe stays
85
+ * `AbortSignal` (`{ signal }`), never a returned closure.
86
+ */
87
+ export function onSceneIndexEvent(target, type, listener, options) {
88
+ target.addEventListener(type, (event) => {
89
+ const custom = event;
90
+ listener(custom.detail, custom);
91
+ }, options);
92
+ }
93
+ function readTags(obj) {
94
+ const tags = getUserData(obj, 'tags');
95
+ return Array.isArray(tags) ? tags : [];
96
+ }
97
+ function readAttributes(obj) {
98
+ const attributes = getUserData(obj, 'attributes');
99
+ return attributes && typeof attributes === 'object' ? attributes : undefined;
100
+ }
101
+ /**
102
+ * Build a live index over `root` and everything currently under it. One index
103
+ * per three root; the root adapter creates it and exposes it as
104
+ * `ctx.sceneIndex`.
105
+ */
106
+ export function createSceneIndex(root) {
107
+ const events = new EventTarget();
108
+ // Weak on purpose: the per-object target exists only while something else
109
+ // still references the object. The index keeps NO map from target back to
110
+ // object, so a removed-and-forgotten object can be collected with its target.
111
+ const objectTargets = new WeakMap();
112
+ const indexed = new Set();
113
+ const tagged = new Map();
114
+ // Arrays, not single values: a project that mints the same entityId twice
115
+ // must not blind `byEntityId` for the survivor when one of them is removed.
116
+ const byId = new Map();
117
+ // The tag/id snapshot each object was indexed under, so unindexing (and
118
+ // `reindex`) can undo exactly what indexing did even if `userData` has been
119
+ // rewritten by hand in between.
120
+ const indexedTags = new WeakMap();
121
+ const indexedIds = new WeakMap();
122
+ let disposed = false;
123
+ function emit(type, detail) {
124
+ // Two distinct CustomEvent instances: one Event object cannot carry two
125
+ // `target`s, and re-dispatching a dispatched event is a spec footgun.
126
+ events.dispatchEvent(new CustomEvent(type, { detail }));
127
+ const perObject = objectTargets.get(detail.object);
128
+ if (perObject)
129
+ perObject.dispatchEvent(new CustomEvent(type, { detail }));
130
+ }
131
+ function addToTagIndex(obj, tag) {
132
+ let set = tagged.get(tag);
133
+ if (!set) {
134
+ set = new Set();
135
+ tagged.set(tag, set);
136
+ }
137
+ set.add(obj);
138
+ }
139
+ function removeFromTagIndex(obj, tag) {
140
+ const set = tagged.get(tag);
141
+ if (!set)
142
+ return;
143
+ set.delete(obj);
144
+ if (set.size === 0)
145
+ tagged.delete(tag);
146
+ }
147
+ function addToIdIndex(obj, id) {
148
+ const list = byId.get(id);
149
+ if (list) {
150
+ if (!list.includes(obj))
151
+ list.push(obj);
152
+ }
153
+ else {
154
+ byId.set(id, [obj]);
155
+ }
156
+ }
157
+ function removeFromIdIndex(obj, id) {
158
+ const list = byId.get(id);
159
+ if (!list)
160
+ return;
161
+ const at = list.indexOf(obj);
162
+ if (at !== -1)
163
+ list.splice(at, 1);
164
+ if (list.length === 0)
165
+ byId.delete(id);
166
+ }
167
+ const onChildAdded = (event) => {
168
+ indexSubtree(event.child);
169
+ };
170
+ const onChildRemoved = (event) => {
171
+ unindexSubtree(event.child);
172
+ };
173
+ /** Point the tag entries at whatever `userData['tags']` says right now,
174
+ * undoing whatever the object was previously indexed under. */
175
+ function syncTags(obj) {
176
+ for (const tag of indexedTags.get(obj) ?? [])
177
+ removeFromTagIndex(obj, tag);
178
+ const tags = [...new Set(readTags(obj))];
179
+ indexedTags.set(obj, tags);
180
+ for (const tag of tags)
181
+ addToTagIndex(obj, tag);
182
+ }
183
+ /** Same, for the entity-id entry. */
184
+ function syncId(obj) {
185
+ const previous = indexedIds.get(obj);
186
+ if (previous !== undefined)
187
+ removeFromIdIndex(obj, previous);
188
+ indexedIds.delete(obj);
189
+ const id = getUserData(obj, 'entityId');
190
+ if (typeof id === 'string' && id !== '') {
191
+ indexedIds.set(obj, id);
192
+ addToIdIndex(obj, id);
193
+ }
194
+ }
195
+ function indexOne(obj) {
196
+ if (indexed.has(obj))
197
+ return;
198
+ indexed.add(obj);
199
+ // three's EventDispatcher de-dupes an identical (type, listener) pair, so
200
+ // this is idempotent even if an object somehow arrives twice.
201
+ obj.addEventListener('childadded', onChildAdded);
202
+ obj.addEventListener('childremoved', onChildRemoved);
203
+ syncTags(obj);
204
+ syncId(obj);
205
+ emit('entityadded', { object: obj });
206
+ }
207
+ function unindexOne(obj) {
208
+ if (!indexed.has(obj))
209
+ return;
210
+ indexed.delete(obj);
211
+ obj.removeEventListener('childadded', onChildAdded);
212
+ obj.removeEventListener('childremoved', onChildRemoved);
213
+ for (const tag of indexedTags.get(obj) ?? [])
214
+ removeFromTagIndex(obj, tag);
215
+ indexedTags.delete(obj);
216
+ const id = indexedIds.get(obj);
217
+ if (id !== undefined) {
218
+ removeFromIdIndex(obj, id);
219
+ indexedIds.delete(obj);
220
+ }
221
+ emit('entityremoved', { object: obj });
222
+ }
223
+ function indexSubtree(subtreeRoot) {
224
+ if (disposed)
225
+ return;
226
+ subtreeRoot.traverse(indexOne);
227
+ }
228
+ function unindexSubtree(subtreeRoot) {
229
+ if (disposed)
230
+ return;
231
+ // `traverse` still works on a detached subtree: `remove` only broke the
232
+ // link to the parent, the children below are intact.
233
+ subtreeRoot.traverse(unindexOne);
234
+ }
235
+ indexSubtree(root);
236
+ return {
237
+ events,
238
+ eventsFor(obj) {
239
+ let target = objectTargets.get(obj);
240
+ if (!target) {
241
+ target = new EventTarget();
242
+ objectTargets.set(obj, target);
243
+ }
244
+ return target;
245
+ },
246
+ byTag(tag) {
247
+ const set = tagged.get(tag);
248
+ return set ? [...set] : [];
249
+ },
250
+ byEntityId(id) {
251
+ return byId.get(id)?.[0];
252
+ },
253
+ has(obj) {
254
+ return indexed.has(obj);
255
+ },
256
+ addTag(obj, tag) {
257
+ const tags = readTags(obj);
258
+ if (tags.includes(tag))
259
+ return;
260
+ setUserData(obj, 'tags', [...tags, tag]);
261
+ if (indexed.has(obj)) {
262
+ indexedTags.set(obj, [...(indexedTags.get(obj) ?? []), tag]);
263
+ addToTagIndex(obj, tag);
264
+ }
265
+ emit('tagadded', { object: obj, tag });
266
+ },
267
+ removeTag(obj, tag) {
268
+ const tags = readTags(obj);
269
+ if (!tags.includes(tag))
270
+ return;
271
+ setUserData(obj, 'tags', tags.filter((t) => t !== tag));
272
+ if (indexed.has(obj)) {
273
+ indexedTags.set(obj, (indexedTags.get(obj) ?? []).filter((t) => t !== tag));
274
+ removeFromTagIndex(obj, tag);
275
+ }
276
+ emit('tagremoved', { object: obj, tag });
277
+ },
278
+ hasTag(obj, tag) {
279
+ return readTags(obj).includes(tag);
280
+ },
281
+ getAttribute(obj, name) {
282
+ return readAttributes(obj)?.[name];
283
+ },
284
+ setAttribute(obj, name, value) {
285
+ const attributes = readAttributes(obj);
286
+ const previous = attributes?.[name];
287
+ if (previous === value)
288
+ return;
289
+ if (attributes)
290
+ attributes[name] = value;
291
+ else
292
+ setUserData(obj, 'attributes', { [name]: value });
293
+ emit('attributechanged', { object: obj, name, value, previous });
294
+ },
295
+ deleteAttribute(obj, name) {
296
+ const attributes = readAttributes(obj);
297
+ if (!attributes || !(name in attributes))
298
+ return;
299
+ const previous = attributes[name];
300
+ delete attributes[name];
301
+ if (Object.keys(attributes).length === 0)
302
+ deleteUserData(obj, 'attributes');
303
+ emit('attributechanged', { object: obj, name, value: undefined, previous });
304
+ },
305
+ reindex(obj) {
306
+ if (disposed)
307
+ return;
308
+ obj.traverse((node) => {
309
+ if (indexed.has(node)) {
310
+ syncTags(node);
311
+ syncId(node);
312
+ }
313
+ else {
314
+ indexOne(node);
315
+ }
316
+ });
317
+ },
318
+ dispose() {
319
+ if (disposed)
320
+ return;
321
+ disposed = true;
322
+ for (const obj of indexed) {
323
+ obj.removeEventListener('childadded', onChildAdded);
324
+ obj.removeEventListener('childremoved', onChildRemoved);
325
+ }
326
+ indexed.clear();
327
+ tagged.clear();
328
+ byId.clear();
329
+ },
330
+ };
331
+ }
@@ -0,0 +1,6 @@
1
+ import type * as THREE from 'three';
2
+ /** All objects in the graph carrying the given tag (depth-first, document order). */
3
+ export declare function queryByTag(root: THREE.Object3D, tag: string): THREE.Object3D[];
4
+ /** All objects in the graph with the given name (depth-first, document order). */
5
+ export declare function queryByName(root: THREE.Object3D, name: string): THREE.Object3D[];
6
+ //# sourceMappingURL=scene-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene-query.d.ts","sourceRoot":"","sources":["../../src/ecs/scene-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AA0BpC,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAM9E;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAMhF"}
@@ -0,0 +1,40 @@
1
+ import { getUserData } from './user-data';
2
+ /**
3
+ * Runtime queries over a loaded THREE scene graph (P1.6d).
4
+ *
5
+ * These helpers walk a THREE.Object3D graph and read entity metadata off
6
+ * `userData`, so gameplay code can find objects by tag or name without
7
+ * bookkeeping its own indexes.
8
+ *
9
+ * Canonical metadata locations:
10
+ * - tags: `userData['tags']` (string[])
11
+ * - name: `Object3D.name`
12
+ *
13
+ * These are one-shot walks that notify nobody. For a repeated query, or for a
14
+ * signal when the answer changes, use the LIVE index instead —
15
+ * `ctx.sceneIndex` (`./scene-index.ts`): it reads the same `userData['tags']`
16
+ * storage, answers without traversing, and dispatches `entityadded`/
17
+ * `entityremoved`/`tagadded`/`tagremoved` on an `EventTarget`.
18
+ */
19
+ function getTags(obj) {
20
+ const direct = getUserData(obj, 'tags');
21
+ return Array.isArray(direct) ? direct : [];
22
+ }
23
+ /** All objects in the graph carrying the given tag (depth-first, document order). */
24
+ export function queryByTag(root, tag) {
25
+ const matches = [];
26
+ root.traverse((obj) => {
27
+ if (getTags(obj).includes(tag))
28
+ matches.push(obj);
29
+ });
30
+ return matches;
31
+ }
32
+ /** All objects in the graph with the given name (depth-first, document order). */
33
+ export function queryByName(root, name) {
34
+ const matches = [];
35
+ root.traverse((obj) => {
36
+ if (obj.name === name)
37
+ matches.push(obj);
38
+ });
39
+ return matches;
40
+ }
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Typed registry for `Object3D.userData` keys used by the engine and editor.
3
+ *
4
+ * Three.js lets any code stash arbitrary values on `object.userData`, and over
5
+ * time the engine + editor accumulated ~20 stringly-typed keys that together
6
+ * form a *parallel object model* — meaning carried entirely in undocumented
7
+ * string literals. This module is the ONE documented place that lists every
8
+ * such key, its value type, and what it means. All engine/editor-internal
9
+ * `userData` access for these keys must go through {@link getUserData} /
10
+ * {@link setUserData} / {@link hasUserData} / {@link deleteUserData} so the key
11
+ * strings live in exactly one place and are type-checked at every call site.
12
+ *
13
+ * NOTE: This covers engine/editor *internal* keys only. User game code in the
14
+ * example template may stash its own ad-hoc keys; those are out of scope.
15
+ *
16
+ * ## Key reference
17
+ *
18
+ * Serialization / identity (load-bearing — editor identity):
19
+ * - `entityId` — the entity's stable string id. Presence also marks an
20
+ * Object3D as a "real" entity (vs editor helper/env object).
21
+ *
22
+ * Runtime scene-query metadata (read by `scene-query.ts` and `scene-index.ts`):
23
+ * - `tags` — string[] tags for `queryByTag` and the live index.
24
+ * - `attributes` — per-object `Record<string, string|number|boolean>`
25
+ * of game-defined attributes (P2 `observe`). Written
26
+ * through `SceneIndex.setAttribute`, which emits an
27
+ * `attributechanged` signal; JSON-simple values only,
28
+ * so an attribute survives serialization unchanged.
29
+ *
30
+ * Runtime gameplay metadata:
31
+ * - `forward` — `[x,y,z]` model-space visual forward exported as
32
+ * ordinary glTF extras for asset-facing validation.
33
+ * - `navRole` — `'walkable' | 'obstacle'` navmesh role; collected at runtime.
34
+ * - `pivot` — `[x,y,z]` local-space pivot for rotate/scale-around-pivot.
35
+ * - `splineCurve` — resolved THREE curve for a spline-following object.
36
+ * - `_camera` — THREE.Camera owned by a camera entity (collected on load).
37
+ * - `_particleSystem` — three.quarks ParticleSystem (scene-sync registration + census).
38
+ * - `gaussianSplat` — native Spark splat metadata used for renderer discovery,
39
+ * inspector facts, bounds, and deterministic disposal.
40
+ *
41
+ * Animation (load-bearing — ED5 disposal contract):
42
+ * - `_animMixer` — THREE.AnimationMixer driving this subtree's clips.
43
+ * - `_animClips` — Map<string, AnimationClip> discovered on the GLTF (E5 —
44
+ * lets game code build its own XState-driven
45
+ * binding via `bindXStateAnimation` over the SAME
46
+ * mixer; see xstate-animation-binding.ts).
47
+ * - `_availableClips` — string[] of clip names discovered on the GLTF
48
+ * (inspector dropdown; same names as `_animClips`' keys).
49
+ * - `_xstateAnimation` — live native XState/Three binding exposed for
50
+ * play-mode inspection; removed when binding disposes.
51
+ *
52
+ * Disposal contract:
53
+ * - `__sharedGeometry` — `true` when a mesh's geometry is shared/cached and MUST
54
+ * NOT be disposed by per-object cleanup (P0.2 contract).
55
+ *
56
+ * Editor shading overrides (editor-only, see `scene-sync.ts`):
57
+ * - `__shadeOrig` — original material(s) stashed before a shading override.
58
+ * - `__shadeUnlit` — generated unlit material(s) for the unlit view mode.
59
+ *
60
+ * Unmodified-game ingestion (editor-only, see `editor/src/ingest/`):
61
+ * - `__ingest` — `true` on every Object3D minted by ingestion; routes
62
+ * edits to live mutation.
63
+ * - `__ingestNextId` — monotonic id counter stashed on the captured Scene
64
+ * root so re-reflects keep minting unique ids.
65
+ *
66
+ * Editor scene-graph tagging (editor-only):
67
+ * - `engineInternal` — `true` on engine-owned infrastructure in the game scene
68
+ * (particle BatchedRenderer, debug-draw + its subtree).
69
+ * The editor's play-mode hierarchy skips these so they
70
+ * don't show up as selectable "entities".
71
+ * - `authoringRoot` — explicit opt-in for a runtime descendant to become
72
+ * its own authoring object instead of a part of the
73
+ * nearest ancestor owner.
74
+ * - `authoringInstance` — source OID of the custom-component callsite that
75
+ * rendered this existing Object3D. Used to group
76
+ * implementation parts without adding wrappers.
77
+ * - `authoringLabel` — authored literal name (or component tag fallback)
78
+ * for that source-backed component instance.
79
+ * - `editorHelper` — `true` for editor-only helper objects (gizmos, wireframes).
80
+ * - `editorHelperType` — which kind of helper (lights/particles/pivot/navmesh/...).
81
+ * - `editorIcon` — `true` for editor billboard icon sprites.
82
+ * - `skeletonVisible` — per-entity editor preference for its bone overlay.
83
+ * - `skeletonEnabled` — resolved visibility preference on a skeleton helper.
84
+ * - `envObject` — `true` for environment objects (ambient light, etc.).
85
+ * - `splineControlPoint` — index of a spline control-point drag handle.
86
+ * - `vcDirIdx` — view-cube face direction index (0=+X,1=-X,2=+Y,...).
87
+ */
88
+ import type * as THREE from 'three';
89
+ import type { ParticleSystem } from 'three.quarks';
90
+ import type { XStateAnimationBinding } from '../animation/xstate-animation-binding';
91
+ /** The kinds of editor helper objects tagged via `editorHelperType`. */
92
+ export type EditorHelperType = 'lights' | 'cameras' | 'audio' | 'colliders' | 'joints' | 'lod' | 'splines' | 'particles' | 'particle-shape' | 'pivot' | 'navmesh' | 'skeletons';
93
+ /**
94
+ * Maps each canonical accessor name to its value type. This is the single
95
+ * source of truth for what every known `userData` key holds.
96
+ */
97
+ export interface UserDataSchema {
98
+ entityId: string;
99
+ forward: [number, number, number];
100
+ tags: string[];
101
+ attributes: Record<string, string | number | boolean>;
102
+ navRole: 'walkable' | 'obstacle';
103
+ pivot: [number, number, number];
104
+ splineCurve: THREE.Curve<THREE.Vector3>;
105
+ splineControlPoint: number;
106
+ _camera: THREE.Camera;
107
+ _particleSystem: ParticleSystem;
108
+ gaussianSplat: {
109
+ src: string;
110
+ numSplats: number;
111
+ };
112
+ _animMixer: THREE.AnimationMixer;
113
+ _animClips: Map<string, THREE.AnimationClip>;
114
+ _availableClips: string[];
115
+ _xstateAnimation: XStateAnimationBinding;
116
+ __sharedGeometry: boolean;
117
+ __shadeOrig: THREE.Material | THREE.Material[];
118
+ __shadeUnlit: THREE.Material[];
119
+ __ingest: boolean;
120
+ __ingestNextId: number;
121
+ engineInternal: boolean;
122
+ authoringRoot: boolean;
123
+ authoringInstance: string;
124
+ authoringLabel: string;
125
+ editorHelper: boolean;
126
+ editorHelperType: EditorHelperType;
127
+ editorIcon: boolean;
128
+ skeletonVisible: boolean;
129
+ skeletonEnabled: boolean;
130
+ envObject: boolean;
131
+ vcDirIdx: number;
132
+ /** W1a navmesh path-probe preview polyline: the routed waypoints, mirrored
133
+ * onto the preview line Object3D so e2e can read the path back from the
134
+ * scene graph (`EditorViewport.setNavPathPreview`). */
135
+ navPathPoints: {
136
+ x: number;
137
+ y: number;
138
+ z: number;
139
+ }[];
140
+ }
141
+ /** Any key in the typed registry. */
142
+ export type UserDataKey = keyof UserDataSchema;
143
+ /**
144
+ * Canonical name → literal `userData` string key. The accessor names match the
145
+ * raw string keys 1:1 (this is the documented set referenced by the AC), so the
146
+ * literal strings appear in exactly this one place.
147
+ */
148
+ export declare const UserDataKeys: {
149
+ readonly entityId: "entityId";
150
+ readonly forward: "forward";
151
+ readonly tags: "tags";
152
+ readonly attributes: "attributes";
153
+ readonly navRole: "navRole";
154
+ readonly pivot: "pivot";
155
+ readonly splineCurve: "splineCurve";
156
+ readonly splineControlPoint: "splineControlPoint";
157
+ readonly _camera: "_camera";
158
+ readonly _particleSystem: "_particleSystem";
159
+ readonly gaussianSplat: "gaussianSplat";
160
+ readonly _animMixer: "_animMixer";
161
+ readonly _animClips: "_animClips";
162
+ readonly _availableClips: "_availableClips";
163
+ readonly _xstateAnimation: "_xstateAnimation";
164
+ readonly __sharedGeometry: "__sharedGeometry";
165
+ readonly __shadeOrig: "__shadeOrig";
166
+ readonly __shadeUnlit: "__shadeUnlit";
167
+ readonly __ingest: "__ingest";
168
+ readonly __ingestNextId: "__ingestNextId";
169
+ readonly engineInternal: "engineInternal";
170
+ readonly authoringRoot: "authoringRoot";
171
+ readonly authoringInstance: "authoringInstance";
172
+ readonly authoringLabel: "authoringLabel";
173
+ readonly editorHelper: "editorHelper";
174
+ readonly editorHelperType: "editorHelperType";
175
+ readonly editorIcon: "editorIcon";
176
+ readonly skeletonVisible: "skeletonVisible";
177
+ readonly skeletonEnabled: "skeletonEnabled";
178
+ readonly envObject: "envObject";
179
+ readonly vcDirIdx: "vcDirIdx";
180
+ readonly navPathPoints: "navPathPoints";
181
+ };
182
+ /**
183
+ * Read a typed `userData` value. Returns `undefined` when the key is unset or
184
+ * when `obj` is nullish (so call sites can pass an optionally-resolved object).
185
+ */
186
+ export declare function getUserData<K extends UserDataKey>(obj: THREE.Object3D | null | undefined, key: K): UserDataSchema[K] | undefined;
187
+ /** Write a typed `userData` value. */
188
+ export declare function setUserData<K extends UserDataKey>(obj: THREE.Object3D, key: K, value: UserDataSchema[K]): void;
189
+ /** True when `key` is set (not `undefined`) on the object's `userData`. */
190
+ export declare function hasUserData(obj: THREE.Object3D | null | undefined, key: UserDataKey): boolean;
191
+ /** Remove a `userData` key. */
192
+ export declare function deleteUserData(obj: THREE.Object3D, key: UserDataKey): void;
193
+ //# sourceMappingURL=user-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-data.d.ts","sourceRoot":"","sources":["../../src/ecs/user-data.ts"],"names":[],"mappings":"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"}