@vgai/engine 0.5.0 → 0.5.2

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 (538) hide show
  1. package/package.json +1 -1
  2. package/schemas/engine-capabilities.json +4 -4
  3. package/schemas/vgai-game.schema.json +2 -2
  4. package/src/adapter/authoring.ts +42 -0
  5. package/src/adapter/index.ts +3 -0
  6. package/src/adapter/ingest/overlay-apply.ts +50 -6
  7. package/src/adapter/ingest/scene-capture.ts +51 -2
  8. package/src/adapter/vgai-scene-game-adapter.ts +24 -0
  9. package/src/manifest/schema.ts +7 -3
  10. package/src/runtime/create-runtime.ts +97 -0
  11. package/src/runtime/game.ts +11 -1
  12. package/src/scene/asset-ref-check.ts +1 -1
  13. package/src/scene/scene-loader.ts +2 -2
  14. package/src/scene/user-data.ts +18 -0
  15. package/src/world3d-react/behavior.tsx +19 -11
  16. package/src/world3d-react/r3f-adapter.tsx +8 -0
  17. package/dist/adapter/adapter-surface.d.ts +0 -30
  18. package/dist/adapter/adapter-surface.d.ts.map +0 -1
  19. package/dist/adapter/adapter-surface.js +0 -18
  20. package/dist/adapter/authoring.d.ts +0 -461
  21. package/dist/adapter/authoring.d.ts.map +0 -1
  22. package/dist/adapter/authoring.js +0 -22
  23. package/dist/adapter/colyseus-networking-adapter.d.ts +0 -43
  24. package/dist/adapter/colyseus-networking-adapter.d.ts.map +0 -1
  25. package/dist/adapter/colyseus-networking-adapter.js +0 -38
  26. package/dist/adapter/first-party-systems.d.ts +0 -38
  27. package/dist/adapter/first-party-systems.d.ts.map +0 -1
  28. package/dist/adapter/first-party-systems.js +0 -77
  29. package/dist/adapter/game-adapter.d.ts +0 -133
  30. package/dist/adapter/game-adapter.d.ts.map +0 -1
  31. package/dist/adapter/game-adapter.js +0 -10
  32. package/dist/adapter/host-context.d.ts +0 -71
  33. package/dist/adapter/host-context.d.ts.map +0 -1
  34. package/dist/adapter/host-context.js +0 -16
  35. package/dist/adapter/index.d.ts +0 -22
  36. package/dist/adapter/index.d.ts.map +0 -1
  37. package/dist/adapter/index.js +0 -15
  38. package/dist/adapter/ingest/game-contract.d.ts +0 -53
  39. package/dist/adapter/ingest/game-contract.d.ts.map +0 -1
  40. package/dist/adapter/ingest/game-contract.js +0 -30
  41. package/dist/adapter/ingest/overlay-applier.d.ts +0 -118
  42. package/dist/adapter/ingest/overlay-applier.d.ts.map +0 -1
  43. package/dist/adapter/ingest/overlay-applier.js +0 -132
  44. package/dist/adapter/ingest/overlay-apply.d.ts +0 -60
  45. package/dist/adapter/ingest/overlay-apply.d.ts.map +0 -1
  46. package/dist/adapter/ingest/overlay-apply.js +0 -101
  47. package/dist/adapter/ingest/overlay-file.d.ts +0 -79
  48. package/dist/adapter/ingest/overlay-file.d.ts.map +0 -1
  49. package/dist/adapter/ingest/overlay-file.js +0 -66
  50. package/dist/adapter/ingest/overlay-report.d.ts +0 -113
  51. package/dist/adapter/ingest/overlay-report.d.ts.map +0 -1
  52. package/dist/adapter/ingest/overlay-report.js +0 -103
  53. package/dist/adapter/ingest/scene-capture.d.ts +0 -97
  54. package/dist/adapter/ingest/scene-capture.d.ts.map +0 -1
  55. package/dist/adapter/ingest/scene-capture.js +0 -248
  56. package/dist/adapter/ingest/upstream-pin.d.ts +0 -47
  57. package/dist/adapter/ingest/upstream-pin.d.ts.map +0 -1
  58. package/dist/adapter/ingest/upstream-pin.js +0 -50
  59. package/dist/adapter/loop-gate-report.d.ts +0 -34
  60. package/dist/adapter/loop-gate-report.d.ts.map +0 -1
  61. package/dist/adapter/loop-gate-report.js +0 -37
  62. package/dist/adapter/rapier-physics-adapter.d.ts +0 -12
  63. package/dist/adapter/rapier-physics-adapter.d.ts.map +0 -1
  64. package/dist/adapter/rapier-physics-adapter.js +0 -46
  65. package/dist/adapter/system-adapter.d.ts +0 -206
  66. package/dist/adapter/system-adapter.d.ts.map +0 -1
  67. package/dist/adapter/system-adapter.js +0 -13
  68. package/dist/adapter/transform.d.ts +0 -18
  69. package/dist/adapter/transform.d.ts.map +0 -1
  70. package/dist/adapter/transform.js +0 -1
  71. package/dist/adapter/vgai-scene-game-adapter.d.ts +0 -108
  72. package/dist/adapter/vgai-scene-game-adapter.d.ts.map +0 -1
  73. package/dist/adapter/vgai-scene-game-adapter.js +0 -762
  74. package/dist/ai/navigation.d.ts +0 -64
  75. package/dist/ai/navigation.d.ts.map +0 -1
  76. package/dist/ai/navigation.js +0 -133
  77. package/dist/animation/anim-graph-types.d.ts +0 -25
  78. package/dist/animation/anim-graph-types.d.ts.map +0 -1
  79. package/dist/animation/anim-graph-types.js +0 -1
  80. package/dist/animation/animation-clock.d.ts +0 -213
  81. package/dist/animation/animation-clock.d.ts.map +0 -1
  82. package/dist/animation/animation-clock.js +0 -301
  83. package/dist/animation/blend-node.d.ts +0 -22
  84. package/dist/animation/blend-node.d.ts.map +0 -1
  85. package/dist/animation/blend-node.js +0 -97
  86. package/dist/animation/camera-ownership.d.ts +0 -250
  87. package/dist/animation/camera-ownership.d.ts.map +0 -1
  88. package/dist/animation/camera-ownership.js +0 -169
  89. package/dist/animation/cinematic-cues.d.ts +0 -200
  90. package/dist/animation/cinematic-cues.d.ts.map +0 -1
  91. package/dist/animation/cinematic-cues.js +0 -213
  92. package/dist/animation/clip-map.d.ts +0 -12
  93. package/dist/animation/clip-map.d.ts.map +0 -1
  94. package/dist/animation/clip-map.js +0 -37
  95. package/dist/animation/gsap-registration.d.ts +0 -119
  96. package/dist/animation/gsap-registration.d.ts.map +0 -1
  97. package/dist/animation/gsap-registration.js +0 -92
  98. package/dist/animation/theatre-clock-binding.d.ts +0 -89
  99. package/dist/animation/theatre-clock-binding.d.ts.map +0 -1
  100. package/dist/animation/theatre-clock-binding.js +0 -29
  101. package/dist/animation/theatre-director.d.ts +0 -242
  102. package/dist/animation/theatre-director.d.ts.map +0 -1
  103. package/dist/animation/theatre-director.js +0 -235
  104. package/dist/animation/theatre-object-binding.d.ts +0 -305
  105. package/dist/animation/theatre-object-binding.d.ts.map +0 -1
  106. package/dist/animation/theatre-object-binding.js +0 -351
  107. package/dist/animation/xstate-animation-binding.d.ts +0 -56
  108. package/dist/animation/xstate-animation-binding.d.ts.map +0 -1
  109. package/dist/animation/xstate-animation-binding.js +0 -331
  110. package/dist/animation/xstate-animation-meta.d.ts +0 -266
  111. package/dist/animation/xstate-animation-meta.d.ts.map +0 -1
  112. package/dist/animation/xstate-animation-meta.js +0 -252
  113. package/dist/assets.d.ts +0 -26
  114. package/dist/assets.d.ts.map +0 -1
  115. package/dist/assets.js +0 -55
  116. package/dist/audio/index.d.ts +0 -4
  117. package/dist/audio/index.d.ts.map +0 -1
  118. package/dist/audio/index.js +0 -24
  119. package/dist/audio/tone-clock-binding.d.ts +0 -75
  120. package/dist/audio/tone-clock-binding.d.ts.map +0 -1
  121. package/dist/audio/tone-clock-binding.js +0 -29
  122. package/dist/audio/tone-context.d.ts +0 -114
  123. package/dist/audio/tone-context.d.ts.map +0 -1
  124. package/dist/audio/tone-context.js +0 -39
  125. package/dist/audio/tone-offline-render.d.ts +0 -90
  126. package/dist/audio/tone-offline-render.d.ts.map +0 -1
  127. package/dist/audio/tone-offline-render.js +0 -56
  128. package/dist/audio/wav-encode.d.ts +0 -38
  129. package/dist/audio/wav-encode.d.ts.map +0 -1
  130. package/dist/audio/wav-encode.js +0 -97
  131. package/dist/character/cloth-sim.d.ts +0 -179
  132. package/dist/character/cloth-sim.d.ts.map +0 -1
  133. package/dist/character/cloth-sim.js +0 -334
  134. package/dist/character/spring-chain.d.ts +0 -135
  135. package/dist/character/spring-chain.d.ts.map +0 -1
  136. package/dist/character/spring-chain.js +0 -165
  137. package/dist/core/game-loop.d.ts +0 -42
  138. package/dist/core/game-loop.d.ts.map +0 -1
  139. package/dist/core/game-loop.js +0 -167
  140. package/dist/core/seeded-random.d.ts +0 -69
  141. package/dist/core/seeded-random.d.ts.map +0 -1
  142. package/dist/core/seeded-random.js +0 -121
  143. package/dist/core/system-runner.d.ts +0 -120
  144. package/dist/core/system-runner.d.ts.map +0 -1
  145. package/dist/core/system-runner.js +0 -297
  146. package/dist/core/types.d.ts +0 -92
  147. package/dist/core/types.d.ts.map +0 -1
  148. package/dist/core/types.js +0 -25
  149. package/dist/data/data-asset.d.ts +0 -101
  150. package/dist/data/data-asset.d.ts.map +0 -1
  151. package/dist/data/data-asset.js +0 -122
  152. package/dist/data/data-check-core.d.ts +0 -110
  153. package/dist/data/data-check-core.d.ts.map +0 -1
  154. package/dist/data/data-check-core.js +0 -178
  155. package/dist/data/data-ref.d.ts +0 -79
  156. package/dist/data/data-ref.d.ts.map +0 -1
  157. package/dist/data/data-ref.js +0 -130
  158. package/dist/data/vite-plugin-data.d.ts +0 -79
  159. package/dist/data/vite-plugin-data.d.ts.map +0 -1
  160. package/dist/data/vite-plugin-data.js +0 -217
  161. package/dist/dev/console-bridge.d.ts +0 -22
  162. package/dist/dev/console-bridge.d.ts.map +0 -1
  163. package/dist/dev/console-bridge.js +0 -71
  164. package/dist/dev/debug-draw.d.ts +0 -24
  165. package/dist/dev/debug-draw.d.ts.map +0 -1
  166. package/dist/dev/debug-draw.js +0 -73
  167. package/dist/dev/logger.d.ts +0 -30
  168. package/dist/dev/logger.d.ts.map +0 -1
  169. package/dist/dev/logger.js +0 -90
  170. package/dist/dev/performance-profiler.d.ts +0 -60
  171. package/dist/dev/performance-profiler.d.ts.map +0 -1
  172. package/dist/dev/performance-profiler.js +0 -181
  173. package/dist/dev/webgl-gpu-timer.d.ts +0 -8
  174. package/dist/dev/webgl-gpu-timer.d.ts.map +0 -1
  175. package/dist/dev/webgl-gpu-timer.js +0 -52
  176. package/dist/ecs/component-manager.d.ts +0 -205
  177. package/dist/ecs/component-manager.d.ts.map +0 -1
  178. package/dist/ecs/component-manager.js +0 -706
  179. package/dist/ecs/game-component.d.ts +0 -146
  180. package/dist/ecs/game-component.d.ts.map +0 -1
  181. package/dist/ecs/game-component.js +0 -141
  182. package/dist/ecs/hmr-swap-report.d.ts +0 -53
  183. package/dist/ecs/hmr-swap-report.d.ts.map +0 -1
  184. package/dist/ecs/hmr-swap-report.js +0 -55
  185. package/dist/humanoid/bake.operation.d.ts +0 -119
  186. package/dist/humanoid/bake.operation.d.ts.map +0 -1
  187. package/dist/humanoid/bake.operation.js +0 -228
  188. package/dist/humanoid/body.d.ts +0 -101
  189. package/dist/humanoid/body.d.ts.map +0 -1
  190. package/dist/humanoid/body.js +0 -530
  191. package/dist/humanoid/clips.d.ts +0 -62
  192. package/dist/humanoid/clips.d.ts.map +0 -1
  193. package/dist/humanoid/clips.js +0 -121
  194. package/dist/humanoid/compose.d.ts +0 -75
  195. package/dist/humanoid/compose.d.ts.map +0 -1
  196. package/dist/humanoid/compose.js +0 -176
  197. package/dist/humanoid/generate.d.ts +0 -92
  198. package/dist/humanoid/generate.d.ts.map +0 -1
  199. package/dist/humanoid/generate.js +0 -124
  200. package/dist/humanoid/index.d.ts +0 -24
  201. package/dist/humanoid/index.d.ts.map +0 -1
  202. package/dist/humanoid/index.js +0 -18
  203. package/dist/humanoid/schema.d.ts +0 -35
  204. package/dist/humanoid/schema.d.ts.map +0 -1
  205. package/dist/humanoid/schema.js +0 -87
  206. package/dist/humanoid/skeleton.d.ts +0 -103
  207. package/dist/humanoid/skeleton.d.ts.map +0 -1
  208. package/dist/humanoid/skeleton.js +0 -289
  209. package/dist/index.d.ts +0 -37
  210. package/dist/index.d.ts.map +0 -1
  211. package/dist/index.js +0 -30
  212. package/dist/input/input-manager.d.ts +0 -945
  213. package/dist/input/input-manager.d.ts.map +0 -1
  214. package/dist/input/input-manager.js +0 -2207
  215. package/dist/input/input-types.d.ts +0 -174
  216. package/dist/input/input-types.d.ts.map +0 -1
  217. package/dist/input/input-types.js +0 -1
  218. package/dist/input/prompt-labels.d.ts +0 -21
  219. package/dist/input/prompt-labels.d.ts.map +0 -1
  220. package/dist/input/prompt-labels.js +0 -121
  221. package/dist/input/rebind-controller.d.ts +0 -59
  222. package/dist/input/rebind-controller.d.ts.map +0 -1
  223. package/dist/input/rebind-controller.js +0 -85
  224. package/dist/input/schema.d.ts +0 -16
  225. package/dist/input/schema.d.ts.map +0 -1
  226. package/dist/input/schema.js +0 -228
  227. package/dist/loader.d.ts +0 -43
  228. package/dist/loader.d.ts.map +0 -1
  229. package/dist/loader.js +0 -59
  230. package/dist/manifest/index.d.ts +0 -5
  231. package/dist/manifest/index.d.ts.map +0 -1
  232. package/dist/manifest/index.js +0 -8
  233. package/dist/manifest/load-file.d.ts +0 -4
  234. package/dist/manifest/load-file.d.ts.map +0 -1
  235. package/dist/manifest/load-file.js +0 -14
  236. package/dist/manifest/load.d.ts +0 -144
  237. package/dist/manifest/load.d.ts.map +0 -1
  238. package/dist/manifest/load.js +0 -273
  239. package/dist/manifest/schema.d.ts +0 -230
  240. package/dist/manifest/schema.d.ts.map +0 -1
  241. package/dist/manifest/schema.js +0 -394
  242. package/dist/physics/collision-system.d.ts +0 -41
  243. package/dist/physics/collision-system.d.ts.map +0 -1
  244. package/dist/physics/collision-system.js +0 -64
  245. package/dist/physics/physics-registry.d.ts +0 -45
  246. package/dist/physics/physics-registry.d.ts.map +0 -1
  247. package/dist/physics/physics-registry.js +0 -65
  248. package/dist/physics/transform-writer.d.ts +0 -16
  249. package/dist/physics/transform-writer.d.ts.map +0 -1
  250. package/dist/physics/transform-writer.js +0 -38
  251. package/dist/physics/trigger-dispatch.d.ts +0 -24
  252. package/dist/physics/trigger-dispatch.d.ts.map +0 -1
  253. package/dist/physics/trigger-dispatch.js +0 -80
  254. package/dist/react/game-state.d.ts +0 -156
  255. package/dist/react/game-state.d.ts.map +0 -1
  256. package/dist/react/game-state.js +0 -222
  257. package/dist/react/root-adapter.d.ts +0 -11
  258. package/dist/react/root-adapter.d.ts.map +0 -1
  259. package/dist/react/root-adapter.js +0 -41
  260. package/dist/react/unmanaged-root-detector.d.ts +0 -12
  261. package/dist/react/unmanaged-root-detector.d.ts.map +0 -1
  262. package/dist/react/unmanaged-root-detector.js +0 -45
  263. package/dist/react/use-data.d.ts +0 -60
  264. package/dist/react/use-data.d.ts.map +0 -1
  265. package/dist/react/use-data.js +0 -101
  266. package/dist/react/use-selection.d.ts +0 -75
  267. package/dist/react/use-selection.d.ts.map +0 -1
  268. package/dist/react/use-selection.js +0 -90
  269. package/dist/render/auto-batcher.d.ts +0 -34
  270. package/dist/render/auto-batcher.d.ts.map +0 -1
  271. package/dist/render/auto-batcher.js +0 -140
  272. package/dist/render/render-batch-system.d.ts +0 -33
  273. package/dist/render/render-batch-system.d.ts.map +0 -1
  274. package/dist/render/render-batch-system.js +0 -230
  275. package/dist/render/render-features.d.ts +0 -47
  276. package/dist/render/render-features.d.ts.map +0 -1
  277. package/dist/render/render-features.js +0 -105
  278. package/dist/render/render-settings.d.ts +0 -36
  279. package/dist/render/render-settings.d.ts.map +0 -1
  280. package/dist/render/render-settings.js +0 -51
  281. package/dist/runtime/create-runtime.d.ts +0 -249
  282. package/dist/runtime/create-runtime.d.ts.map +0 -1
  283. package/dist/runtime/create-runtime.js +0 -641
  284. package/dist/runtime/debug-bridge.d.ts +0 -257
  285. package/dist/runtime/debug-bridge.d.ts.map +0 -1
  286. package/dist/runtime/debug-bridge.js +0 -224
  287. package/dist/runtime/debug-registry.d.ts +0 -288
  288. package/dist/runtime/debug-registry.d.ts.map +0 -1
  289. package/dist/runtime/debug-registry.js +0 -513
  290. package/dist/runtime/frame-selector-cache.d.ts +0 -41
  291. package/dist/runtime/frame-selector-cache.d.ts.map +0 -1
  292. package/dist/runtime/frame-selector-cache.js +0 -65
  293. package/dist/runtime/game.d.ts +0 -496
  294. package/dist/runtime/game.d.ts.map +0 -1
  295. package/dist/runtime/game.js +0 -741
  296. package/dist/runtime/gameplay-rng-trap.d.ts +0 -48
  297. package/dist/runtime/gameplay-rng-trap.d.ts.map +0 -1
  298. package/dist/runtime/gameplay-rng-trap.js +0 -96
  299. package/dist/runtime/input-router.d.ts +0 -78
  300. package/dist/runtime/input-router.d.ts.map +0 -1
  301. package/dist/runtime/input-router.js +0 -171
  302. package/dist/runtime/mount-game.d.ts +0 -129
  303. package/dist/runtime/mount-game.d.ts.map +0 -1
  304. package/dist/runtime/mount-game.js +0 -152
  305. package/dist/runtime/mount-manifest.d.ts +0 -173
  306. package/dist/runtime/mount-manifest.d.ts.map +0 -1
  307. package/dist/runtime/mount-manifest.js +0 -297
  308. package/dist/runtime/render-audio-control.d.ts +0 -110
  309. package/dist/runtime/render-audio-control.d.ts.map +0 -1
  310. package/dist/runtime/render-audio-control.js +0 -111
  311. package/dist/runtime/render-control.d.ts +0 -291
  312. package/dist/runtime/render-control.d.ts.map +0 -1
  313. package/dist/runtime/render-control.js +0 -264
  314. package/dist/runtime/render-seed.d.ts +0 -57
  315. package/dist/runtime/render-seed.d.ts.map +0 -1
  316. package/dist/runtime/render-seed.js +0 -74
  317. package/dist/runtime/state-bridge.d.ts +0 -61
  318. package/dist/runtime/state-bridge.d.ts.map +0 -1
  319. package/dist/runtime/state-bridge.js +0 -63
  320. package/dist/runtime/types.d.ts +0 -253
  321. package/dist/runtime/types.d.ts.map +0 -1
  322. package/dist/runtime/types.js +0 -1
  323. package/dist/scene/asset-loaders.d.ts +0 -79
  324. package/dist/scene/asset-loaders.d.ts.map +0 -1
  325. package/dist/scene/asset-loaders.js +0 -141
  326. package/dist/scene/asset-paths.d.ts +0 -11
  327. package/dist/scene/asset-paths.d.ts.map +0 -1
  328. package/dist/scene/asset-paths.js +0 -108
  329. package/dist/scene/asset-ref-check.d.ts +0 -88
  330. package/dist/scene/asset-ref-check.d.ts.map +0 -1
  331. package/dist/scene/asset-ref-check.js +0 -214
  332. package/dist/scene/asset-registry.d.ts +0 -38
  333. package/dist/scene/asset-registry.d.ts.map +0 -1
  334. package/dist/scene/asset-registry.js +0 -66
  335. package/dist/scene/collider-dimensions.d.ts +0 -63
  336. package/dist/scene/collider-dimensions.d.ts.map +0 -1
  337. package/dist/scene/collider-dimensions.js +0 -98
  338. package/dist/scene/component-registry.d.ts +0 -22
  339. package/dist/scene/component-registry.d.ts.map +0 -1
  340. package/dist/scene/component-registry.js +0 -37
  341. package/dist/scene/defaults.d.ts +0 -252
  342. package/dist/scene/defaults.d.ts.map +0 -1
  343. package/dist/scene/defaults.js +0 -151
  344. package/dist/scene/geometries/index.d.ts +0 -8
  345. package/dist/scene/geometries/index.d.ts.map +0 -1
  346. package/dist/scene/geometries/index.js +0 -7
  347. package/dist/scene/geometries/terrain.d.ts +0 -2
  348. package/dist/scene/geometries/terrain.d.ts.map +0 -1
  349. package/dist/scene/geometries/terrain.js +0 -37
  350. package/dist/scene/geometry-registry.d.ts +0 -24
  351. package/dist/scene/geometry-registry.d.ts.map +0 -1
  352. package/dist/scene/geometry-registry.js +0 -20
  353. package/dist/scene/instance-registry.d.ts +0 -36
  354. package/dist/scene/instance-registry.d.ts.map +0 -1
  355. package/dist/scene/instance-registry.js +0 -55
  356. package/dist/scene/instancers/grid.d.ts +0 -2
  357. package/dist/scene/instancers/grid.d.ts.map +0 -1
  358. package/dist/scene/instancers/grid.js +0 -36
  359. package/dist/scene/instancers/index.d.ts +0 -8
  360. package/dist/scene/instancers/index.d.ts.map +0 -1
  361. package/dist/scene/instancers/index.js +0 -7
  362. package/dist/scene/light-camera-factory.d.ts +0 -23
  363. package/dist/scene/light-camera-factory.d.ts.map +0 -1
  364. package/dist/scene/light-camera-factory.js +0 -68
  365. package/dist/scene/material-factory.d.ts +0 -17
  366. package/dist/scene/material-factory.d.ts.map +0 -1
  367. package/dist/scene/material-factory.js +0 -197
  368. package/dist/scene/material-registry.d.ts +0 -40
  369. package/dist/scene/material-registry.d.ts.map +0 -1
  370. package/dist/scene/material-registry.js +0 -44
  371. package/dist/scene/materials/index.d.ts +0 -8
  372. package/dist/scene/materials/index.d.ts.map +0 -1
  373. package/dist/scene/materials/index.js +0 -7
  374. package/dist/scene/materials/water.d.ts +0 -2
  375. package/dist/scene/materials/water.d.ts.map +0 -1
  376. package/dist/scene/materials/water.js +0 -54
  377. package/dist/scene/parse.d.ts +0 -23
  378. package/dist/scene/parse.d.ts.map +0 -1
  379. package/dist/scene/parse.js +0 -179
  380. package/dist/scene/particles-factory.d.ts +0 -33
  381. package/dist/scene/particles-factory.d.ts.map +0 -1
  382. package/dist/scene/particles-factory.js +0 -282
  383. package/dist/scene/scene-apply.d.ts +0 -109
  384. package/dist/scene/scene-apply.d.ts.map +0 -1
  385. package/dist/scene/scene-apply.js +0 -370
  386. package/dist/scene/scene-diff-schema.d.ts +0 -285
  387. package/dist/scene/scene-diff-schema.d.ts.map +0 -1
  388. package/dist/scene/scene-diff-schema.js +0 -92
  389. package/dist/scene/scene-diff-types.d.ts +0 -40
  390. package/dist/scene/scene-diff-types.d.ts.map +0 -1
  391. package/dist/scene/scene-diff-types.js +0 -14
  392. package/dist/scene/scene-loader.d.ts +0 -167
  393. package/dist/scene/scene-loader.d.ts.map +0 -1
  394. package/dist/scene/scene-loader.js +0 -1211
  395. package/dist/scene/scene-query.d.ts +0 -11
  396. package/dist/scene/scene-query.d.ts.map +0 -1
  397. package/dist/scene/scene-query.js +0 -63
  398. package/dist/scene/scene-types.d.ts +0 -10
  399. package/dist/scene/scene-types.d.ts.map +0 -1
  400. package/dist/scene/scene-types.js +0 -8
  401. package/dist/scene/scene-version.d.ts +0 -26
  402. package/dist/scene/scene-version.d.ts.map +0 -1
  403. package/dist/scene/scene-version.js +0 -34
  404. package/dist/scene/schema/animation.d.ts +0 -8
  405. package/dist/scene/schema/animation.d.ts.map +0 -1
  406. package/dist/scene/schema/animation.js +0 -42
  407. package/dist/scene/schema/audio.d.ts +0 -13
  408. package/dist/scene/schema/audio.d.ts.map +0 -1
  409. package/dist/scene/schema/audio.js +0 -22
  410. package/dist/scene/schema/camera.d.ts +0 -28
  411. package/dist/scene/schema/camera.d.ts.map +0 -1
  412. package/dist/scene/schema/camera.js +0 -17
  413. package/dist/scene/schema/collider.d.ts +0 -40
  414. package/dist/scene/schema/collider.d.ts.map +0 -1
  415. package/dist/scene/schema/collider.js +0 -55
  416. package/dist/scene/schema/entity-ref.d.ts +0 -31
  417. package/dist/scene/schema/entity-ref.d.ts.map +0 -1
  418. package/dist/scene/schema/entity-ref.js +0 -61
  419. package/dist/scene/schema/entity.d.ts +0 -1036
  420. package/dist/scene/schema/entity.d.ts.map +0 -1
  421. package/dist/scene/schema/entity.js +0 -153
  422. package/dist/scene/schema/environment.d.ts +0 -425
  423. package/dist/scene/schema/environment.d.ts.map +0 -1
  424. package/dist/scene/schema/environment.js +0 -357
  425. package/dist/scene/schema/index.d.ts +0 -37
  426. package/dist/scene/schema/index.d.ts.map +0 -1
  427. package/dist/scene/schema/index.js +0 -19
  428. package/dist/scene/schema/instances.d.ts +0 -14
  429. package/dist/scene/schema/instances.d.ts.map +0 -1
  430. package/dist/scene/schema/instances.js +0 -28
  431. package/dist/scene/schema/joint.d.ts +0 -23
  432. package/dist/scene/schema/joint.d.ts.map +0 -1
  433. package/dist/scene/schema/joint.js +0 -23
  434. package/dist/scene/schema/light.d.ts +0 -38
  435. package/dist/scene/schema/light.d.ts.map +0 -1
  436. package/dist/scene/schema/light.js +0 -26
  437. package/dist/scene/schema/material.d.ts +0 -199
  438. package/dist/scene/schema/material.d.ts.map +0 -1
  439. package/dist/scene/schema/material.js +0 -103
  440. package/dist/scene/schema/mesh.d.ts +0 -48
  441. package/dist/scene/schema/mesh.d.ts.map +0 -1
  442. package/dist/scene/schema/mesh.js +0 -82
  443. package/dist/scene/schema/particles.d.ts +0 -2178
  444. package/dist/scene/schema/particles.d.ts.map +0 -1
  445. package/dist/scene/schema/particles.js +0 -321
  446. package/dist/scene/schema/physics.d.ts +0 -56
  447. package/dist/scene/schema/physics.d.ts.map +0 -1
  448. package/dist/scene/schema/physics.js +0 -37
  449. package/dist/scene/schema/scene-file.d.ts +0 -303
  450. package/dist/scene/schema/scene-file.d.ts.map +0 -1
  451. package/dist/scene/schema/scene-file.js +0 -256
  452. package/dist/scene/schema/shadow.d.ts +0 -28
  453. package/dist/scene/schema/shadow.d.ts.map +0 -1
  454. package/dist/scene/schema/shadow.js +0 -20
  455. package/dist/scene/schema/spline.d.ts +0 -25
  456. package/dist/scene/schema/spline.d.ts.map +0 -1
  457. package/dist/scene/schema/spline.js +0 -15
  458. package/dist/scene/schema/tuples.d.ts +0 -12
  459. package/dist/scene/schema/tuples.d.ts.map +0 -1
  460. package/dist/scene/schema/tuples.js +0 -14
  461. package/dist/scene/user-data.d.ts +0 -185
  462. package/dist/scene/user-data.d.ts.map +0 -1
  463. package/dist/scene/user-data.js +0 -144
  464. package/dist/setup/setup-audio.d.ts +0 -20
  465. package/dist/setup/setup-audio.d.ts.map +0 -1
  466. package/dist/setup/setup-audio.js +0 -41
  467. package/dist/setup/setup-particles.d.ts +0 -17
  468. package/dist/setup/setup-particles.d.ts.map +0 -1
  469. package/dist/setup/setup-particles.js +0 -16
  470. package/dist/setup/setup-physics.d.ts +0 -25
  471. package/dist/setup/setup-physics.d.ts.map +0 -1
  472. package/dist/setup/setup-physics.js +0 -51
  473. package/dist/setup/setup-renderer.d.ts +0 -69
  474. package/dist/setup/setup-renderer.d.ts.map +0 -1
  475. package/dist/setup/setup-renderer.js +0 -363
  476. package/dist/tools/define-tool.d.ts +0 -130
  477. package/dist/tools/define-tool.d.ts.map +0 -1
  478. package/dist/tools/define-tool.js +0 -96
  479. package/dist/world2d/authoring-2d.d.ts +0 -80
  480. package/dist/world2d/authoring-2d.d.ts.map +0 -1
  481. package/dist/world2d/authoring-2d.js +0 -195
  482. package/dist/world2d/capture-to-scene2d.d.ts +0 -5
  483. package/dist/world2d/capture-to-scene2d.d.ts.map +0 -1
  484. package/dist/world2d/capture-to-scene2d.js +0 -49
  485. package/dist/world2d/collision-2d.d.ts +0 -52
  486. package/dist/world2d/collision-2d.d.ts.map +0 -1
  487. package/dist/world2d/collision-2d.js +0 -70
  488. package/dist/world2d/components-2d.d.ts +0 -47
  489. package/dist/world2d/components-2d.d.ts.map +0 -1
  490. package/dist/world2d/components-2d.js +0 -77
  491. package/dist/world2d/index.d.ts +0 -34
  492. package/dist/world2d/index.d.ts.map +0 -1
  493. package/dist/world2d/index.js +0 -32
  494. package/dist/world2d/ingest-iframe-2d.d.ts +0 -82
  495. package/dist/world2d/ingest-iframe-2d.d.ts.map +0 -1
  496. package/dist/world2d/ingest-iframe-2d.js +0 -166
  497. package/dist/world2d/ingest2d.d.ts +0 -97
  498. package/dist/world2d/ingest2d.d.ts.map +0 -1
  499. package/dist/world2d/ingest2d.js +0 -40
  500. package/dist/world2d/physics2d-registry.d.ts +0 -24
  501. package/dist/world2d/physics2d-registry.d.ts.map +0 -1
  502. package/dist/world2d/physics2d-registry.js +0 -38
  503. package/dist/world2d/pixi-game-adapter.d.ts +0 -107
  504. package/dist/world2d/pixi-game-adapter.d.ts.map +0 -1
  505. package/dist/world2d/pixi-game-adapter.js +0 -210
  506. package/dist/world2d/pixi-surface.d.ts +0 -39
  507. package/dist/world2d/pixi-surface.d.ts.map +0 -1
  508. package/dist/world2d/pixi-surface.js +0 -47
  509. package/dist/world2d/scene-capture-2d.d.ts +0 -43
  510. package/dist/world2d/scene-capture-2d.d.ts.map +0 -1
  511. package/dist/world2d/scene-capture-2d.js +0 -92
  512. package/dist/world2d/scene2d-loader.d.ts +0 -27
  513. package/dist/world2d/scene2d-loader.d.ts.map +0 -1
  514. package/dist/world2d/scene2d-loader.js +0 -275
  515. package/dist/world2d/schema/entity2d.d.ts +0 -102
  516. package/dist/world2d/schema/entity2d.d.ts.map +0 -1
  517. package/dist/world2d/schema/entity2d.js +0 -119
  518. package/dist/world2d/schema/physics2d.d.ts +0 -46
  519. package/dist/world2d/schema/physics2d.d.ts.map +0 -1
  520. package/dist/world2d/schema/physics2d.js +0 -45
  521. package/dist/world2d/schema/sprite.d.ts +0 -42
  522. package/dist/world2d/schema/sprite.d.ts.map +0 -1
  523. package/dist/world2d/schema/sprite.js +0 -63
  524. package/dist/world2d/schema/tilemap.d.ts +0 -15
  525. package/dist/world2d/schema/tilemap.d.ts.map +0 -1
  526. package/dist/world2d/schema/tilemap.js +0 -19
  527. package/dist/world2d/schema/tuples2d.d.ts +0 -20
  528. package/dist/world2d/schema/tuples2d.d.ts.map +0 -1
  529. package/dist/world2d/schema/tuples2d.js +0 -19
  530. package/dist/world2d/system-adapters-2d.d.ts +0 -16
  531. package/dist/world2d/system-adapters-2d.d.ts.map +0 -1
  532. package/dist/world2d/system-adapters-2d.js +0 -37
  533. package/dist/world2d/transform-writer-2d.d.ts +0 -16
  534. package/dist/world2d/transform-writer-2d.d.ts.map +0 -1
  535. package/dist/world2d/transform-writer-2d.js +0 -22
  536. package/dist/world2d/types.d.ts +0 -59
  537. package/dist/world2d/types.d.ts.map +0 -1
  538. package/dist/world2d/types.js +0 -1
@@ -1,42 +0,0 @@
1
- import type { GameLoopConfig, GameLoopLiveness } from './types';
2
- /**
3
- * Fixed-timestep game loop with accumulator pattern.
4
- *
5
- * Physics/logic run at a fixed rate (default 60 Hz) regardless of display
6
- * frame rate. Rendering is deliberately fixed-rate too (decided — D1, see
7
- * `docs/DECISIONS-PENDING.md`): `config.update(fixedDt)` runs once per
8
- * consumed substep, and per the documented phase order (`PHASE_ORDER` in
9
- * `core/types.ts`) the `render` phase executes as the last phase of that
10
- * same call — there is no separate per-real-frame render step and no
11
- * display-refresh interpolation. A frame whose accumulator produces zero
12
- * substeps therefore calls `update` zero times and renders zero times; do
13
- * not reintroduce a render call outside the substep loop below.
14
- */
15
- export declare function createGameLoop(config: GameLoopConfig): {
16
- start(): void;
17
- stop(): void;
18
- readonly isRunning: boolean;
19
- /**
20
- * Truthful liveness (issue #175 — see `GameLoopLiveness`'s doc comment
21
- * in `core/types.ts` for the full contract). Unlike `isRunning` above,
22
- * this DISTINGUISHES a hidden-tab pause from an actually-stopped loop:
23
- * `hiddenPaused` is only ever set by `handleVisibilityChange` (T2.1's
24
- * idle throttle) and cleared by `start()`/`stop()`/visibility-restore,
25
- * so it can never be true at the same time `running` is true. An
26
- * `externalDrive` loop never installs the visibility listener at all
27
- * (see `start()` above), so `hiddenPaused` stays permanently `false` for
28
- * it — it only ever reports `'running'` or `'stopped'`.
29
- */
30
- readonly liveness: GameLoopLiveness;
31
- timeScale: number;
32
- /**
33
- * The fixed substep timestep (seconds) this loop's accumulator consumes
34
- * per `config.update()` call (`config.fixedTimestep ?? 1/60`) — read by
35
- * `Game.runTicks` (D15, `runtime/game.ts`) so a synchronous fast-forward
36
- * burst drives `game.runFrame` with the SAME `fixedDt` this loop's own
37
- * rAF-driven accumulator would have used, without exposing (or
38
- * `runTicks` needing) any other internal loop state.
39
- */
40
- readonly fixedDt: number;
41
- };
42
- //# sourceMappingURL=game-loop.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"game-loop.d.ts","sourceRoot":"","sources":["../../src/core/game-loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc;;;;IA4HjD;;;;;;;;;;OAUG;uBACa,gBAAgB;eAKX,MAAM;IAc3B;;;;;;;OAOG;;EAKN"}
@@ -1,167 +0,0 @@
1
- /**
2
- * Fixed-timestep game loop with accumulator pattern.
3
- *
4
- * Physics/logic run at a fixed rate (default 60 Hz) regardless of display
5
- * frame rate. Rendering is deliberately fixed-rate too (decided — D1, see
6
- * `docs/DECISIONS-PENDING.md`): `config.update(fixedDt)` runs once per
7
- * consumed substep, and per the documented phase order (`PHASE_ORDER` in
8
- * `core/types.ts`) the `render` phase executes as the last phase of that
9
- * same call — there is no separate per-real-frame render step and no
10
- * display-refresh interpolation. A frame whose accumulator produces zero
11
- * substeps therefore calls `update` zero times and renders zero times; do
12
- * not reintroduce a render call outside the substep loop below.
13
- */
14
- export function createGameLoop(config) {
15
- const fixedDt = config.fixedTimestep ?? 1 / 60;
16
- const maxSubSteps = config.maxSubSteps ?? 8;
17
- // Also the accumulator's hard ceiling (see the spiral-of-death guard below).
18
- const maxAccumulator = fixedDt * maxSubSteps;
19
- // I2 (render-control runtime mode, see `GameLoopConfig.externalDrive`'s
20
- // doc comment): in this mode `start()` below deliberately skips both the
21
- // `requestAnimationFrame` arm AND the `visibilitychange` listener install —
22
- // no wall-clock timing source ever exists for this loop instance, so
23
- // `config.update` can only ever be invoked by an external driver calling
24
- // into the render-control seam, never by this file's own `frame()`.
25
- const externalDrive = config.externalDrive ?? false;
26
- let accumulator = 0;
27
- let lastTime = 0;
28
- let running = false;
29
- let rafId = 0;
30
- let timeScale = 1.0;
31
- // Idle throttle (T2.1): a hidden tab stops the loop outright; becoming
32
- // visible again restarts it with the accumulator clock resynced to "now" —
33
- // deliberately no catch-up burst for the wall-clock time spent hidden.
34
- let hiddenPaused = false;
35
- let visibilityListenerAttached = false;
36
- function handleVisibilityChange() {
37
- if (typeof document === 'undefined')
38
- return;
39
- if (document.hidden) {
40
- if (running) {
41
- running = false;
42
- cancelAnimationFrame(rafId);
43
- hiddenPaused = true;
44
- }
45
- }
46
- else if (hiddenPaused) {
47
- hiddenPaused = false;
48
- running = true;
49
- lastTime = performance.now();
50
- accumulator = 0;
51
- rafId = requestAnimationFrame(frame);
52
- }
53
- }
54
- function frame(currentTime) {
55
- if (!running)
56
- return;
57
- rafId = requestAnimationFrame(frame);
58
- // Convert to seconds
59
- const rawDt = (currentTime - lastTime) / 1000;
60
- lastTime = currentTime;
61
- // Clamp large frame gaps (e.g. a slow frame) before scaling by timeScale.
62
- const dt = Math.min(rawDt, maxAccumulator) * timeScale;
63
- accumulator += dt;
64
- // Spiral-of-death guard: bound the accumulator regardless of timeScale
65
- // (up to the clamped max of 8) or frame-gap size. Time that can't
66
- // possibly be caught up on is dropped, never carried forward.
67
- if (accumulator > maxAccumulator)
68
- accumulator = maxAccumulator;
69
- // Run fixed timestep updates (this is also where rendering happens —
70
- // see the module doc comment above).
71
- let steps = 0;
72
- while (accumulator >= fixedDt && steps < maxSubSteps) {
73
- config.update(fixedDt);
74
- accumulator -= fixedDt;
75
- steps++;
76
- }
77
- }
78
- return {
79
- start() {
80
- if (running)
81
- return;
82
- running = true;
83
- // A direct start() call can land while the loop is auto-hidden-paused
84
- // (`hiddenPaused` true, `running` false, no rAF pending). Without this
85
- // reset, a later visibilitychange-to-visible would see stale
86
- // `hiddenPaused === true` and spawn a SECOND rAF chain on top of the
87
- // one this call is about to start (doubled update()/render() overhead
88
- // until the next stop() — no sim-speed effect, but wasted work).
89
- hiddenPaused = false;
90
- lastTime = performance.now();
91
- accumulator = 0;
92
- // External-drive mode (I2): never arm rAF and never install the
93
- // visibilitychange auto-stop handler. `running` still flips `true`
94
- // above (so `isRunning`/`stop()` behave normally for a caller that
95
- // treats this loop as "started"), but nothing will ever call
96
- // `frame()` — a headless/backgrounded capture page cannot have this
97
- // loop silently killed by `document.hidden`, because there is no
98
- // listener to fire in the first place.
99
- if (externalDrive)
100
- return;
101
- // A play session can be started while the editor tab is ALREADY
102
- // hidden. In that case no future visibilitychange-to-hidden event will
103
- // arrive, and arming rAF would leave `running=true` forever while the
104
- // browser executes zero callbacks. Classify and park the loop before
105
- // arming it so status is truthful and visibility restore can resume it.
106
- if (!visibilityListenerAttached && typeof document !== 'undefined') {
107
- document.addEventListener('visibilitychange', handleVisibilityChange);
108
- visibilityListenerAttached = true;
109
- }
110
- if (typeof document !== 'undefined' && document.hidden) {
111
- running = false;
112
- hiddenPaused = true;
113
- return;
114
- }
115
- rafId = requestAnimationFrame(frame);
116
- },
117
- stop() {
118
- running = false;
119
- hiddenPaused = false;
120
- cancelAnimationFrame(rafId);
121
- if (visibilityListenerAttached && typeof document !== 'undefined') {
122
- document.removeEventListener('visibilitychange', handleVisibilityChange);
123
- visibilityListenerAttached = false;
124
- }
125
- },
126
- get isRunning() {
127
- return running;
128
- },
129
- /**
130
- * Truthful liveness (issue #175 — see `GameLoopLiveness`'s doc comment
131
- * in `core/types.ts` for the full contract). Unlike `isRunning` above,
132
- * this DISTINGUISHES a hidden-tab pause from an actually-stopped loop:
133
- * `hiddenPaused` is only ever set by `handleVisibilityChange` (T2.1's
134
- * idle throttle) and cleared by `start()`/`stop()`/visibility-restore,
135
- * so it can never be true at the same time `running` is true. An
136
- * `externalDrive` loop never installs the visibility listener at all
137
- * (see `start()` above), so `hiddenPaused` stays permanently `false` for
138
- * it — it only ever reports `'running'` or `'stopped'`.
139
- */
140
- get liveness() {
141
- if (hiddenPaused)
142
- return 'hidden-paused';
143
- return running ? 'running' : 'stopped';
144
- },
145
- set timeScale(value) {
146
- const clamped = Math.min(8, Math.max(0, value));
147
- if (clamped !== value) {
148
- console.warn(`[game-loop] timeScale ${value} is out of range [0, 8]; clamped to ${clamped}.`);
149
- }
150
- timeScale = clamped;
151
- },
152
- get timeScale() {
153
- return timeScale;
154
- },
155
- /**
156
- * The fixed substep timestep (seconds) this loop's accumulator consumes
157
- * per `config.update()` call (`config.fixedTimestep ?? 1/60`) — read by
158
- * `Game.runTicks` (D15, `runtime/game.ts`) so a synchronous fast-forward
159
- * burst drives `game.runFrame` with the SAME `fixedDt` this loop's own
160
- * rAF-driven accumulator would have used, without exposing (or
161
- * `runTicks` needing) any other internal loop state.
162
- */
163
- get fixedDt() {
164
- return fixedDt;
165
- },
166
- };
167
- }
@@ -1,69 +0,0 @@
1
- /**
2
- * D15 — the seeded-random core (`docs/D15-DETERMINISM-DESIGN.md` §2.a,
3
- * T-D15.1). `ctx.random` is a game-scoped PRNG with NAMED STREAMS: calling
4
- * the object itself (`ctx.random()`) draws from the `'gameplay'` stream;
5
- * `ctx.random.stream('vfx')` (or any other name) derives an INDEPENDENT
6
- * generator, so a cosmetic/VFX draw can never perturb the gameplay draw
7
- * order — the classic replay-drift trap option B ("one game-scoped PRNG
8
- * only") would fall into (see the design doc's §2.a option table).
9
- *
10
- * Each stream is seeded from `fnv1a(name) ^ rootSeed` — deterministic given
11
- * the root seed, independent of draw order across streams (drawing from
12
- * `'vfx'` never advances `'gameplay'`'s generator, since they are two
13
- * separate mulberry32 instances). `reseed(seed)` re-derives every stream
14
- * that has EVER been asked for via `.stream(name)` (including the implicit
15
- * `'gameplay'` stream `ctx.random()` itself draws from) — future draws only:
16
- * numbers already returned before a `reseed()` call are not (and cannot be)
17
- * un-returned; this matches `play.seed.set`'s documented semantics (T-D15.6).
18
- *
19
- * Deliberately reuses {@link createMulberry32} FROM `runtime/render-seed.ts`
20
- * (the render/capture door's own generator) rather than duplicating the
21
- * algorithm — `render-seed.ts` stays a zero-import module itself (this file
22
- * imports FROM it, never the reverse), so this is a dependency-clean
23
- * direction: the render/capture door and the gameplay determinism door share
24
- * one PRNG implementation without either depending on the other's door
25
- * logic (§2.a: "Kept as-is for the render/capture door only" — the two doors
26
- * stay orthogonal; only the generator function itself is shared).
27
- */
28
- /** The name `ctx.random()` (called with no `.stream(...)`) draws from. */
29
- export declare const GAMEPLAY_STREAM = "gameplay";
30
- /** The fixed fallback seed a `SeededRandom` boots with when no explicit seed
31
- * is supplied (mirrors `render-seed.ts`'s own `DEFAULT_RENDER_SEED` in
32
- * spirit — an arbitrary but fixed golden-ratio-derived constant, never
33
- * wall-clock/`Math.random`-derived, so an UNDECLARED project's `ctx.random`
34
- * is still perfectly reproducible on its own terms even though nothing in
35
- * the manifest asked for that — it just isn't a documented CONTRACT until
36
- * `determinism.seededRandom` is declared, per T4.1's "no dead field" rule). */
37
- export declare const DEFAULT_SEEDED_RANDOM_SEED = 2654435769;
38
- /**
39
- * The `ctx.random` surface (`GameContext.random`, `runtime/types.ts`).
40
- * Callable (draws from the `'gameplay'` stream), plus:
41
- * - `stream(name)` — an independent named generator, `[0, 1)` floats, same
42
- * call signature as `Math.random`/the bare `SeededRandom` call itself.
43
- * - `reseed(seed)` — re-derive every stream ever requested so far (future
44
- * draws only) from a NEW root seed.
45
- * - `seed` — the CURRENT root seed (reflects the last `reseed()` call, if
46
- * any) — a live getter, not a value snapshotted at construction.
47
- */
48
- export interface SeededRandom {
49
- (): number;
50
- stream(name: string): () => number;
51
- reseed(seed: number): void;
52
- readonly seed: number;
53
- }
54
- /**
55
- * Construct a fresh, game-scoped seeded-random surface. `initialSeed` is
56
- * coerced to an unsigned 32-bit integer the same way `render-seed.ts`'s
57
- * `installDeterministicRandom` does (`>>> 0`), so any finite JS number is
58
- * accepted.
59
- */
60
- export declare function createSeededRandom(initialSeed: number): SeededRandom;
61
- /** Called once by `createGame`, right after both the seeded-random surface
62
- * and the Game shell object exist — mirrors `registerDebugRegistry`. */
63
- export declare function registerSeededRandom(owner: object, random: SeededRandom): void;
64
- /** The game-scoped `SeededRandom` backing every world's `ctx.random` — `null`
65
- * for an owner built without one (there is always one for every real
66
- * `createGame` call; `null` only for a hand-built `Game`-shaped stand-in a
67
- * test constructs without going through `createGame`). */
68
- export declare function getSeededRandom(owner: object): SeededRandom | null;
69
- //# sourceMappingURL=seeded-random.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seeded-random.d.ts","sourceRoot":"","sources":["../../src/core/seeded-random.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,0EAA0E;AAC1E,eAAO,MAAM,eAAe,aAAa,CAAC;AAE1C;;;;;;gFAMgF;AAChF,eAAO,MAAM,0BAA0B,aAAa,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,MAAM,CAAC;IACX,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CAAC;IACnC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAsBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAgDpE;AAeD;yEACyE;AACzE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAE9E;AAED;;;2DAG2D;AAC3D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAElE"}
@@ -1,121 +0,0 @@
1
- /**
2
- * D15 — the seeded-random core (`docs/D15-DETERMINISM-DESIGN.md` §2.a,
3
- * T-D15.1). `ctx.random` is a game-scoped PRNG with NAMED STREAMS: calling
4
- * the object itself (`ctx.random()`) draws from the `'gameplay'` stream;
5
- * `ctx.random.stream('vfx')` (or any other name) derives an INDEPENDENT
6
- * generator, so a cosmetic/VFX draw can never perturb the gameplay draw
7
- * order — the classic replay-drift trap option B ("one game-scoped PRNG
8
- * only") would fall into (see the design doc's §2.a option table).
9
- *
10
- * Each stream is seeded from `fnv1a(name) ^ rootSeed` — deterministic given
11
- * the root seed, independent of draw order across streams (drawing from
12
- * `'vfx'` never advances `'gameplay'`'s generator, since they are two
13
- * separate mulberry32 instances). `reseed(seed)` re-derives every stream
14
- * that has EVER been asked for via `.stream(name)` (including the implicit
15
- * `'gameplay'` stream `ctx.random()` itself draws from) — future draws only:
16
- * numbers already returned before a `reseed()` call are not (and cannot be)
17
- * un-returned; this matches `play.seed.set`'s documented semantics (T-D15.6).
18
- *
19
- * Deliberately reuses {@link createMulberry32} FROM `runtime/render-seed.ts`
20
- * (the render/capture door's own generator) rather than duplicating the
21
- * algorithm — `render-seed.ts` stays a zero-import module itself (this file
22
- * imports FROM it, never the reverse), so this is a dependency-clean
23
- * direction: the render/capture door and the gameplay determinism door share
24
- * one PRNG implementation without either depending on the other's door
25
- * logic (§2.a: "Kept as-is for the render/capture door only" — the two doors
26
- * stay orthogonal; only the generator function itself is shared).
27
- */
28
- import { createMulberry32 } from '../runtime/render-seed';
29
- /** The name `ctx.random()` (called with no `.stream(...)`) draws from. */
30
- export const GAMEPLAY_STREAM = 'gameplay';
31
- /** The fixed fallback seed a `SeededRandom` boots with when no explicit seed
32
- * is supplied (mirrors `render-seed.ts`'s own `DEFAULT_RENDER_SEED` in
33
- * spirit — an arbitrary but fixed golden-ratio-derived constant, never
34
- * wall-clock/`Math.random`-derived, so an UNDECLARED project's `ctx.random`
35
- * is still perfectly reproducible on its own terms even though nothing in
36
- * the manifest asked for that — it just isn't a documented CONTRACT until
37
- * `determinism.seededRandom` is declared, per T4.1's "no dead field" rule). */
38
- export const DEFAULT_SEEDED_RANDOM_SEED = 0x9e3779b9;
39
- /** fnv1a-32, the standard non-cryptographic string hash — used only to mix a
40
- * stream NAME into the root seed, never as a determinism primitive on its
41
- * own (mulberry32 is still what actually produces the `[0,1)` sequence). */
42
- function fnv1a32(str) {
43
- let hash = 0x811c9dc5;
44
- for (let i = 0; i < str.length; i++) {
45
- hash ^= str.charCodeAt(i);
46
- hash = Math.imul(hash, 0x01000193);
47
- }
48
- return hash >>> 0;
49
- }
50
- /**
51
- * Construct a fresh, game-scoped seeded-random surface. `initialSeed` is
52
- * coerced to an unsigned 32-bit integer the same way `render-seed.ts`'s
53
- * `installDeterministicRandom` does (`>>> 0`), so any finite JS number is
54
- * accepted.
55
- */
56
- export function createSeededRandom(initialSeed) {
57
- let rootSeed = initialSeed >>> 0;
58
- const streams = new Map();
59
- function deriveStreamSeed(name) {
60
- return (fnv1a32(name) ^ rootSeed) >>> 0;
61
- }
62
- function getBox(name) {
63
- let box = streams.get(name);
64
- if (!box) {
65
- box = { gen: createMulberry32(deriveStreamSeed(name)) };
66
- streams.set(name, box);
67
- }
68
- return box;
69
- }
70
- function streamFn(name) {
71
- const box = getBox(name);
72
- return () => box.gen();
73
- }
74
- const random = (() => getBox(GAMEPLAY_STREAM).gen());
75
- Object.defineProperties(random, {
76
- stream: { value: streamFn, enumerable: true },
77
- reseed: {
78
- value: (seed) => {
79
- rootSeed = seed >>> 0;
80
- // Re-derive every stream ANYONE has ever asked for (including the
81
- // implicit 'gameplay' stream, once `random()` or
82
- // `.stream('gameplay')` has been called at least once) — a handle a
83
- // caller stashed before this call keeps its identity but now reads
84
- // from the freshly-seeded generator on its NEXT call (future draws
85
- // only, per the design doc's `play.seed.set` semantics).
86
- for (const [name, box] of streams) {
87
- box.gen = createMulberry32(deriveStreamSeed(name));
88
- }
89
- },
90
- enumerable: true,
91
- },
92
- seed: {
93
- get: () => rootSeed,
94
- enumerable: true,
95
- },
96
- });
97
- return random;
98
- }
99
- // ---------------------------------------------------------------------------
100
- // Game-scoped registry — mirrors `runtime/debug-registry.ts`'s
101
- // `registerDebugRegistry`/`getDebugRegistry` WeakMap pattern exactly, but
102
- // keyed on a bare `object` (not `Game`) so this module never needs to import
103
- // `runtime/game.ts` even as a type — `core/` stays independent of `runtime/`
104
- // except for the one explicit, documented `render-seed.ts` reuse above.
105
- // `createGame` (`runtime/game.ts`) is the one real registrant, passing itself
106
- // (the `GameInternal` shell) as the key, exactly like it does for
107
- // `registerDebugRegistry(gameInternal, debugRegistry)`.
108
- // ---------------------------------------------------------------------------
109
- const registryByOwner = new WeakMap();
110
- /** Called once by `createGame`, right after both the seeded-random surface
111
- * and the Game shell object exist — mirrors `registerDebugRegistry`. */
112
- export function registerSeededRandom(owner, random) {
113
- registryByOwner.set(owner, random);
114
- }
115
- /** The game-scoped `SeededRandom` backing every world's `ctx.random` — `null`
116
- * for an owner built without one (there is always one for every real
117
- * `createGame` call; `null` only for a hand-built `Game`-shaped stand-in a
118
- * test constructs without going through `createGame`). */
119
- export function getSeededRandom(owner) {
120
- return registryByOwner.get(owner) ?? null;
121
- }
@@ -1,120 +0,0 @@
1
- import { type SystemDef, type SystemFn, type SystemOptions, type SystemPhaseName, type SystemRunObserver } from './types';
2
- /**
3
- * Ordered system execution by named phase.
4
- *
5
- * Systems are registered with a phase name. When `run(dt)` is called, all
6
- * phases execute in `PHASE_ORDER` via `runPhase(phase, dt)`. Within a phase,
7
- * `runPhase` executes three ordered buckets (GAME-ROOT-DESIGN.md §4, T7.1
8
- * slice 2):
9
- *
10
- * 1. **engine** — everything `add()`/`register()`ed at or before the last
11
- * `markEngineBoundary()` call, or EVERYTHING if no boundary has ever
12
- * been marked (the world2d-silo case: it never calls
13
- * `markEngineBoundary`, so its systems are all "engine").
14
- * 2. **componentTick** — the single per-phase slot set via
15
- * `setComponentTick(phase, fn)`. Component ticks are engine
16
- * infrastructure: they always run after every engine system and before
17
- * every game system in that phase, REGARDLESS of when
18
- * `setComponentTick` was called relative to other `add()` calls. This
19
- * is what makes "engine systems run before component ticks" a
20
- * structural guarantee rather than a registration-order convention
21
- * (see `component-manager.ts`, which registers its tick this way).
22
- * 3. **game** — everything `add()`/`register()`ed AFTER the last
23
- * `markEngineBoundary()` call.
24
- *
25
- * Within each bucket, systems run in registration order.
26
- */
27
- export declare function createSystemRunner(observer?: SystemRunObserver, scope?: string): {
28
- /**
29
- * Register a bare system function in a specific phase.
30
- * Systems within the same phase run in the order they were added.
31
- */
32
- add(phase: SystemPhaseName, fn: SystemFn, options?: SystemOptions): void;
33
- /**
34
- * Remove a bare system function from a phase. Also drops it from the
35
- * engine-membership set (if present) — the fix for the length-based
36
- * bookkeeping bug: removing this has no effect on how any OTHER entry
37
- * (before or after it) is classified, since classification is now
38
- * per-function membership, not position.
39
- */
40
- remove(phase: SystemPhaseName, fn: SystemFn): void;
41
- /**
42
- * Register a lifecycle system. Adds its update to the correct phase.
43
- * Call runInit() after all systems are registered to invoke init hooks.
44
- */
45
- register(system: SystemDef): void;
46
- /**
47
- * Unregister a lifecycle system. Removes its update and calls dispose.
48
- */
49
- unregister(system: SystemDef): void;
50
- /**
51
- * Register the ONE component-tick function for a phase (T7.1 slice 2).
52
- * Component ticks are engine infrastructure, not a bare `add()`ed
53
- * system: they always execute after every engine-bucket system and
54
- * before every game-bucket system in that phase (see `runPhase`),
55
- * they are never touched by `removeAllNonEngine()`, and they do not
56
- * count toward `markEngineBoundary()`'s bookkeeping. Throws if a tick
57
- * is already set for this phase — at most one component manager may
58
- * own a phase's tick slot.
59
- */
60
- setComponentTick(phase: SystemPhaseName, fn: SystemFn): void;
61
- /**
62
- * Call init() on all registered lifecycle systems, in phase order.
63
- * Call once after scene load, before the first game loop tick.
64
- */
65
- runInit(): void;
66
- /**
67
- * Call dispose() on all registered lifecycle systems and remove them.
68
- */
69
- runDispose(): void;
70
- /**
71
- * Run ONE phase's three ordered buckets — engine, componentTick, game
72
- * (see the module doc comment). Each system call is isolated: a
73
- * throwing system is loudly logged (never swallowed) but does not stop
74
- * its siblings in the same bucket, a later bucket in this phase, or a
75
- * later phase, from running this frame.
76
- *
77
- * Public — the Game root's frame executor (`runtime/game.ts`) calls this
78
- * directly per (phase, world); `run(dt)` below is just a loop over it,
79
- * preserved for the world2d silo and any direct caller.
80
- */
81
- runPhase(phase: SystemPhaseName, dt: number): void;
82
- /**
83
- * Run all phases in order, via `runPhase`.
84
- */
85
- run(dt: number): void;
86
- /**
87
- * Mark everything registered so far (via `add()`/`register()`, in every
88
- * phase) as "engine" — infrastructure that must survive a warm restart.
89
- * Call once, right after mount finishes wiring engine-level systems and
90
- * BEFORE any game (`setup()`/scene load) registers its own. `hotReload`
91
- * calls `removeAllNonEngine()` on every restart, which only ever removes
92
- * what was added after this mark. Component-tick slots (`setComponentTick`)
93
- * are unaffected — they are never part of this boundary.
94
- */
95
- markEngineBoundary(): void;
96
- /**
97
- * Bulk-remove every system registered after the last `markEngineBoundary()`
98
- * call — both bare `add()`ed functions and lifecycle `register()`ed systems
99
- * (the latter get `dispose()`d, mirroring `unregister()`). A no-op if no
100
- * boundary has been marked. Idempotent: calling it again with nothing new
101
- * registered since is a safe no-op. Component-tick slots are NEVER cleared
102
- * by this — they are engine infrastructure, not game content.
103
- *
104
- * This is what makes a warm restart (`hotReload`) safe to call N times
105
- * without accumulating duplicate systems/listeners — each restart's
106
- * outgoing game systems are fully removed before the new one registers its
107
- * own, while the engine systems (input/physics/render/the ComponentManager
108
- * tick/...) registered before the boundary are never touched.
109
- */
110
- removeAllNonEngine(): void;
111
- /**
112
- * Total system-function count, optionally scoped to one phase. Includes
113
- * component-tick slots (a set slot counts as 1 per phase it occupies).
114
- * Test/introspection helper — used to assert a warm restart doesn't
115
- * accumulate systems (see `removeAllNonEngine`).
116
- */
117
- count(phase?: SystemPhaseName): number;
118
- };
119
- export type SystemRunner = ReturnType<typeof createSystemRunner>;
120
- //# sourceMappingURL=system-runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"system-runner.d.ts","sourceRoot":"","sources":["../../src/core/system-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,KAAK,SAAU;IA+C5E;;;OAGG;eACQ,eAAe,MAAM,QAAQ,YAAY,aAAa;IASjE;;;;;;OAMG;kBACW,eAAe,MAAM,QAAQ;IAQ3C;;;OAGG;qBACc,SAAS;IAU1B;;OAEG;uBACgB,SAAS;IAa5B;;;;;;;;;OASG;4BACqB,eAAe,MAAM,QAAQ;IAarD;;;OAGG;;IAUH;;OAEG;;IAaH;;;;;;;;;;OAUG;oBACa,eAAe,MAAM,MAAM;IA+B3C;;OAEG;YACK,MAAM;IAMd;;;;;;;;OAQG;;IAUH;;;;;;;;;;;;;OAaG;;IAsBH;;;;;OAKG;kBACW,eAAe,GAAG,MAAM;EAYzC;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}