@vgai/engine 0.3.0 → 0.4.0-canary.20260715.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (559) hide show
  1. package/package.json +8 -2
  2. package/schemas/engine-api.json +124 -0
  3. package/schemas/engine-api.md +53 -0
  4. package/schemas/engine-capabilities.json +124 -0
  5. package/schemas/inputmap.schema.json +314 -0
  6. package/schemas/mat.schema.json +286 -0
  7. package/schemas/prefab.schema.json +10148 -0
  8. package/schemas/scn2d.schema.json +475 -0
  9. package/schemas/vgai-game.schema.json +383 -0
  10. package/schemas/vscn.schema.json +11007 -0
  11. package/src/adapter/{world-kind.ts → adapter-surface.ts} +6 -6
  12. package/src/adapter/authoring.ts +67 -0
  13. package/src/adapter/game-adapter.ts +8 -8
  14. package/src/adapter/host-context.ts +2 -4
  15. package/src/adapter/index.ts +3 -1
  16. package/src/adapter/system-adapter.ts +73 -0
  17. package/src/adapter/vgai-scene-game-adapter.ts +239 -180
  18. package/src/animation/xstate-animation-binding.ts +300 -262
  19. package/src/animation/xstate-animation-meta.ts +50 -13
  20. package/src/character/cloth-sim.ts +533 -0
  21. package/src/character/spring-chain.ts +307 -0
  22. package/src/core/game-loop.ts +41 -3
  23. package/src/core/seeded-random.ts +161 -0
  24. package/src/core/system-runner.ts +20 -3
  25. package/src/core/types.ts +37 -0
  26. package/src/data/data-asset.ts +1 -1
  27. package/src/dev/performance-profiler.ts +213 -0
  28. package/src/dev/webgl-gpu-timer.ts +53 -0
  29. package/src/ecs/component-manager.ts +45 -12
  30. package/src/ecs/game-component.ts +95 -11
  31. package/src/humanoid/bake.operation.ts +326 -0
  32. package/src/humanoid/body.ts +663 -0
  33. package/src/humanoid/clips.ts +149 -0
  34. package/src/humanoid/compose.ts +209 -0
  35. package/src/humanoid/generate.ts +189 -0
  36. package/src/humanoid/index.ts +36 -0
  37. package/src/humanoid/schema.ts +108 -0
  38. package/src/humanoid/skeleton.ts +345 -0
  39. package/src/index.ts +5 -5
  40. package/src/input/input-manager.ts +701 -22
  41. package/src/input/input-types.ts +5 -2
  42. package/src/manifest/index.ts +5 -5
  43. package/src/manifest/load.ts +125 -72
  44. package/src/manifest/schema.ts +362 -255
  45. package/src/react/game-state.tsx +135 -32
  46. package/src/react/root-adapter.tsx +49 -0
  47. package/src/react/unmanaged-root-detector.ts +66 -0
  48. package/src/react/use-data.ts +12 -2
  49. package/src/runtime/create-runtime.ts +100 -282
  50. package/src/runtime/debug-bridge.ts +483 -0
  51. package/src/runtime/debug-registry.ts +856 -0
  52. package/src/runtime/game.ts +342 -93
  53. package/src/runtime/gameplay-rng-trap.ts +134 -0
  54. package/src/runtime/input-router.ts +7 -7
  55. package/src/runtime/mount-game.ts +40 -38
  56. package/src/runtime/mount-manifest.ts +169 -37
  57. package/src/runtime/render-control.ts +13 -13
  58. package/src/runtime/render-seed.ts +1 -1
  59. package/src/runtime/state-bridge.ts +24 -10
  60. package/src/runtime/types.ts +110 -28
  61. package/src/scene/asset-registry.ts +22 -0
  62. package/src/scene/component-registry.ts +14 -3
  63. package/src/scene/defaults.ts +1 -0
  64. package/src/scene/light-camera-factory.ts +11 -3
  65. package/src/scene/scene-apply.ts +55 -4
  66. package/src/scene/scene-loader.ts +10 -27
  67. package/src/scene/scene-types.ts +0 -1
  68. package/src/scene/schema/index.ts +0 -34
  69. package/src/scene/schema/light.ts +16 -1
  70. package/src/scene/schema/material.ts +96 -91
  71. package/src/scene/schema/scene-file.ts +1 -7
  72. package/src/scene/user-data.ts +14 -1
  73. package/src/setup/setup-renderer.ts +1 -1
  74. package/src/tools/define-tool.ts +50 -11
  75. package/src/world2d/authoring-2d.ts +17 -1
  76. package/src/world2d/collision-2d.ts +1 -1
  77. package/src/world2d/pixi-game-adapter.ts +19 -17
  78. package/src/world2d/scene2d-loader.ts +1 -0
  79. package/src/world2d/types.ts +8 -2
  80. package/dist/adapter/authoring.d.ts +0 -404
  81. package/dist/adapter/authoring.d.ts.map +0 -1
  82. package/dist/adapter/authoring.js +0 -22
  83. package/dist/adapter/colyseus-networking-adapter.d.ts +0 -43
  84. package/dist/adapter/colyseus-networking-adapter.d.ts.map +0 -1
  85. package/dist/adapter/colyseus-networking-adapter.js +0 -38
  86. package/dist/adapter/first-party-systems.d.ts +0 -38
  87. package/dist/adapter/first-party-systems.d.ts.map +0 -1
  88. package/dist/adapter/first-party-systems.js +0 -77
  89. package/dist/adapter/game-adapter.d.ts +0 -133
  90. package/dist/adapter/game-adapter.d.ts.map +0 -1
  91. package/dist/adapter/game-adapter.js +0 -10
  92. package/dist/adapter/host-context.d.ts +0 -73
  93. package/dist/adapter/host-context.d.ts.map +0 -1
  94. package/dist/adapter/host-context.js +0 -16
  95. package/dist/adapter/index.d.ts +0 -22
  96. package/dist/adapter/index.d.ts.map +0 -1
  97. package/dist/adapter/index.js +0 -15
  98. package/dist/adapter/ingest/game-contract.d.ts +0 -53
  99. package/dist/adapter/ingest/game-contract.d.ts.map +0 -1
  100. package/dist/adapter/ingest/game-contract.js +0 -30
  101. package/dist/adapter/ingest/overlay-applier.d.ts +0 -118
  102. package/dist/adapter/ingest/overlay-applier.d.ts.map +0 -1
  103. package/dist/adapter/ingest/overlay-applier.js +0 -132
  104. package/dist/adapter/ingest/overlay-apply.d.ts +0 -60
  105. package/dist/adapter/ingest/overlay-apply.d.ts.map +0 -1
  106. package/dist/adapter/ingest/overlay-apply.js +0 -101
  107. package/dist/adapter/ingest/overlay-file.d.ts +0 -79
  108. package/dist/adapter/ingest/overlay-file.d.ts.map +0 -1
  109. package/dist/adapter/ingest/overlay-file.js +0 -66
  110. package/dist/adapter/ingest/overlay-report.d.ts +0 -113
  111. package/dist/adapter/ingest/overlay-report.d.ts.map +0 -1
  112. package/dist/adapter/ingest/overlay-report.js +0 -103
  113. package/dist/adapter/ingest/scene-capture.d.ts +0 -97
  114. package/dist/adapter/ingest/scene-capture.d.ts.map +0 -1
  115. package/dist/adapter/ingest/scene-capture.js +0 -248
  116. package/dist/adapter/ingest/upstream-pin.d.ts +0 -47
  117. package/dist/adapter/ingest/upstream-pin.d.ts.map +0 -1
  118. package/dist/adapter/ingest/upstream-pin.js +0 -50
  119. package/dist/adapter/loop-gate-report.d.ts +0 -34
  120. package/dist/adapter/loop-gate-report.d.ts.map +0 -1
  121. package/dist/adapter/loop-gate-report.js +0 -37
  122. package/dist/adapter/rapier-physics-adapter.d.ts +0 -12
  123. package/dist/adapter/rapier-physics-adapter.d.ts.map +0 -1
  124. package/dist/adapter/rapier-physics-adapter.js +0 -46
  125. package/dist/adapter/system-adapter.d.ts +0 -133
  126. package/dist/adapter/system-adapter.d.ts.map +0 -1
  127. package/dist/adapter/system-adapter.js +0 -13
  128. package/dist/adapter/transform.d.ts +0 -18
  129. package/dist/adapter/transform.d.ts.map +0 -1
  130. package/dist/adapter/transform.js +0 -1
  131. package/dist/adapter/vgai-scene-game-adapter.d.ts +0 -116
  132. package/dist/adapter/vgai-scene-game-adapter.d.ts.map +0 -1
  133. package/dist/adapter/vgai-scene-game-adapter.js +0 -714
  134. package/dist/adapter/world-kind.d.ts +0 -30
  135. package/dist/adapter/world-kind.d.ts.map +0 -1
  136. package/dist/adapter/world-kind.js +0 -18
  137. package/dist/ai/navigation.d.ts +0 -64
  138. package/dist/ai/navigation.d.ts.map +0 -1
  139. package/dist/ai/navigation.js +0 -133
  140. package/dist/animation/anim-graph-types.d.ts +0 -25
  141. package/dist/animation/anim-graph-types.d.ts.map +0 -1
  142. package/dist/animation/anim-graph-types.js +0 -1
  143. package/dist/animation/animation-clock.d.ts +0 -213
  144. package/dist/animation/animation-clock.d.ts.map +0 -1
  145. package/dist/animation/animation-clock.js +0 -301
  146. package/dist/animation/blend-node.d.ts +0 -22
  147. package/dist/animation/blend-node.d.ts.map +0 -1
  148. package/dist/animation/blend-node.js +0 -97
  149. package/dist/animation/camera-ownership.d.ts +0 -250
  150. package/dist/animation/camera-ownership.d.ts.map +0 -1
  151. package/dist/animation/camera-ownership.js +0 -169
  152. package/dist/animation/cinematic-cues.d.ts +0 -200
  153. package/dist/animation/cinematic-cues.d.ts.map +0 -1
  154. package/dist/animation/cinematic-cues.js +0 -213
  155. package/dist/animation/clip-map.d.ts +0 -12
  156. package/dist/animation/clip-map.d.ts.map +0 -1
  157. package/dist/animation/clip-map.js +0 -37
  158. package/dist/animation/gsap-registration.d.ts +0 -119
  159. package/dist/animation/gsap-registration.d.ts.map +0 -1
  160. package/dist/animation/gsap-registration.js +0 -92
  161. package/dist/animation/theatre-clock-binding.d.ts +0 -89
  162. package/dist/animation/theatre-clock-binding.d.ts.map +0 -1
  163. package/dist/animation/theatre-clock-binding.js +0 -29
  164. package/dist/animation/theatre-director.d.ts +0 -242
  165. package/dist/animation/theatre-director.d.ts.map +0 -1
  166. package/dist/animation/theatre-director.js +0 -235
  167. package/dist/animation/theatre-object-binding.d.ts +0 -305
  168. package/dist/animation/theatre-object-binding.d.ts.map +0 -1
  169. package/dist/animation/theatre-object-binding.js +0 -351
  170. package/dist/animation/xstate-animation-binding.d.ts +0 -111
  171. package/dist/animation/xstate-animation-binding.d.ts.map +0 -1
  172. package/dist/animation/xstate-animation-binding.js +0 -307
  173. package/dist/animation/xstate-animation-meta.d.ts +0 -228
  174. package/dist/animation/xstate-animation-meta.d.ts.map +0 -1
  175. package/dist/animation/xstate-animation-meta.js +0 -221
  176. package/dist/assets.d.ts +0 -26
  177. package/dist/assets.d.ts.map +0 -1
  178. package/dist/assets.js +0 -55
  179. package/dist/audio/index.d.ts +0 -4
  180. package/dist/audio/index.d.ts.map +0 -1
  181. package/dist/audio/index.js +0 -24
  182. package/dist/audio/tone-clock-binding.d.ts +0 -75
  183. package/dist/audio/tone-clock-binding.d.ts.map +0 -1
  184. package/dist/audio/tone-clock-binding.js +0 -29
  185. package/dist/audio/tone-context.d.ts +0 -114
  186. package/dist/audio/tone-context.d.ts.map +0 -1
  187. package/dist/audio/tone-context.js +0 -39
  188. package/dist/audio/tone-offline-render.d.ts +0 -90
  189. package/dist/audio/tone-offline-render.d.ts.map +0 -1
  190. package/dist/audio/tone-offline-render.js +0 -56
  191. package/dist/audio/wav-encode.d.ts +0 -38
  192. package/dist/audio/wav-encode.d.ts.map +0 -1
  193. package/dist/audio/wav-encode.js +0 -97
  194. package/dist/core/game-loop.d.ts +0 -21
  195. package/dist/core/game-loop.d.ts.map +0 -1
  196. package/dist/core/game-loop.js +0 -130
  197. package/dist/core/system-runner.d.ts +0 -120
  198. package/dist/core/system-runner.d.ts.map +0 -1
  199. package/dist/core/system-runner.js +0 -286
  200. package/dist/core/types.d.ts +0 -58
  201. package/dist/core/types.d.ts.map +0 -1
  202. package/dist/core/types.js +0 -25
  203. package/dist/data/data-asset.d.ts +0 -101
  204. package/dist/data/data-asset.d.ts.map +0 -1
  205. package/dist/data/data-asset.js +0 -122
  206. package/dist/data/data-check-core.d.ts +0 -110
  207. package/dist/data/data-check-core.d.ts.map +0 -1
  208. package/dist/data/data-check-core.js +0 -178
  209. package/dist/data/data-ref.d.ts +0 -79
  210. package/dist/data/data-ref.d.ts.map +0 -1
  211. package/dist/data/data-ref.js +0 -130
  212. package/dist/data/vite-plugin-data.d.ts +0 -79
  213. package/dist/data/vite-plugin-data.d.ts.map +0 -1
  214. package/dist/data/vite-plugin-data.js +0 -217
  215. package/dist/dev/console-bridge.d.ts +0 -22
  216. package/dist/dev/console-bridge.d.ts.map +0 -1
  217. package/dist/dev/console-bridge.js +0 -71
  218. package/dist/dev/debug-draw.d.ts +0 -24
  219. package/dist/dev/debug-draw.d.ts.map +0 -1
  220. package/dist/dev/debug-draw.js +0 -73
  221. package/dist/dev/logger.d.ts +0 -30
  222. package/dist/dev/logger.d.ts.map +0 -1
  223. package/dist/dev/logger.js +0 -90
  224. package/dist/ecs/component-manager.d.ts +0 -189
  225. package/dist/ecs/component-manager.d.ts.map +0 -1
  226. package/dist/ecs/component-manager.js +0 -676
  227. package/dist/ecs/game-component.d.ts +0 -97
  228. package/dist/ecs/game-component.d.ts.map +0 -1
  229. package/dist/ecs/game-component.js +0 -80
  230. package/dist/ecs/hmr-swap-report.d.ts +0 -53
  231. package/dist/ecs/hmr-swap-report.d.ts.map +0 -1
  232. package/dist/ecs/hmr-swap-report.js +0 -55
  233. package/dist/index.d.ts +0 -37
  234. package/dist/index.d.ts.map +0 -1
  235. package/dist/index.js +0 -30
  236. package/dist/input/input-manager.d.ts +0 -596
  237. package/dist/input/input-manager.d.ts.map +0 -1
  238. package/dist/input/input-manager.js +0 -1564
  239. package/dist/input/input-types.d.ts +0 -171
  240. package/dist/input/input-types.d.ts.map +0 -1
  241. package/dist/input/input-types.js +0 -1
  242. package/dist/input/prompt-labels.d.ts +0 -21
  243. package/dist/input/prompt-labels.d.ts.map +0 -1
  244. package/dist/input/prompt-labels.js +0 -121
  245. package/dist/input/rebind-controller.d.ts +0 -59
  246. package/dist/input/rebind-controller.d.ts.map +0 -1
  247. package/dist/input/rebind-controller.js +0 -85
  248. package/dist/input/schema.d.ts +0 -16
  249. package/dist/input/schema.d.ts.map +0 -1
  250. package/dist/input/schema.js +0 -228
  251. package/dist/loader.d.ts +0 -43
  252. package/dist/loader.d.ts.map +0 -1
  253. package/dist/loader.js +0 -59
  254. package/dist/manifest/index.d.ts +0 -5
  255. package/dist/manifest/index.d.ts.map +0 -1
  256. package/dist/manifest/index.js +0 -8
  257. package/dist/manifest/load-file.d.ts +0 -4
  258. package/dist/manifest/load-file.d.ts.map +0 -1
  259. package/dist/manifest/load-file.js +0 -14
  260. package/dist/manifest/load.d.ts +0 -117
  261. package/dist/manifest/load.d.ts.map +0 -1
  262. package/dist/manifest/load.js +0 -255
  263. package/dist/manifest/schema.d.ts +0 -173
  264. package/dist/manifest/schema.d.ts.map +0 -1
  265. package/dist/manifest/schema.js +0 -302
  266. package/dist/physics/collision-system.d.ts +0 -41
  267. package/dist/physics/collision-system.d.ts.map +0 -1
  268. package/dist/physics/collision-system.js +0 -64
  269. package/dist/physics/physics-registry.d.ts +0 -45
  270. package/dist/physics/physics-registry.d.ts.map +0 -1
  271. package/dist/physics/physics-registry.js +0 -65
  272. package/dist/physics/transform-writer.d.ts +0 -16
  273. package/dist/physics/transform-writer.d.ts.map +0 -1
  274. package/dist/physics/transform-writer.js +0 -38
  275. package/dist/physics/trigger-dispatch.d.ts +0 -24
  276. package/dist/physics/trigger-dispatch.d.ts.map +0 -1
  277. package/dist/physics/trigger-dispatch.js +0 -80
  278. package/dist/react/game-state.d.ts +0 -105
  279. package/dist/react/game-state.d.ts.map +0 -1
  280. package/dist/react/game-state.js +0 -144
  281. package/dist/react/use-data.d.ts +0 -60
  282. package/dist/react/use-data.d.ts.map +0 -1
  283. package/dist/react/use-data.js +0 -96
  284. package/dist/react/use-selection.d.ts +0 -75
  285. package/dist/react/use-selection.d.ts.map +0 -1
  286. package/dist/react/use-selection.js +0 -90
  287. package/dist/render/auto-batcher.d.ts +0 -34
  288. package/dist/render/auto-batcher.d.ts.map +0 -1
  289. package/dist/render/auto-batcher.js +0 -140
  290. package/dist/render/render-batch-system.d.ts +0 -33
  291. package/dist/render/render-batch-system.d.ts.map +0 -1
  292. package/dist/render/render-batch-system.js +0 -230
  293. package/dist/render/render-features.d.ts +0 -47
  294. package/dist/render/render-features.d.ts.map +0 -1
  295. package/dist/render/render-features.js +0 -105
  296. package/dist/render/render-settings.d.ts +0 -36
  297. package/dist/render/render-settings.d.ts.map +0 -1
  298. package/dist/render/render-settings.js +0 -51
  299. package/dist/runtime/create-runtime.d.ts +0 -280
  300. package/dist/runtime/create-runtime.d.ts.map +0 -1
  301. package/dist/runtime/create-runtime.js +0 -795
  302. package/dist/runtime/frame-selector-cache.d.ts +0 -41
  303. package/dist/runtime/frame-selector-cache.d.ts.map +0 -1
  304. package/dist/runtime/frame-selector-cache.js +0 -65
  305. package/dist/runtime/game.d.ts +0 -433
  306. package/dist/runtime/game.d.ts.map +0 -1
  307. package/dist/runtime/game.js +0 -569
  308. package/dist/runtime/input-router.d.ts +0 -78
  309. package/dist/runtime/input-router.d.ts.map +0 -1
  310. package/dist/runtime/input-router.js +0 -171
  311. package/dist/runtime/mount-game.d.ts +0 -129
  312. package/dist/runtime/mount-game.d.ts.map +0 -1
  313. package/dist/runtime/mount-game.js +0 -152
  314. package/dist/runtime/mount-manifest.d.ts +0 -119
  315. package/dist/runtime/mount-manifest.d.ts.map +0 -1
  316. package/dist/runtime/mount-manifest.js +0 -204
  317. package/dist/runtime/render-audio-control.d.ts +0 -110
  318. package/dist/runtime/render-audio-control.d.ts.map +0 -1
  319. package/dist/runtime/render-audio-control.js +0 -111
  320. package/dist/runtime/render-control.d.ts +0 -291
  321. package/dist/runtime/render-control.d.ts.map +0 -1
  322. package/dist/runtime/render-control.js +0 -264
  323. package/dist/runtime/render-seed.d.ts +0 -57
  324. package/dist/runtime/render-seed.d.ts.map +0 -1
  325. package/dist/runtime/render-seed.js +0 -74
  326. package/dist/runtime/scene-ui-bridge.d.ts +0 -69
  327. package/dist/runtime/scene-ui-bridge.d.ts.map +0 -1
  328. package/dist/runtime/scene-ui-bridge.js +0 -23
  329. package/dist/runtime/scene-ui-data.d.ts +0 -13
  330. package/dist/runtime/scene-ui-data.d.ts.map +0 -1
  331. package/dist/runtime/scene-ui-data.js +0 -92
  332. package/dist/runtime/state-bridge.d.ts +0 -47
  333. package/dist/runtime/state-bridge.d.ts.map +0 -1
  334. package/dist/runtime/state-bridge.js +0 -53
  335. package/dist/runtime/types.d.ts +0 -179
  336. package/dist/runtime/types.d.ts.map +0 -1
  337. package/dist/runtime/types.js +0 -1
  338. package/dist/scene/asset-loaders.d.ts +0 -79
  339. package/dist/scene/asset-loaders.d.ts.map +0 -1
  340. package/dist/scene/asset-loaders.js +0 -141
  341. package/dist/scene/asset-paths.d.ts +0 -11
  342. package/dist/scene/asset-paths.d.ts.map +0 -1
  343. package/dist/scene/asset-paths.js +0 -108
  344. package/dist/scene/asset-ref-check.d.ts +0 -88
  345. package/dist/scene/asset-ref-check.d.ts.map +0 -1
  346. package/dist/scene/asset-ref-check.js +0 -214
  347. package/dist/scene/asset-registry.d.ts +0 -30
  348. package/dist/scene/asset-registry.d.ts.map +0 -1
  349. package/dist/scene/asset-registry.js +0 -50
  350. package/dist/scene/collider-dimensions.d.ts +0 -63
  351. package/dist/scene/collider-dimensions.d.ts.map +0 -1
  352. package/dist/scene/collider-dimensions.js +0 -98
  353. package/dist/scene/component-registry.d.ts +0 -17
  354. package/dist/scene/component-registry.d.ts.map +0 -1
  355. package/dist/scene/component-registry.js +0 -28
  356. package/dist/scene/defaults.d.ts +0 -252
  357. package/dist/scene/defaults.d.ts.map +0 -1
  358. package/dist/scene/defaults.js +0 -151
  359. package/dist/scene/geometries/index.d.ts +0 -8
  360. package/dist/scene/geometries/index.d.ts.map +0 -1
  361. package/dist/scene/geometries/index.js +0 -7
  362. package/dist/scene/geometries/terrain.d.ts +0 -2
  363. package/dist/scene/geometries/terrain.d.ts.map +0 -1
  364. package/dist/scene/geometries/terrain.js +0 -37
  365. package/dist/scene/geometry-registry.d.ts +0 -24
  366. package/dist/scene/geometry-registry.d.ts.map +0 -1
  367. package/dist/scene/geometry-registry.js +0 -20
  368. package/dist/scene/instance-registry.d.ts +0 -36
  369. package/dist/scene/instance-registry.d.ts.map +0 -1
  370. package/dist/scene/instance-registry.js +0 -55
  371. package/dist/scene/instancers/grid.d.ts +0 -2
  372. package/dist/scene/instancers/grid.d.ts.map +0 -1
  373. package/dist/scene/instancers/grid.js +0 -36
  374. package/dist/scene/instancers/index.d.ts +0 -8
  375. package/dist/scene/instancers/index.d.ts.map +0 -1
  376. package/dist/scene/instancers/index.js +0 -7
  377. package/dist/scene/light-camera-factory.d.ts +0 -23
  378. package/dist/scene/light-camera-factory.d.ts.map +0 -1
  379. package/dist/scene/light-camera-factory.js +0 -68
  380. package/dist/scene/material-factory.d.ts +0 -17
  381. package/dist/scene/material-factory.d.ts.map +0 -1
  382. package/dist/scene/material-factory.js +0 -197
  383. package/dist/scene/material-registry.d.ts +0 -40
  384. package/dist/scene/material-registry.d.ts.map +0 -1
  385. package/dist/scene/material-registry.js +0 -44
  386. package/dist/scene/materials/index.d.ts +0 -8
  387. package/dist/scene/materials/index.d.ts.map +0 -1
  388. package/dist/scene/materials/index.js +0 -7
  389. package/dist/scene/materials/water.d.ts +0 -2
  390. package/dist/scene/materials/water.d.ts.map +0 -1
  391. package/dist/scene/materials/water.js +0 -54
  392. package/dist/scene/parse.d.ts +0 -23
  393. package/dist/scene/parse.d.ts.map +0 -1
  394. package/dist/scene/parse.js +0 -179
  395. package/dist/scene/particles-factory.d.ts +0 -33
  396. package/dist/scene/particles-factory.d.ts.map +0 -1
  397. package/dist/scene/particles-factory.js +0 -282
  398. package/dist/scene/scene-apply.d.ts +0 -109
  399. package/dist/scene/scene-apply.d.ts.map +0 -1
  400. package/dist/scene/scene-apply.js +0 -326
  401. package/dist/scene/scene-diff-schema.d.ts +0 -285
  402. package/dist/scene/scene-diff-schema.d.ts.map +0 -1
  403. package/dist/scene/scene-diff-schema.js +0 -92
  404. package/dist/scene/scene-diff-types.d.ts +0 -40
  405. package/dist/scene/scene-diff-types.d.ts.map +0 -1
  406. package/dist/scene/scene-diff-types.js +0 -14
  407. package/dist/scene/scene-loader.d.ts +0 -177
  408. package/dist/scene/scene-loader.d.ts.map +0 -1
  409. package/dist/scene/scene-loader.js +0 -1213
  410. package/dist/scene/scene-query.d.ts +0 -11
  411. package/dist/scene/scene-query.d.ts.map +0 -1
  412. package/dist/scene/scene-query.js +0 -63
  413. package/dist/scene/scene-types.d.ts +0 -10
  414. package/dist/scene/scene-types.d.ts.map +0 -1
  415. package/dist/scene/scene-types.js +0 -8
  416. package/dist/scene/scene-version.d.ts +0 -26
  417. package/dist/scene/scene-version.d.ts.map +0 -1
  418. package/dist/scene/scene-version.js +0 -34
  419. package/dist/scene/schema/animation.d.ts +0 -8
  420. package/dist/scene/schema/animation.d.ts.map +0 -1
  421. package/dist/scene/schema/animation.js +0 -42
  422. package/dist/scene/schema/audio.d.ts +0 -13
  423. package/dist/scene/schema/audio.d.ts.map +0 -1
  424. package/dist/scene/schema/audio.js +0 -22
  425. package/dist/scene/schema/camera.d.ts +0 -28
  426. package/dist/scene/schema/camera.d.ts.map +0 -1
  427. package/dist/scene/schema/camera.js +0 -17
  428. package/dist/scene/schema/collider.d.ts +0 -40
  429. package/dist/scene/schema/collider.d.ts.map +0 -1
  430. package/dist/scene/schema/collider.js +0 -55
  431. package/dist/scene/schema/entity-ref.d.ts +0 -31
  432. package/dist/scene/schema/entity-ref.d.ts.map +0 -1
  433. package/dist/scene/schema/entity-ref.js +0 -61
  434. package/dist/scene/schema/entity.d.ts +0 -1036
  435. package/dist/scene/schema/entity.d.ts.map +0 -1
  436. package/dist/scene/schema/entity.js +0 -153
  437. package/dist/scene/schema/environment.d.ts +0 -425
  438. package/dist/scene/schema/environment.d.ts.map +0 -1
  439. package/dist/scene/schema/environment.js +0 -357
  440. package/dist/scene/schema/index.d.ts +0 -39
  441. package/dist/scene/schema/index.d.ts.map +0 -1
  442. package/dist/scene/schema/index.js +0 -20
  443. package/dist/scene/schema/instances.d.ts +0 -14
  444. package/dist/scene/schema/instances.d.ts.map +0 -1
  445. package/dist/scene/schema/instances.js +0 -28
  446. package/dist/scene/schema/joint.d.ts +0 -23
  447. package/dist/scene/schema/joint.d.ts.map +0 -1
  448. package/dist/scene/schema/joint.js +0 -23
  449. package/dist/scene/schema/light.d.ts +0 -38
  450. package/dist/scene/schema/light.d.ts.map +0 -1
  451. package/dist/scene/schema/light.js +0 -26
  452. package/dist/scene/schema/material.d.ts +0 -199
  453. package/dist/scene/schema/material.d.ts.map +0 -1
  454. package/dist/scene/schema/material.js +0 -99
  455. package/dist/scene/schema/mesh.d.ts +0 -48
  456. package/dist/scene/schema/mesh.d.ts.map +0 -1
  457. package/dist/scene/schema/mesh.js +0 -82
  458. package/dist/scene/schema/particles.d.ts +0 -2178
  459. package/dist/scene/schema/particles.d.ts.map +0 -1
  460. package/dist/scene/schema/particles.js +0 -321
  461. package/dist/scene/schema/physics.d.ts +0 -56
  462. package/dist/scene/schema/physics.d.ts.map +0 -1
  463. package/dist/scene/schema/physics.js +0 -37
  464. package/dist/scene/schema/scene-file.d.ts +0 -304
  465. package/dist/scene/schema/scene-file.d.ts.map +0 -1
  466. package/dist/scene/schema/scene-file.js +0 -262
  467. package/dist/scene/schema/shadow.d.ts +0 -28
  468. package/dist/scene/schema/shadow.d.ts.map +0 -1
  469. package/dist/scene/schema/shadow.js +0 -20
  470. package/dist/scene/schema/spline.d.ts +0 -25
  471. package/dist/scene/schema/spline.d.ts.map +0 -1
  472. package/dist/scene/schema/spline.js +0 -15
  473. package/dist/scene/schema/tuples.d.ts +0 -12
  474. package/dist/scene/schema/tuples.d.ts.map +0 -1
  475. package/dist/scene/schema/tuples.js +0 -14
  476. package/dist/scene/schema/ui.d.ts +0 -880
  477. package/dist/scene/schema/ui.d.ts.map +0 -1
  478. package/dist/scene/schema/ui.js +0 -506
  479. package/dist/scene/user-data.d.ts +0 -171
  480. package/dist/scene/user-data.d.ts.map +0 -1
  481. package/dist/scene/user-data.js +0 -137
  482. package/dist/setup/setup-audio.d.ts +0 -20
  483. package/dist/setup/setup-audio.d.ts.map +0 -1
  484. package/dist/setup/setup-audio.js +0 -41
  485. package/dist/setup/setup-particles.d.ts +0 -17
  486. package/dist/setup/setup-particles.d.ts.map +0 -1
  487. package/dist/setup/setup-particles.js +0 -16
  488. package/dist/setup/setup-physics.d.ts +0 -25
  489. package/dist/setup/setup-physics.d.ts.map +0 -1
  490. package/dist/setup/setup-physics.js +0 -51
  491. package/dist/setup/setup-renderer.d.ts +0 -69
  492. package/dist/setup/setup-renderer.d.ts.map +0 -1
  493. package/dist/setup/setup-renderer.js +0 -363
  494. package/dist/tools/define-tool.d.ts +0 -105
  495. package/dist/tools/define-tool.d.ts.map +0 -1
  496. package/dist/tools/define-tool.js +0 -82
  497. package/dist/world2d/authoring-2d.d.ts +0 -76
  498. package/dist/world2d/authoring-2d.d.ts.map +0 -1
  499. package/dist/world2d/authoring-2d.js +0 -176
  500. package/dist/world2d/capture-to-scene2d.d.ts +0 -5
  501. package/dist/world2d/capture-to-scene2d.d.ts.map +0 -1
  502. package/dist/world2d/capture-to-scene2d.js +0 -49
  503. package/dist/world2d/collision-2d.d.ts +0 -52
  504. package/dist/world2d/collision-2d.d.ts.map +0 -1
  505. package/dist/world2d/collision-2d.js +0 -70
  506. package/dist/world2d/components-2d.d.ts +0 -47
  507. package/dist/world2d/components-2d.d.ts.map +0 -1
  508. package/dist/world2d/components-2d.js +0 -77
  509. package/dist/world2d/index.d.ts +0 -34
  510. package/dist/world2d/index.d.ts.map +0 -1
  511. package/dist/world2d/index.js +0 -32
  512. package/dist/world2d/ingest-iframe-2d.d.ts +0 -82
  513. package/dist/world2d/ingest-iframe-2d.d.ts.map +0 -1
  514. package/dist/world2d/ingest-iframe-2d.js +0 -166
  515. package/dist/world2d/ingest2d.d.ts +0 -97
  516. package/dist/world2d/ingest2d.d.ts.map +0 -1
  517. package/dist/world2d/ingest2d.js +0 -40
  518. package/dist/world2d/physics2d-registry.d.ts +0 -24
  519. package/dist/world2d/physics2d-registry.d.ts.map +0 -1
  520. package/dist/world2d/physics2d-registry.js +0 -38
  521. package/dist/world2d/pixi-game-adapter.d.ts +0 -107
  522. package/dist/world2d/pixi-game-adapter.d.ts.map +0 -1
  523. package/dist/world2d/pixi-game-adapter.js +0 -211
  524. package/dist/world2d/pixi-surface.d.ts +0 -39
  525. package/dist/world2d/pixi-surface.d.ts.map +0 -1
  526. package/dist/world2d/pixi-surface.js +0 -47
  527. package/dist/world2d/scene-capture-2d.d.ts +0 -43
  528. package/dist/world2d/scene-capture-2d.d.ts.map +0 -1
  529. package/dist/world2d/scene-capture-2d.js +0 -92
  530. package/dist/world2d/scene2d-loader.d.ts +0 -27
  531. package/dist/world2d/scene2d-loader.d.ts.map +0 -1
  532. package/dist/world2d/scene2d-loader.js +0 -274
  533. package/dist/world2d/schema/entity2d.d.ts +0 -102
  534. package/dist/world2d/schema/entity2d.d.ts.map +0 -1
  535. package/dist/world2d/schema/entity2d.js +0 -119
  536. package/dist/world2d/schema/physics2d.d.ts +0 -46
  537. package/dist/world2d/schema/physics2d.d.ts.map +0 -1
  538. package/dist/world2d/schema/physics2d.js +0 -45
  539. package/dist/world2d/schema/sprite.d.ts +0 -42
  540. package/dist/world2d/schema/sprite.d.ts.map +0 -1
  541. package/dist/world2d/schema/sprite.js +0 -63
  542. package/dist/world2d/schema/tilemap.d.ts +0 -15
  543. package/dist/world2d/schema/tilemap.d.ts.map +0 -1
  544. package/dist/world2d/schema/tilemap.js +0 -19
  545. package/dist/world2d/schema/tuples2d.d.ts +0 -20
  546. package/dist/world2d/schema/tuples2d.d.ts.map +0 -1
  547. package/dist/world2d/schema/tuples2d.js +0 -19
  548. package/dist/world2d/system-adapters-2d.d.ts +0 -16
  549. package/dist/world2d/system-adapters-2d.d.ts.map +0 -1
  550. package/dist/world2d/system-adapters-2d.js +0 -37
  551. package/dist/world2d/transform-writer-2d.d.ts +0 -16
  552. package/dist/world2d/transform-writer-2d.d.ts.map +0 -1
  553. package/dist/world2d/transform-writer-2d.js +0 -22
  554. package/dist/world2d/types.d.ts +0 -53
  555. package/dist/world2d/types.d.ts.map +0 -1
  556. package/dist/world2d/types.js +0 -1
  557. package/src/runtime/scene-ui-bridge.ts +0 -86
  558. package/src/runtime/scene-ui-data.ts +0 -119
  559. package/src/scene/schema/ui.ts +0 -602
@@ -1,363 +0,0 @@
1
- import { N8AOPostPass } from 'n8ao';
2
- import { BloomEffect, BrightnessContrastEffect, ChromaticAberrationEffect, ColorDepthEffect, DepthOfFieldEffect, DotScreenEffect, EffectComposer, EffectPass, GlitchEffect, GodRaysEffect, GridEffect, HueSaturationEffect, LensDistortionEffect, NoiseEffect, NormalPass, OutlineEffect, PixelationEffect, RenderPass, ScanlineEffect, SepiaEffect, ShockWaveEffect, SMAAEffect, SMAAPreset, SSAOEffect, TiltShiftEffect, VignetteEffect, } from 'postprocessing';
3
- import { MotionBlurEffect, SSGIEffect, SSREffect, VelocityDepthNormalPass } from 'realism-effects';
4
- import * as THREE from 'three';
5
- import { resolveRenderSettings } from '../render/render-settings';
6
- import { DEFAULTS } from '../scene/defaults';
7
- /**
8
- * Apply the live renderer-level render settings (shadows, resolution scale) from
9
- * the resolved cascade. `antialias`/`backend` are reload-only (renderer re-init)
10
- * and are handled at construction, not here. Pass the scene `rendering` scope
11
- * (e.g. `env.rendering`); absent values fall back to the registry defaults so
12
- * behavior is unchanged when a scene omits `rendering`.
13
- *
14
- * `basePixelRatio` is the call-site's native pixel-ratio policy (the runtime caps
15
- * at 2; the editor uses the raw devicePixelRatio); `resolutionScale` multiplies it.
16
- */
17
- export function applyRendererSettings(renderer, rendering, basePixelRatio = Math.min(window.devicePixelRatio, 2)) {
18
- const settings = resolveRenderSettings(rendering);
19
- renderer.shadowMap.enabled = Boolean(settings['shadows']);
20
- const scale = Number(settings['resolutionScale']) || 1;
21
- renderer.setPixelRatio(basePixelRatio * scale);
22
- }
23
- /**
24
- * Create ONLY the WebGL renderer. The HOST owns the renderer (see
25
- * `HostContext.renderer`); the game/adapter owns the scene/camera/composer it
26
- * renders into. Split out of `setupRenderer` for the adapter inversion.
27
- *
28
- * `rendering` is the scene-level render scope (`env.rendering`); it seeds the
29
- * reload-only `antialias` option at construction and the live shadow/resolution
30
- * settings (via {@link applyRendererSettings}). Absent → registry defaults.
31
- *
32
- * `opts` is additive (T6.1 slice 1, COMPOSITION-DESIGN.md D5 §1/§4): omitted
33
- * entirely, construction is byte-identical to before (no `alpha`/
34
- * `preserveDrawingBuffer` keys at all) — the legacy single-canvas host never
35
- * passes it. The worlds path passes `alpha:true` for every stacked canvas
36
- * above the bottom one (so its clear-alpha-0 shows the layer below through
37
- * it) and `preserveDrawingBuffer:true` for every stacked canvas (the
38
- * recorded capture-tier cost, paid once here rather than re-derived later).
39
- */
40
- export function createHostRenderer(canvas, width = window.innerWidth, height = window.innerHeight, rendering, opts) {
41
- // A newly-shown editor tab can report 0x0 for one layout frame. WebGL render
42
- // targets cannot have zero-sized attachments, so boot at the smallest valid
43
- // backing size and let the normal resize path apply the real dimensions.
44
- const safeWidth = Math.max(1, width);
45
- const safeHeight = Math.max(1, height);
46
- const settings = resolveRenderSettings(rendering);
47
- const renderer = new THREE.WebGLRenderer({
48
- canvas,
49
- antialias: Boolean(settings['antialias']),
50
- powerPreference: 'high-performance',
51
- ...(opts?.alpha ? { alpha: true } : {}),
52
- ...(opts?.preserveDrawingBuffer ? { preserveDrawingBuffer: true } : {}),
53
- });
54
- renderer.setSize(safeWidth, safeHeight);
55
- applyRendererSettings(renderer, rendering);
56
- renderer.shadowMap.type = THREE.PCFSoftShadowMap;
57
- renderer.toneMapping = toneMappingModes[DEFAULTS.toneMapping.mode] ?? THREE.ACESFilmicToneMapping;
58
- renderer.toneMappingExposure = DEFAULTS.toneMapping.exposure;
59
- return renderer;
60
- }
61
- /**
62
- * Create the scene, camera, and postprocessing composer that a first-party game
63
- * renders into, given a host-provided renderer. The GPU-only `composer` is
64
- * created here; a headless host (no GPU) skips this entirely.
65
- */
66
- export function createSceneView(renderer, width = window.innerWidth, height = window.innerHeight) {
67
- const safeWidth = Math.max(1, width);
68
- const safeHeight = Math.max(1, height);
69
- const scene = new THREE.Scene();
70
- scene.background = new THREE.Color(0x1a1a2e);
71
- const camera = new THREE.PerspectiveCamera(DEFAULTS.camera.fov, safeWidth / safeHeight, DEFAULTS.camera.near, DEFAULTS.camera.far);
72
- camera.position.set(0, 5, 10);
73
- camera.lookAt(0, 0, 0);
74
- const composer = new EffectComposer(renderer);
75
- composer.addPass(new RenderPass(scene, camera));
76
- composer.addPass(new EffectPass(camera, new BloomEffect({ luminanceThreshold: DEFAULTS.postProcessing.bloom.luminanceThreshold })));
77
- return { scene, camera, composer };
78
- }
79
- /**
80
- * Creates the Three.js renderer, scene, camera, and postprocessing pipeline.
81
- *
82
- * This is direct Three.js setup — no abstraction. Edit freely. (Now a thin
83
- * combination of {@link createHostRenderer} + {@link createSceneView}.)
84
- */
85
- export function setupRenderer(canvas, width = window.innerWidth, height = window.innerHeight) {
86
- const renderer = createHostRenderer(canvas, width, height);
87
- const { scene, camera, composer } = createSceneView(renderer, width, height);
88
- return { renderer, scene, camera, composer };
89
- }
90
- const toneMappingModes = {
91
- none: THREE.NoToneMapping,
92
- linear: THREE.LinearToneMapping,
93
- reinhard: THREE.ReinhardToneMapping,
94
- cineon: THREE.CineonToneMapping,
95
- aces: THREE.ACESFilmicToneMapping,
96
- agx: THREE.AgXToneMapping,
97
- };
98
- const smaaPresets = {
99
- low: SMAAPreset.LOW,
100
- medium: SMAAPreset.MEDIUM,
101
- high: SMAAPreset.HIGH,
102
- ultra: SMAAPreset.ULTRA,
103
- };
104
- /**
105
- * Rebuild composer passes from scene environment settings.
106
- * Scenes without toneMapping default to ACES (the runtime default).
107
- * Code can further modify the composer after this call.
108
- *
109
- * Pass objectMap to enable entity-referencing effects (godRays, outline).
110
- * Pass entities to resolve tag-based references (outline).
111
- */
112
- export function applyScenePostProcessing(composer, renderer, scene, camera, env, objectMap, entityTags) {
113
- // Dispose the existing passes before discarding them — removeAllPasses() just
114
- // drops the references, so their GPU render targets would otherwise leak on
115
- // every env edit / scene switch.
116
- for (const pass of composer.passes) {
117
- pass.dispose?.();
118
- }
119
- composer.removeAllPasses();
120
- composer.addPass(new RenderPass(scene, camera));
121
- // ── Tone mapping ──────────────────────────────────────────────────────
122
- const tm = env?.toneMapping;
123
- renderer.toneMapping =
124
- toneMappingModes[tm?.mode ?? DEFAULTS.toneMapping.mode] ?? THREE.ACESFilmicToneMapping;
125
- renderer.toneMappingExposure = tm?.exposure ?? DEFAULTS.toneMapping.exposure;
126
- // ── Master switch ─────────────────────────────────────────────────────
127
- // When post-processing is disabled at the scene/engine level, render the
128
- // plain scene (the RenderPass added above) and skip every effect pass. The
129
- // per-effect `enabled` flags below still apply when the master switch is on.
130
- if (!resolveRenderSettings(env?.rendering)['postProcessing'])
131
- return;
132
- const pp = env?.postProcessing;
133
- const d = DEFAULTS.postProcessing;
134
- // ── Prerequisite passes ───────────────────────────────────────────────
135
- // NormalPass — needed by SSAO
136
- let normalPass;
137
- if (pp?.ssao?.enabled) {
138
- normalPass = new NormalPass(scene, camera);
139
- composer.addPass(normalPass);
140
- }
141
- // VelocityDepthNormalPass — needed by SSR, SSGI, MotionBlur
142
- let velocityPass;
143
- if (pp?.ssr?.enabled || pp?.ssgi?.enabled || pp?.motionBlur?.enabled) {
144
- velocityPass = new VelocityDepthNormalPass(scene, camera);
145
- composer.addPass(velocityPass);
146
- }
147
- // N8AOPostPass — separate Pass, not an Effect
148
- if (pp?.n8ao?.enabled) {
149
- const n8aoPass = new N8AOPostPass(scene, camera);
150
- const cfg = n8aoPass.configuration;
151
- cfg.aoSamples = pp.n8ao.aoSamples ?? d.n8ao.aoSamples;
152
- cfg.aoRadius = pp.n8ao.aoRadius ?? d.n8ao.aoRadius;
153
- cfg.intensity = pp.n8ao.intensity ?? d.n8ao.intensity;
154
- cfg.denoiseSamples = pp.n8ao.denoiseSamples ?? d.n8ao.denoiseSamples;
155
- cfg.denoiseRadius = pp.n8ao.denoiseRadius ?? d.n8ao.denoiseRadius;
156
- cfg.distanceFalloff = pp.n8ao.distanceFalloff ?? d.n8ao.distanceFalloff;
157
- if (pp.n8ao.screenSpaceRadius !== undefined)
158
- cfg.screenSpaceRadius = pp.n8ao.screenSpaceRadius;
159
- if (pp.n8ao.halfRes !== undefined)
160
- cfg.halfRes = pp.n8ao.halfRes;
161
- if (pp.n8ao.color)
162
- cfg.color = new THREE.Color(pp.n8ao.color);
163
- composer.addPass(n8aoPass);
164
- }
165
- // ── Collect Effect instances ──────────────────────────────────────────
166
- const effects = [];
167
- // Anti-aliasing
168
- if (pp?.smaa?.enabled) {
169
- const preset = smaaPresets[pp.smaa.preset ?? d.smaa.preset] ?? SMAAPreset.HIGH;
170
- effects.push(new SMAAEffect({ preset }));
171
- }
172
- // Ambient occlusion
173
- if (pp?.ssao?.enabled && normalPass) {
174
- effects.push(new SSAOEffect(camera, normalPass.texture, {
175
- radius: pp.ssao.radius ?? d.ssao.radius,
176
- intensity: pp.ssao.intensity ?? d.ssao.intensity,
177
- bias: pp.ssao.bias ?? d.ssao.bias,
178
- samples: pp.ssao.samples ?? d.ssao.samples,
179
- rings: pp.ssao.rings ?? d.ssao.rings,
180
- fade: pp.ssao.fade ?? d.ssao.fade,
181
- ...(pp.ssao.color ? { color: new THREE.Color(pp.ssao.color) } : {}),
182
- }));
183
- }
184
- // SSR (realism-effects)
185
- if (pp?.ssr?.enabled && velocityPass) {
186
- effects.push(new SSREffect(scene, camera, velocityPass, {
187
- intensity: pp.ssr.intensity ?? d.ssr.intensity,
188
- exponent: pp.ssr.exponent ?? d.ssr.exponent,
189
- distance: pp.ssr.distance ?? d.ssr.distance,
190
- thickness: pp.ssr.thickness ?? d.ssr.thickness,
191
- maxRoughness: pp.ssr.maxRoughness ?? d.ssr.maxRoughness,
192
- }));
193
- }
194
- // SSGI (realism-effects)
195
- if (pp?.ssgi?.enabled && velocityPass) {
196
- effects.push(new SSGIEffect(scene, camera, velocityPass, {
197
- intensity: pp.ssgi.intensity ?? d.ssgi.intensity,
198
- distance: pp.ssgi.distance ?? d.ssgi.distance,
199
- thickness: pp.ssgi.thickness ?? d.ssgi.thickness,
200
- maxRoughness: pp.ssgi.maxRoughness ?? d.ssgi.maxRoughness,
201
- }));
202
- }
203
- // Motion blur (realism-effects)
204
- if (pp?.motionBlur?.enabled && velocityPass) {
205
- effects.push(new MotionBlurEffect(velocityPass, {
206
- intensity: pp.motionBlur.intensity ?? d.motionBlur.intensity,
207
- jitter: pp.motionBlur.jitter ?? d.motionBlur.jitter,
208
- samples: pp.motionBlur.samples ?? d.motionBlur.samples,
209
- }));
210
- }
211
- // Bloom
212
- if (pp?.bloom?.enabled) {
213
- effects.push(new BloomEffect({
214
- intensity: pp.bloom.intensity ?? d.bloom.intensity,
215
- luminanceThreshold: pp.bloom.luminanceThreshold ?? d.bloom.luminanceThreshold,
216
- luminanceSmoothing: pp.bloom.luminanceSmoothing ?? d.bloom.luminanceSmoothing,
217
- }));
218
- }
219
- // Depth of field
220
- if (pp?.depthOfField?.enabled) {
221
- effects.push(new DepthOfFieldEffect(camera, {
222
- worldFocusDistance: pp.depthOfField.worldFocusDistance ?? d.depthOfField.worldFocusDistance,
223
- worldFocusRange: pp.depthOfField.worldFocusRange ?? d.depthOfField.worldFocusRange,
224
- bokehScale: pp.depthOfField.bokehScale ?? d.depthOfField.bokehScale,
225
- focalLength: pp.depthOfField.focalLength ?? d.depthOfField.focalLength,
226
- }));
227
- }
228
- // Tilt shift
229
- if (pp?.tiltShift?.enabled) {
230
- effects.push(new TiltShiftEffect({
231
- offset: pp.tiltShift.offset ?? d.tiltShift.offset,
232
- rotation: pp.tiltShift.rotation ?? d.tiltShift.rotation,
233
- focusArea: pp.tiltShift.focusArea ?? d.tiltShift.focusArea,
234
- feather: pp.tiltShift.feather ?? d.tiltShift.feather,
235
- }));
236
- }
237
- // God rays (needs entity reference)
238
- if (pp?.godRays?.enabled && pp.godRays.sourceEntity && objectMap) {
239
- const lightObj = objectMap.get(pp.godRays.sourceEntity);
240
- if (lightObj instanceof THREE.Mesh || lightObj instanceof THREE.Points) {
241
- effects.push(new GodRaysEffect(camera, lightObj, {
242
- density: pp.godRays.density ?? d.godRays.density,
243
- decay: pp.godRays.decay ?? d.godRays.decay,
244
- weight: pp.godRays.weight ?? d.godRays.weight,
245
- exposure: pp.godRays.exposure ?? d.godRays.exposure,
246
- samples: pp.godRays.samples ?? d.godRays.samples,
247
- }));
248
- }
249
- }
250
- // Outline (needs entity tag references)
251
- if (pp?.outline?.enabled && objectMap) {
252
- const outlineEffect = new OutlineEffect(scene, camera, {
253
- edgeStrength: pp.outline.edgeStrength ?? d.outline.edgeStrength,
254
- pulseSpeed: pp.outline.pulseSpeed ?? d.outline.pulseSpeed,
255
- visibleEdgeColor: pp.outline.visibleEdgeColor
256
- ? new THREE.Color(pp.outline.visibleEdgeColor).getHex()
257
- : new THREE.Color(d.outline.visibleEdgeColor).getHex(),
258
- hiddenEdgeColor: pp.outline.hiddenEdgeColor
259
- ? new THREE.Color(pp.outline.hiddenEdgeColor).getHex()
260
- : new THREE.Color(d.outline.hiddenEdgeColor).getHex(),
261
- xRay: pp.outline.xRay ?? false,
262
- });
263
- // Add entities matching tags to selection
264
- const tags = pp.outline.tags ?? [];
265
- if (tags.length > 0 && entityTags) {
266
- for (const [entityId, eTags] of entityTags) {
267
- if (tags.some((t) => eTags.includes(t))) {
268
- const obj = objectMap.get(entityId);
269
- if (obj)
270
- outlineEffect.selection.add(obj);
271
- }
272
- }
273
- }
274
- effects.push(outlineEffect);
275
- }
276
- // Chromatic aberration
277
- if (pp?.chromaticAberration?.enabled) {
278
- effects.push(new ChromaticAberrationEffect({
279
- offset: new THREE.Vector2(pp.chromaticAberration.offsetX ?? d.chromaticAberration.offsetX, pp.chromaticAberration.offsetY ?? d.chromaticAberration.offsetY),
280
- radialModulation: pp.chromaticAberration.radialModulation ?? false,
281
- modulationOffset: pp.chromaticAberration.modulationOffset ?? d.chromaticAberration.modulationOffset,
282
- }));
283
- }
284
- // Lens distortion
285
- if (pp?.lensDistortion?.enabled) {
286
- effects.push(new LensDistortionEffect({
287
- distortion: new THREE.Vector2(pp.lensDistortion.distortionX ?? d.lensDistortion.distortionX, pp.lensDistortion.distortionY ?? d.lensDistortion.distortionY),
288
- principalPoint: new THREE.Vector2(0, 0),
289
- focalLength: new THREE.Vector2(pp.lensDistortion.focalLengthX ?? d.lensDistortion.focalLengthX, pp.lensDistortion.focalLengthY ?? d.lensDistortion.focalLengthY),
290
- skew: pp.lensDistortion.skew ?? d.lensDistortion.skew,
291
- }));
292
- }
293
- // Shock wave
294
- if (pp?.shockWave?.enabled) {
295
- effects.push(new ShockWaveEffect(camera, new THREE.Vector3(pp.shockWave.positionX ?? 0, pp.shockWave.positionY ?? 0, pp.shockWave.positionZ ?? 0), {
296
- speed: pp.shockWave.speed ?? d.shockWave.speed,
297
- maxRadius: pp.shockWave.maxRadius ?? d.shockWave.maxRadius,
298
- waveSize: pp.shockWave.waveSize ?? d.shockWave.waveSize,
299
- amplitude: pp.shockWave.amplitude ?? d.shockWave.amplitude,
300
- }));
301
- }
302
- // Color adjustments
303
- if (pp?.brightnessContrast?.enabled) {
304
- effects.push(new BrightnessContrastEffect({
305
- brightness: pp.brightnessContrast.brightness ?? d.brightnessContrast.brightness,
306
- contrast: pp.brightnessContrast.contrast ?? d.brightnessContrast.contrast,
307
- }));
308
- }
309
- if (pp?.hueSaturation?.enabled) {
310
- effects.push(new HueSaturationEffect({
311
- hue: pp.hueSaturation.hue ?? d.hueSaturation.hue,
312
- saturation: pp.hueSaturation.saturation ?? d.hueSaturation.saturation,
313
- }));
314
- }
315
- if (pp?.sepia?.enabled) {
316
- effects.push(new SepiaEffect({ intensity: pp.sepia.intensity ?? d.sepia.intensity }));
317
- }
318
- if (pp?.colorDepth?.enabled) {
319
- effects.push(new ColorDepthEffect({ bits: pp.colorDepth.bits ?? d.colorDepth.bits }));
320
- }
321
- // Film / retro
322
- if (pp?.noise?.enabled) {
323
- effects.push(new NoiseEffect({ premultiply: pp.noise.premultiply ?? d.noise.premultiply }));
324
- }
325
- if (pp?.scanline?.enabled) {
326
- effects.push(new ScanlineEffect({ density: pp.scanline.density ?? d.scanline.density }));
327
- }
328
- if (pp?.dotScreen?.enabled) {
329
- effects.push(new DotScreenEffect({
330
- angle: pp.dotScreen.angle ?? d.dotScreen.angle,
331
- scale: pp.dotScreen.scale ?? d.dotScreen.scale,
332
- }));
333
- }
334
- if (pp?.grid?.enabled) {
335
- effects.push(new GridEffect({
336
- scale: pp.grid.scale ?? d.grid.scale,
337
- lineWidth: pp.grid.lineWidth ?? d.grid.lineWidth,
338
- }));
339
- }
340
- if (pp?.pixelation?.enabled) {
341
- effects.push(new PixelationEffect(pp.pixelation.granularity ?? d.pixelation.granularity));
342
- }
343
- if (pp?.glitch?.enabled) {
344
- effects.push(new GlitchEffect({
345
- delay: new THREE.Vector2(pp.glitch.delayX ?? d.glitch.delayX, pp.glitch.delayY ?? d.glitch.delayY),
346
- duration: new THREE.Vector2(pp.glitch.durationX ?? d.glitch.durationX, pp.glitch.durationY ?? d.glitch.durationY),
347
- strength: new THREE.Vector2(pp.glitch.strengthX ?? d.glitch.strengthX, pp.glitch.strengthY ?? d.glitch.strengthY),
348
- columns: pp.glitch.columns ?? d.glitch.columns,
349
- ratio: pp.glitch.ratio ?? d.glitch.ratio,
350
- }));
351
- }
352
- // Vignette (last color effect)
353
- if (pp?.vignette?.enabled) {
354
- effects.push(new VignetteEffect({
355
- darkness: pp.vignette.darkness ?? d.vignette.darkness,
356
- offset: pp.vignette.offset ?? d.vignette.offset,
357
- }));
358
- }
359
- // ── Merge all effects into a single EffectPass ────────────────────────
360
- if (effects.length > 0) {
361
- composer.addPass(new EffectPass(camera, ...effects));
362
- }
363
- }
@@ -1,105 +0,0 @@
1
- /**
2
- * Project tools — W4/W3 of `docs/DATA-TOOLS-DESIGN.md` (§3 contract).
3
- *
4
- * A project tool is ONE file, `src/tools/<name>.tool.tsx`, discovered by
5
- * folder scan (same physics as data assets, §3.1: zero registration, delete
6
- * the file → gone). The file exports exactly two things:
7
- *
8
- * ```tsx
9
- * export const tool = defineTool({
10
- * id: 'tuning', // stable slug — becomes the tab's test id
11
- * title: 'Tuning', // the tab label (rendered after a ⚙ marker)
12
- * placement: 'dock', // project-global dashboard tab (§3.2)
13
- * });
14
- * export default function Tuning() { … } // plain React
15
- * ```
16
- *
17
- * or, selection-scoped (W3 — §3.2's second placement):
18
- *
19
- * ```tsx
20
- * export const tool = defineTool({
21
- * id: 'spin',
22
- * title: 'Spin',
23
- * placement: 'inspector', // selection-scoped section
24
- * match: (node) => node?.kind === 'mesh', // same contract as the
25
- * }); // inspector-section registry
26
- * export default function Spin({ node }: InspectorToolProps) { … }
27
- * ```
28
- *
29
- * The editor renders dock tools as visually distinct tabs after a separator
30
- * at the end of the bottom dock's tab row (§3.5); inspector tools render as
31
- * a ⚙-marked section in the Inspector rail whenever `match` accepts the
32
- * current selection. Both render inside an error boundary — a crashing tool
33
- * never takes the editor down. Tools are EDITOR-ONLY: no game build bundles
34
- * `src/tools/` (§4 — nothing in game code imports it), so dev/cheat surfaces
35
- * can never leak into a tester serve.
36
- *
37
- * This module is deliberately react-free metadata (the engine core outside
38
- * `src/react/` must not import react — `test/react-core-import-ban.test.ts`);
39
- * the react-facing tool hooks live in `@engine/react/use-data`, and the
40
- * editor-styled widget kit tools build panels from is `@editor/widgets`.
41
- */
42
- import type { AuthoringAdapter, EditorNode } from '../adapter';
43
- /** The two placements (§3.2). Deliberately nothing else — no floating
44
- * windows, no in-game overlay host (§3.2 "deliberately NOT built"). */
45
- export type ToolPlacement = 'dock' | 'inspector';
46
- /** Fields every tool declares — see {@link defineTool} for the contract. */
47
- interface ToolConfigBase {
48
- /**
49
- * Stable slug for this tool: letters/digits/`-`/`_` only. It becomes the
50
- * mount's `data-testid` (`bottom-tab-tool-<id>` for dock tools,
51
- * `inspector-tool-<id>` for inspector tools), so keep it short and never
52
- * rename it casually — automation and saved layouts key off it.
53
- */
54
- id: string;
55
- /** Human label: the dock tab text, or the inspector section's header,
56
- * rendered after the ⚙ project-tool marker (§3.5). */
57
- title: string;
58
- }
59
- /** A project-global dashboard tab in the bottom dock (§3.2, W4). */
60
- export interface DockToolConfig extends ToolConfigBase {
61
- placement: 'dock';
62
- }
63
- /** A selection-scoped Inspector section (§3.2, W3). */
64
- export interface InspectorToolConfig extends ToolConfigBase {
65
- placement: 'inspector';
66
- /**
67
- * When this section appears — the SAME contract as the editor's
68
- * `inspector-section-registry`: called with the currently selected node
69
- * (`null` in the no-selection/environment state) and the active authoring
70
- * adapter; return `true` to render. Keep it cheap and pure — it runs on
71
- * every inspector render. A `match` that throws is treated as `false`
72
- * (with one console teaching error), never crashing the inspector.
73
- */
74
- match: (node: EditorNode | null, adapter: AuthoringAdapter) => boolean;
75
- }
76
- /** Metadata for a project tool — a discriminated union on `placement`. */
77
- export type ToolConfig = DockToolConfig | InspectorToolConfig;
78
- /**
79
- * Props the editor passes to an INSPECTOR tool's default-exported component
80
- * (dock tools receive no props). Everything richer (live game store, field
81
- * addresses) arrives through the §3.3 hooks, not through more props.
82
- */
83
- export interface InspectorToolProps {
84
- /** The selected node your `match` accepted (`null` in the no-selection
85
- * state, if your `match` chose to accept it). */
86
- node: EditorNode | null;
87
- /** The selected node's stable id (`null` in the no-selection state). */
88
- nodeId: string | null;
89
- }
90
- /**
91
- * Validate and freeze a project tool's metadata (docs/DATA-TOOLS-DESIGN.md
92
- * §3.1). Call it once at module scope of a `src/tools/<name>.tool.tsx` file
93
- * and export the result as `tool`, next to a default-exported React
94
- * component — the editor's folder scan picks the file up automatically.
95
- *
96
- * Fails loud (§6.5 "errors teach") on anything malformed rather than letting
97
- * a half-shaped tool render confusingly: bad `id`/`title`, an unknown
98
- * placement, an inspector tool without a callable `match`.
99
- *
100
- * The returned config is frozen: tool metadata is a definition, not state
101
- * (the same immutability rule data assets follow, §2.1).
102
- */
103
- export declare function defineTool(config: ToolConfig): Readonly<ToolConfig>;
104
- export {};
105
- //# sourceMappingURL=define-tool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"define-tool.d.ts","sourceRoot":"","sources":["../../src/tools/define-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE/D;wEACwE;AACxE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAEjD,4EAA4E;AAC5E,UAAU,cAAc;IACtB;;;;;OAKG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;2DACuD;IACvD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oEAAoE;AACpE,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,uDAAuD;AACvD,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,SAAS,EAAE,WAAW,CAAC;IACvB;;;;;;;OAOG;IACH,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC;CACxE;AAED,0EAA0E;AAC1E,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAE9D;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;sDACkD;IAClD,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,wEAAwE;IACxE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAUD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,CAiCnE"}
@@ -1,82 +0,0 @@
1
- /**
2
- * Project tools — W4/W3 of `docs/DATA-TOOLS-DESIGN.md` (§3 contract).
3
- *
4
- * A project tool is ONE file, `src/tools/<name>.tool.tsx`, discovered by
5
- * folder scan (same physics as data assets, §3.1: zero registration, delete
6
- * the file → gone). The file exports exactly two things:
7
- *
8
- * ```tsx
9
- * export const tool = defineTool({
10
- * id: 'tuning', // stable slug — becomes the tab's test id
11
- * title: 'Tuning', // the tab label (rendered after a ⚙ marker)
12
- * placement: 'dock', // project-global dashboard tab (§3.2)
13
- * });
14
- * export default function Tuning() { … } // plain React
15
- * ```
16
- *
17
- * or, selection-scoped (W3 — §3.2's second placement):
18
- *
19
- * ```tsx
20
- * export const tool = defineTool({
21
- * id: 'spin',
22
- * title: 'Spin',
23
- * placement: 'inspector', // selection-scoped section
24
- * match: (node) => node?.kind === 'mesh', // same contract as the
25
- * }); // inspector-section registry
26
- * export default function Spin({ node }: InspectorToolProps) { … }
27
- * ```
28
- *
29
- * The editor renders dock tools as visually distinct tabs after a separator
30
- * at the end of the bottom dock's tab row (§3.5); inspector tools render as
31
- * a ⚙-marked section in the Inspector rail whenever `match` accepts the
32
- * current selection. Both render inside an error boundary — a crashing tool
33
- * never takes the editor down. Tools are EDITOR-ONLY: no game build bundles
34
- * `src/tools/` (§4 — nothing in game code imports it), so dev/cheat surfaces
35
- * can never leak into a tester serve.
36
- *
37
- * This module is deliberately react-free metadata (the engine core outside
38
- * `src/react/` must not import react — `test/react-core-import-ban.test.ts`);
39
- * the react-facing tool hooks live in `@engine/react/use-data`, and the
40
- * editor-styled widget kit tools build panels from is `@editor/widgets`.
41
- */
42
- const TEMPLATE_EXAMPLE = 'the template worked example: src/tools/example.tool.tsx';
43
- /** Teaching-error helper (§6.5): every rejection names the fix and cites the
44
- * template example by path. */
45
- function toolError(problem, fix) {
46
- return new Error(`defineTool: ${problem} — ${fix} (see ${TEMPLATE_EXAMPLE}).`);
47
- }
48
- /**
49
- * Validate and freeze a project tool's metadata (docs/DATA-TOOLS-DESIGN.md
50
- * §3.1). Call it once at module scope of a `src/tools/<name>.tool.tsx` file
51
- * and export the result as `tool`, next to a default-exported React
52
- * component — the editor's folder scan picks the file up automatically.
53
- *
54
- * Fails loud (§6.5 "errors teach") on anything malformed rather than letting
55
- * a half-shaped tool render confusingly: bad `id`/`title`, an unknown
56
- * placement, an inspector tool without a callable `match`.
57
- *
58
- * The returned config is frozen: tool metadata is a definition, not state
59
- * (the same immutability rule data assets follow, §2.1).
60
- */
61
- export function defineTool(config) {
62
- if (config === null || typeof config !== 'object') {
63
- throw toolError('expected a config object', "call it as defineTool({ id, title, placement: 'dock' })");
64
- }
65
- const { id, title, placement } = config;
66
- if (placement !== 'dock' && placement !== 'inspector') {
67
- throw toolError(`unknown placement ${JSON.stringify(placement)}`, "the placements are 'dock' (project-global bottom tab) and 'inspector' (selection-scoped section, §3.2)");
68
- }
69
- if (typeof id !== 'string' || !/^[a-zA-Z0-9_-]+$/.test(id)) {
70
- throw toolError(`invalid id ${JSON.stringify(id)}`, 'pass a non-empty slug of letters, digits, "-" or "_" — it becomes the tool\'s data-testid (bottom-tab-tool-<id> / inspector-tool-<id>)');
71
- }
72
- if (typeof title !== 'string' || title.trim() === '') {
73
- throw toolError(`invalid title ${JSON.stringify(title)}`, 'pass a short human-readable label');
74
- }
75
- if (placement === 'inspector') {
76
- if (typeof config.match !== 'function') {
77
- throw toolError(`placement 'inspector' requires a match function (got ${JSON.stringify(config.match)})`, "pass match: (node) => boolean — e.g. match: (node) => node?.kind === 'mesh' — deciding which selections show this section");
78
- }
79
- return Object.freeze({ id, title, placement, match: config.match });
80
- }
81
- return Object.freeze({ id, title, placement });
82
- }
@@ -1,76 +0,0 @@
1
- import type { Container } from 'pixi.js';
2
- /**
3
- * AuthoringAdapter-2D — the world2d analog of the editor AuthoringAdapter /
4
- * IngestAuthoringAdapter, implemented DIRECTLY over a live PixiJS display tree
5
- * (no fabricated Scene2D / SceneEntity — the anti-shim rule). Used by the editor to
6
- * inspect + edit world2d entities (first-party OR an ingested unmodified game),
7
- * with stable structural-path ids so edits re-bind after the tree rebuilds.
8
- */
9
- export interface EditorNode2D {
10
- id: string;
11
- label: string;
12
- kind: 'sprite' | 'animatedsprite' | 'text' | 'container' | string;
13
- parentId: string | null;
14
- childIds: string[];
15
- }
16
- export interface Transform2DValue {
17
- position: [number, number];
18
- rotation: number;
19
- scale: [number, number];
20
- }
21
- export interface Property2D {
22
- path: string;
23
- label: string;
24
- type: 'string' | 'number' | 'boolean' | 'vec2' | 'color';
25
- value: unknown;
26
- }
27
- /** A persisted edit overlay keyed by structural-path id (the 2D analog of IngestOverlay). */
28
- export interface Override2D {
29
- position?: [number, number];
30
- rotation?: number;
31
- scale?: [number, number];
32
- tint?: number;
33
- visible?: boolean;
34
- }
35
- export type Overlay2D = Record<string, Override2D>;
36
- export declare class AuthoringAdapter2D {
37
- private readonly root;
38
- private readonly byId;
39
- private overlay;
40
- private dirty;
41
- constructor(root: Container, opts?: {
42
- overlay?: Overlay2D;
43
- });
44
- /** Walk the live tree assigning deterministic structural-path ids, reapply overlay. */
45
- refresh(): {
46
- count: number;
47
- sprites: number;
48
- };
49
- roots(): EditorNode2D[];
50
- node(id: string): EditorNode2D | null;
51
- displayObject(id: string): Container | null;
52
- private toNode;
53
- getTransform(id: string): Transform2DValue | null;
54
- setTransform(id: string, t: Partial<Transform2DValue>): void;
55
- properties(id: string): Property2D[];
56
- set(id: string, path: string, value: unknown): void;
57
- private applyOverride;
58
- /**
59
- * Re-apply a saved/external overlay onto the (already-walked) live tree, merging
60
- * it into the in-memory overlay so a later `serializeOverlay()`/save preserves it
61
- * and a later `refresh()` re-applies it again. Ids absent from the current tree
62
- * are skipped (orphaned, not an error) — the 2D analog of
63
- * `IngestAuthoringAdapter.applyOverlay` (T3.2 slice 3). Used both for the initial
64
- * reload (constructor `opts.overlay`) and for `PersistenceProvider.applyExternal`
65
- * (re-apply a changed overlay file without a full remount).
66
- */
67
- applyOverlay(overlay: Overlay2D): {
68
- applied: number;
69
- orphaned: number;
70
- };
71
- isDirty(): boolean;
72
- serializeOverlay(): Overlay2D;
73
- /** Clear the dirty flag after a successful save (mirrors IngestAuthoringAdapter). */
74
- markClean(): void;
75
- }
76
- //# sourceMappingURL=authoring-2d.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authoring-2d.d.ts","sourceRoot":"","sources":["../../src/world2d/authoring-2d.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAClE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACzD,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,6FAA6F;AAC7F,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AACD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAUnD,qBAAa,kBAAkB;IAM3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IALvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgC;IACrD,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,KAAK,CAAS;gBAGH,IAAI,EAAE,SAAS,EAChC,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,SAAS,CAAA;KAAO;IAMpC,uFAAuF;IACvF,OAAO,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAsB7C,KAAK,IAAI,YAAY,EAAE;IAIvB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAKrC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI3C,OAAO,CAAC,MAAM;IAYd,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAUjD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAe5D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,EAAE;IAkBpC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAUnD,OAAO,CAAC,aAAa;IAUrB;;;;;;;;OAQG;IACH,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAevE,OAAO,IAAI,OAAO;IAGlB,gBAAgB,IAAI,SAAS;IAG7B,qFAAqF;IACrF,SAAS,IAAI,IAAI;CAGlB"}