@vgai/editor 0.2.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 (430) hide show
  1. package/README.md +24 -0
  2. package/dist/assets/axe-C7YBtOuM.js +30 -0
  3. package/dist/assets/browserAll-DDtGGE48.js +1 -0
  4. package/dist/assets/create-runtime-DbTlBlKG.js +1 -0
  5. package/dist/assets/{game-BI111o5f.js → game-BE0r7DMI.js} +3 -3
  6. package/dist/assets/game-BdTHR2_X.js +1 -0
  7. package/dist/assets/{game-pt_1lQLv.js → game-C3iQGSqo.js} +1 -1
  8. package/dist/assets/game-CcHfYxjP.js +1 -0
  9. package/dist/assets/game-Cqzj_lpD.js +1 -0
  10. package/dist/assets/game-DSZdeCHu.js +1 -0
  11. package/dist/assets/game-Dch9sAPc.js +1 -0
  12. package/dist/assets/{game-xsOho_wg.js → game-SAFn90pA.js} +3 -3
  13. package/dist/assets/game-loop-DMIgSMV-.js +1 -0
  14. package/dist/assets/{game-source-CvidN7AB.js → game-source-Dk83w26t.js} +1 -1
  15. package/dist/assets/{index-Bp5cecD6.js → index-4idIsHHJ.js} +2 -2
  16. package/dist/assets/{index-DL7RcQ0n.js → index-C-LhOTBN.js} +1 -1
  17. package/dist/assets/{index-Cs8xwv3e.js → index-CDkxceqE.js} +1 -1
  18. package/dist/assets/index-CQEfi217.js +15412 -0
  19. package/dist/assets/index-Dvi-V0NE.css +1 -0
  20. package/dist/assets/ingest-siblings-s0P5I1Ub.js +1 -0
  21. package/dist/assets/mount-manifest-DXMOlF79.js +1 -0
  22. package/dist/assets/react-18-C9eHn8x1.js +1 -0
  23. package/dist/assets/webworkerAll-Fn0e-ouF.js +1 -0
  24. package/dist/assets/world-documents-GM0a9Kv7.js +1 -0
  25. package/dist/index.html +15 -13
  26. package/dist/ingest/racing-game/vgai.game.json +5 -4
  27. package/dist/ingest/simcity/vgai.game.json +5 -4
  28. package/dist/ingest/tanks/vgai.game.json +5 -4
  29. package/dist/project-scripts.bundle.js +3917 -0
  30. package/dist/scenes/untitled.vscn.json +2 -0
  31. package/dist-server/packaged.mjs +7697 -3435
  32. package/package.json +31 -4
  33. package/scripts/probe-reporter.ts +349 -0
  34. package/scripts/run-probe.ts +2260 -0
  35. package/server/asset-catalog-audit.ts +268 -0
  36. package/server/asset-catalog-v2.ts +146 -0
  37. package/server/asset-library-routes.ts +276 -58
  38. package/server/canonical-path.ts +1 -1
  39. package/server/dev.ts +148 -44
  40. package/server/editor-server.ts +888 -61
  41. package/server/editor-sse.ts +115 -4
  42. package/server/harness-chat-service.ts +796 -0
  43. package/server/local-asset-catalog.ts +157 -22
  44. package/server/packaged.ts +51 -21
  45. package/server/process-shutdown.ts +136 -0
  46. package/server/prod.ts +9 -6
  47. package/server/project-hmr-files.ts +41 -0
  48. package/server/project-operations.ts +343 -0
  49. package/server/project-optimize-deps-entries.ts +4 -4
  50. package/server/project-output-writer.ts +156 -0
  51. package/server/project-validation.ts +140 -0
  52. package/server/project-view.ts +8 -50
  53. package/server/server-utils.ts +75 -10
  54. package/server/session-registry.ts +12 -0
  55. package/src/EditorContext.tsx +107 -3
  56. package/src/action-registry.ts +115 -17
  57. package/src/adapter-resolver.ts +213 -478
  58. package/src/asset-events.ts +64 -1
  59. package/src/asset-preview.ts +906 -0
  60. package/src/asset-selection.ts +121 -0
  61. package/src/asset-workflow/asset-capabilities.ts +259 -0
  62. package/src/asset-workflow/asset-editor-errors.ts +46 -0
  63. package/src/asset-workflow/asset-import-pipeline.ts +176 -0
  64. package/src/asset-workflow/asset-library-query.ts +107 -0
  65. package/src/asset-workflow/asset-types.ts +192 -0
  66. package/src/asset-workflow/asset-workflow-quality.ts +65 -0
  67. package/src/asset-workflow/import-contract.ts +113 -0
  68. package/src/asset-workflow/model-conversion.ts +126 -0
  69. package/src/asset-workflow/model-inspection.ts +185 -0
  70. package/src/asset-workflow/project-asset-commands.ts +23 -0
  71. package/src/asset-workflow/project-asset-health.ts +153 -0
  72. package/src/asset-workflow/project-asset-operations.ts +119 -0
  73. package/src/asset-workflow/thumbnail-system.ts +172 -0
  74. package/src/authoring/active-systems.ts +15 -0
  75. package/src/authoring/boundary-authoring-adapter.ts +16 -5
  76. package/src/authoring/composite-authoring-adapter.ts +305 -124
  77. package/src/authoring/design-time-layers.ts +300 -117
  78. package/src/authoring/edit-mode-authoring.ts +278 -293
  79. package/src/authoring/embed-only-adapter.ts +4 -2
  80. package/src/authoring/first-party-hierarchy-menu.ts +7 -2
  81. package/src/authoring/first-party-inspector/AddSectionMenu.tsx +5 -12
  82. package/src/authoring/first-party-inspector/EnvironmentSection.tsx +53 -126
  83. package/src/authoring/first-party-inspector/HeaderSection.tsx +54 -65
  84. package/src/authoring/first-party-inspector/is-first-party-selection.ts +30 -11
  85. package/src/authoring/first-party-inspector/register.tsx +13 -2
  86. package/src/authoring/ingest-authoring-adapter.ts +142 -45
  87. package/src/authoring/mount-failure-report.ts +5 -5
  88. package/src/authoring/provenance.ts +41 -0
  89. package/src/authoring/react-dom-authoring-adapter.ts +92 -92
  90. package/src/authoring/react-inspector-section.tsx +489 -51
  91. package/src/authoring/react-world-authoring-adapter.ts +541 -306
  92. package/src/authoring/story-overlay.ts +1 -1
  93. package/src/authoring/story-types.ts +11 -0
  94. package/src/authoring/vgai-scene-authoring-adapter.ts +54 -25
  95. package/src/authoring/viewport-tool-context.ts +78 -0
  96. package/src/authoring/world-canvas-viewport-state.ts +35 -0
  97. package/src/authoring/world-hidden-viewport.ts +186 -0
  98. package/src/authoring/world-pan-state.ts +33 -17
  99. package/src/authoring/world-session-state.ts +1 -1
  100. package/src/authoring/world2d-authoring-adapter.ts +109 -52
  101. package/src/availability-tick.ts +56 -0
  102. package/src/browser-play-entry.ts +5 -5
  103. package/src/browser-project-scripts.ts +1 -0
  104. package/src/build-identity.ts +15 -0
  105. package/src/command-listener.ts +893 -19
  106. package/src/components/AlignToolbar.tsx +74 -63
  107. package/src/components/AppRoot.tsx +193 -26
  108. package/src/components/ApplicationMenus.tsx +272 -0
  109. package/src/components/AssetBrowser.tsx +1450 -293
  110. package/src/components/AssetEditorShell.tsx +141 -0
  111. package/src/components/AssetImportDetails.tsx +218 -0
  112. package/src/components/AssetLibraryPanel.tsx +14 -0
  113. package/src/components/CameraInfo.tsx +11 -20
  114. package/src/components/CenterDocuments.tsx +585 -0
  115. package/src/components/CommandPalette.tsx +75 -30
  116. package/src/components/ConsolePanel.css +55 -0
  117. package/src/components/ConsolePanel.tsx +57 -112
  118. package/src/components/DebugConsolePanel.tsx +461 -0
  119. package/src/components/DebuggerPanel.tsx +165 -0
  120. package/src/components/DefaultEditorLayout.tsx +167 -231
  121. package/src/components/GameHierarchy.tsx +873 -290
  122. package/src/components/GamePerformanceOverlay.tsx +46 -0
  123. package/src/components/HarnessChatPanel.tsx +2352 -0
  124. package/src/components/HistoryPanel.tsx +226 -0
  125. package/src/components/Inspector.tsx +153 -99
  126. package/src/components/InspectorToolSection.tsx +6 -4
  127. package/src/components/MountFailureBanner.tsx +31 -48
  128. package/src/components/NetworkSection.tsx +25 -14
  129. package/src/components/OnlineAssetBrowser.tsx +794 -343
  130. package/src/components/OverlayReportBanner.tsx +38 -64
  131. package/src/components/PerformancePanel.tsx +206 -0
  132. package/src/components/PlayBar.tsx +93 -263
  133. package/src/components/PrefabSaveDialog.tsx +55 -127
  134. package/src/components/ProjectHeader.css +60 -0
  135. package/src/components/ProjectHeader.tsx +170 -105
  136. package/src/components/ProjectScreen.tsx +246 -184
  137. package/src/components/ReactCanvasControls.tsx +185 -0
  138. package/src/components/ResolutionPicker.tsx +85 -0
  139. package/src/components/RootActivateDialog.tsx +39 -68
  140. package/src/components/SaveDialog.tsx +55 -127
  141. package/src/components/SaveStatus.tsx +11 -29
  142. package/src/components/StartupLoadingScreen.tsx +96 -0
  143. package/src/components/StateWatchPanel.tsx +302 -0
  144. package/src/components/StatsOverlay.tsx +12 -5
  145. package/src/components/StatusBar.tsx +64 -0
  146. package/src/components/ThemeManagerDialog.css +89 -0
  147. package/src/components/ThemeManagerDialog.tsx +371 -0
  148. package/src/components/ToolHost.tsx +26 -15
  149. package/src/components/Toolbar.tsx +117 -214
  150. package/src/components/VgaiVoxelLogo.tsx +89 -0
  151. package/src/components/ViewportOverlay.tsx +97 -172
  152. package/src/components/ViewportPanel.tsx +130 -31
  153. package/src/components/WorkspaceDock.tsx +891 -0
  154. package/src/components/WorldSelectionOverlay.tsx +51 -63
  155. package/src/components/WorldTextEditor.tsx +9 -5
  156. package/src/components/asset-documents.tsx +390 -0
  157. package/src/components/asset-editor-persistence.ts +44 -0
  158. package/src/components/asset-selection-section.tsx +338 -0
  159. package/src/components/asset-viewers/AudioViewer.tsx +73 -21
  160. package/src/components/asset-viewers/GenericJsonViewer.tsx +26 -11
  161. package/src/components/asset-viewers/ImageViewer.tsx +43 -11
  162. package/src/components/asset-viewers/InputMapViewer.tsx +512 -134
  163. package/src/components/asset-viewers/MaterialAssetEditor.tsx +540 -0
  164. package/src/components/asset-viewers/ModelViewer.tsx +805 -121
  165. package/src/components/asset-viewers/OnlineAssetDetail.tsx +177 -60
  166. package/src/components/asset-viewers/SourceAssetViewer.tsx +121 -0
  167. package/src/components/asset-workflow.css +506 -0
  168. package/src/components/build-documents.tsx +696 -0
  169. package/src/components/core-utilities.tsx +75 -0
  170. package/src/components/data-documents.tsx +364 -0
  171. package/src/components/{DataPanel.tsx → data-editor.tsx} +138 -288
  172. package/src/components/debugger-panel-state.ts +57 -0
  173. package/src/components/inspector-widgets/AlignmentGrid.tsx +8 -14
  174. package/src/components/inspector-widgets/BorderEditor.tsx +41 -33
  175. package/src/components/inspector-widgets/ColorPicker.tsx +39 -39
  176. package/src/components/inspector-widgets/FontPicker.tsx +13 -21
  177. package/src/components/inspector-widgets/GradientEditor.tsx +11 -19
  178. package/src/components/inspector-widgets/ScrubbableInput.tsx +6 -3
  179. package/src/components/inspector-widgets/ShadowEditor.tsx +20 -33
  180. package/src/components/inspector-widgets/shared.tsx +90 -49
  181. package/src/components/inspectors/AnimationSection.tsx +39 -40
  182. package/src/components/inspectors/AudioSection.tsx +28 -39
  183. package/src/components/inspectors/BoneAttachmentSection.tsx +19 -24
  184. package/src/components/inspectors/CameraSection.tsx +14 -23
  185. package/src/components/inspectors/ComponentsSection.tsx +39 -43
  186. package/src/components/inspectors/JointsSection.tsx +34 -43
  187. package/src/components/inspectors/LightSection.tsx +90 -35
  188. package/src/components/inspectors/MaterialSection.tsx +137 -174
  189. package/src/components/inspectors/MeshSection.tsx +9 -17
  190. package/src/components/inspectors/NavigationSection.tsx +8 -15
  191. package/src/components/inspectors/ParticleSection.tsx +91 -76
  192. package/src/components/inspectors/PhysicsSection.tsx +42 -46
  193. package/src/components/inspectors/PostProcessingSection.tsx +28 -36
  194. package/src/components/inspectors/RenderingSection.tsx +12 -20
  195. package/src/components/inspectors/ShadowSection.tsx +7 -8
  196. package/src/components/inspectors/SplineSection.tsx +31 -42
  197. package/src/components/inspectors/TransformSection.tsx +14 -22
  198. package/src/components/patterns/Dialog.tsx +95 -0
  199. package/src/components/patterns/Fields.tsx +44 -0
  200. package/src/components/patterns/List.tsx +25 -0
  201. package/src/components/patterns/StateSurface.tsx +40 -0
  202. package/src/components/patterns/Surfaces.tsx +115 -0
  203. package/src/components/patterns/Tabs.tsx +80 -0
  204. package/src/components/patterns/Toolbar.tsx +51 -0
  205. package/src/components/patterns/Tree.tsx +72 -0
  206. package/src/components/primitives/Button.tsx +46 -0
  207. package/src/components/primitives/ColorInput.tsx +11 -47
  208. package/src/components/primitives/EditorIcon.tsx +99 -0
  209. package/src/components/primitives/FormControls.tsx +71 -0
  210. package/src/components/primitives/JsonInput.tsx +15 -2
  211. package/src/components/primitives/Layout.tsx +100 -0
  212. package/src/components/primitives/Menu.tsx +105 -0
  213. package/src/components/primitives/NumberInput.tsx +8 -35
  214. package/src/components/primitives/Panel.tsx +49 -44
  215. package/src/components/primitives/SectionHeader.tsx +10 -28
  216. package/src/components/primitives/Text.tsx +46 -0
  217. package/src/components/primitives/Tooltip.tsx +20 -12
  218. package/src/components/primitives/Vec3Input.tsx +3 -0
  219. package/src/components/primitives/banner-tones.ts +33 -0
  220. package/src/components/primitives/editor-icons.ts +102 -0
  221. package/src/components/primitives/panel-header-styles.ts +30 -0
  222. package/src/components/project-operation-documents.tsx +226 -0
  223. package/src/components/status-contributions.tsx +175 -0
  224. package/src/components/story-documents-register.ts +15 -0
  225. package/src/components/story-documents.tsx +1185 -0
  226. package/src/components/tool-documents.tsx +110 -0
  227. package/src/components/workspace-dock.css +293 -0
  228. package/src/components/workspace-history.ts +33 -0
  229. package/src/components/world-documents.tsx +145 -0
  230. package/src/components/xstate-documents.tsx +209 -0
  231. package/src/composite-screenshot.ts +248 -0
  232. package/src/design-system/index.ts +70 -0
  233. package/src/design-system-stories/Foundation.stories.tsx +183 -0
  234. package/src/design-system-stories/Patterns.stories.tsx +251 -0
  235. package/src/design-system-stories/Workspace.stories.tsx +538 -0
  236. package/src/doctor/report.ts +57 -13
  237. package/src/editor-api.ts +295 -31
  238. package/src/editor-compatibility.ts +200 -0
  239. package/src/editor-console.ts +35 -17
  240. package/src/editor-hotkeys.ts +85 -33
  241. package/src/editor-store.ts +538 -233
  242. package/src/editor-viewport.ts +160 -34
  243. package/src/entity-factory.ts +14 -3
  244. package/src/gizmo-registry.ts +21 -5
  245. package/src/harness-chat-editor-context.ts +37 -0
  246. package/src/harness-chat-indicator.ts +68 -0
  247. package/src/harness-chat-layout.ts +53 -0
  248. package/src/harness-chat-lifecycle.ts +170 -0
  249. package/src/harness-chat-reconnect.ts +85 -0
  250. package/src/harness-chat-types.ts +409 -0
  251. package/src/hierarchy-drop.ts +50 -0
  252. package/src/hierarchy-expansion-state.ts +100 -0
  253. package/src/hierarchy-menu-registry.ts +1 -1
  254. package/src/hierarchy-projection.ts +76 -0
  255. package/src/history/editor-session.ts +21 -0
  256. package/src/history/history-commands.ts +147 -0
  257. package/src/history/history-service.ts +904 -0
  258. package/src/history/json-history-resource.ts +165 -0
  259. package/src/history/persistence-coordinator.ts +35 -0
  260. package/src/history/project-file-history.ts +266 -0
  261. package/src/history/project-root-history-backends.ts +53 -0
  262. package/src/history/resource-registry.ts +209 -0
  263. package/src/history/snapshot-store.ts +108 -0
  264. package/src/history/source-history-backend.ts +374 -0
  265. package/src/history/types.ts +100 -0
  266. package/src/hmr-registration-group.ts +67 -0
  267. package/src/hmr-stable-react-context.ts +23 -0
  268. package/src/hosted-example.ts +12 -2
  269. package/src/hotkeys.ts +89 -18
  270. package/src/ingest/discovery-react.ts +9 -10
  271. package/src/ingest/discovery.ts +4 -4
  272. package/src/ingest/discovery2d.ts +5 -5
  273. package/src/ingest/games/bloom-composer/vgai.game.json +3 -3
  274. package/src/ingest/games/embed-bundle/vgai.game.json +3 -3
  275. package/src/ingest/games/games-fps/vgai.game.json +3 -3
  276. package/src/ingest/games/iframe-reachable/vgai.game.json +3 -3
  277. package/src/ingest/games/interactive-cubes/vgai.game.json +3 -3
  278. package/src/ingest/games/mismatched-three/vgai.game.json +3 -3
  279. package/src/ingest/games/own-three-bundled/vgai.game.json +3 -3
  280. package/src/ingest/games/pointerlock-maze/vgai.game.json +7 -4
  281. package/src/ingest/games-2d/bubbo-bubbo/vgai.game.json +3 -3
  282. package/src/ingest/games-2d/bunnymark/vgai.game.json +3 -3
  283. package/src/ingest/games-2d/flappy/vgai.game.json +3 -3
  284. package/src/ingest/games-2d/flappy-pixi/vgai.game.json +3 -3
  285. package/src/ingest/games-2d/puzzling-potions/vgai.game.json +3 -3
  286. package/src/ingest/games-2d/tilemap-camera/vgai.game.json +3 -3
  287. package/src/ingest/games-react/react-rpg/vgai.game.json +3 -3
  288. package/src/ingest/types.ts +1 -1
  289. package/src/ingest-mode.ts +47 -52
  290. package/src/ingest-siblings.ts +23 -33
  291. package/src/initial-scene.ts +1 -2
  292. package/src/main.tsx +16 -8
  293. package/src/manifest-project.ts +10 -12
  294. package/src/model-thumbnail.ts +261 -26
  295. package/src/module-mode.ts +44 -50
  296. package/src/play-log-events.ts +26 -0
  297. package/src/play-mode.ts +495 -401
  298. package/src/play-scene-adoption.ts +23 -0
  299. package/src/playground/main.ts +68 -24
  300. package/src/playwright-shim.ts +473 -0
  301. package/src/project-manager.ts +90 -10
  302. package/src/project-operations.ts +112 -0
  303. package/src/project-story-discovery.ts +25 -0
  304. package/src/project-tool-discovery.ts +43 -0
  305. package/src/scene-serializer.ts +0 -6
  306. package/src/scene-sync.ts +7 -2
  307. package/src/script-loader.ts +3 -3
  308. package/src/skeleton-helper.ts +57 -0
  309. package/src/storage/seed.ts +68 -8
  310. package/src/stories/StoryPreviewMount.tsx +265 -0
  311. package/src/stories/action-stories.fixture.tsx +44 -0
  312. package/src/stories/button-stories.fixture.tsx +50 -0
  313. package/src/stories/compose-project-stories.ts +182 -0
  314. package/src/stories/loader-stories.fixture.tsx +53 -0
  315. package/src/stories/story-discovery.ts +130 -0
  316. package/src/stories/story-registry.ts +146 -0
  317. package/src/theme-css.ts +1049 -0
  318. package/src/theme-library.ts +238 -0
  319. package/src/theme-preference.ts +130 -0
  320. package/src/theme.ts +527 -0
  321. package/src/tool-loader.ts +80 -24
  322. package/src/ui-source/inspect.ts +27 -4
  323. package/src/ui-source/source-write-backend.ts +83 -22
  324. package/src/widgets/index.ts +9 -18
  325. package/src/workspace-aux-commands.ts +11 -0
  326. package/src/workspace-dock-controller.ts +64 -0
  327. package/src/workspace-document-ids.ts +5 -0
  328. package/src/workspace-document-registry.ts +367 -0
  329. package/src/workspace-state-persistence.ts +455 -0
  330. package/src/workspace-status-registry.ts +110 -0
  331. package/src/workspace-utility-commands.ts +49 -0
  332. package/src/workspace-utility-registry.ts +161 -0
  333. package/src/world-document-routing.ts +16 -0
  334. package/src/xstate-inspect/XStateMachineInspector.tsx +544 -0
  335. package/src/xstate-inspect/character-animation-machine.fixture.ts +74 -0
  336. package/src/xstate-inspect/use-live-actor-state.ts +39 -0
  337. package/src/xstate-inspect/xstate-graph.ts +265 -0
  338. package/src/xstate-inspect/xstate-layout.ts +76 -0
  339. package/src/z-index.ts +26 -0
  340. package/template/.claude/skills/editor/SKILL.md +129 -90
  341. package/template/AGENTS.md +1110 -0
  342. package/template/CLAUDE.md +1 -512
  343. package/template/IDIOMS.md +50 -0
  344. package/template/check-idioms.ts +706 -0
  345. package/template/manifest-entry-modules-plugin.ts +53 -0
  346. package/template/package.json +13 -4
  347. package/template/public/scenes/default.scn2d.json +6 -0
  348. package/template/public/scenes/default.vscn.json +7 -1
  349. package/template/public/scenes/untitled.vscn.json +10 -0
  350. package/template/scripts/playtest.ts +40 -0
  351. package/template/server/loopback.ts +75 -0
  352. package/template/server/rooms/arena-room.ts +69 -1
  353. package/template/server/rooms/game-room.ts +68 -1
  354. package/template/src/data/README.md +9 -4
  355. package/template/src/data/data-ref.ts +35 -0
  356. package/template/src/data/tuning.schema.ts +1 -1
  357. package/template/src/main.ts +41 -62
  358. package/template/src/manifest-entry-modules.d.ts +3 -0
  359. package/template/src/operations/README.md +88 -0
  360. package/template/src/runtime/pixi-adapter.ts +24 -0
  361. package/template/src/scripts/components/data-spinner.ts +43 -2
  362. package/template/src/scripts/components/spin-lap-math.ts +27 -0
  363. package/template/src/tools/README.md +5 -3
  364. package/template/src/tools/example.tool.tsx +13 -7
  365. package/template/src/ui/Button.stories.tsx +66 -0
  366. package/template/src/ui/RebindPanel.tsx +2 -6
  367. package/template/src/ui/game.tsx +17 -0
  368. package/template/tests/acceptance/example.spec.ts +64 -0
  369. package/template/tests/logic/example.test.ts +31 -0
  370. package/template/tests/logic/room.test.ts +100 -0
  371. package/template/tests/tsconfig.json +30 -0
  372. package/template/validate-manifest.ts +5 -5
  373. package/template/validate-scenes.ts +50 -18
  374. package/template/vgai.game.json +20 -13
  375. package/template/vite.config.ts +77 -16
  376. package/vite-plugin-ui-oid.ts +261 -17
  377. package/dist/assets/CCDIKSolver-Dz-ysxZF.js +0 -1
  378. package/dist/assets/SelectionBox-BXsv_6aH.js +0 -1
  379. package/dist/assets/browser-project-scripts-DOru4L1x.js +0 -2
  380. package/dist/assets/browserAll-CEkWYlFk.js +0 -1
  381. package/dist/assets/create-runtime-DYIWr3va.js +0 -1
  382. package/dist/assets/data-asset-Bb9sIM7i.js +0 -5
  383. package/dist/assets/game-8SDZPPgH.js +0 -1
  384. package/dist/assets/game-CevorxyV.js +0 -1
  385. package/dist/assets/game-Di7XlywD.js +0 -1
  386. package/dist/assets/game-DjnCaw8R.js +0 -1
  387. package/dist/assets/game-Q9A0aXSV.js +0 -1
  388. package/dist/assets/index-CPVV6pjw.js +0 -1
  389. package/dist/assets/index-CpOnYyeD.js +0 -213
  390. package/dist/assets/index-Dr8H_6Rl.js +0 -1
  391. package/dist/assets/index-_bCaipUk.js +0 -13650
  392. package/dist/assets/ingest-siblings-Dz8eEqrV.js +0 -1
  393. package/dist/assets/mount-manifest-Bhk0ohsl.js +0 -1
  394. package/dist/assets/scene-query-BivAHhJu.js +0 -1
  395. package/dist/assets/webworkerAll-BLrH0F6F.js +0 -1
  396. package/dist/assets/xstate-animation-binding-1NGLmw6y.js +0 -1
  397. package/dist/assets/xstate.esm-BgUD33nl.js +0 -3
  398. package/src/authoring/scene-ui-layer.ts +0 -485
  399. package/src/authoring/ui-authoring-adapter.ts +0 -325
  400. package/src/authoring/ui-hierarchy-menu.ts +0 -40
  401. package/src/authoring/ui-inspector-sections.tsx +0 -156
  402. package/src/authoring/undo-timeline.ts +0 -145
  403. package/src/components/BottomPanel.tsx +0 -326
  404. package/src/components/BuildPanel.tsx +0 -455
  405. package/src/components/FolderTree.tsx +0 -179
  406. package/src/components/RightPanel.tsx +0 -166
  407. package/src/components/WorldContextMenu.tsx +0 -257
  408. package/src/components/asset-viewers/AssetViewer.tsx +0 -38
  409. package/src/ingest/games-react/react-rpg/src/ui/game-state.tsx +0 -129
  410. package/src/scene-ui-mode/active-scene-ui.ts +0 -58
  411. package/src/scene-ui-mode/scene-ui-palette-panel.tsx +0 -152
  412. package/src/scene-ui-mode/scene-ui-timeline-tab.tsx +0 -29
  413. package/src/scene-ui-mode/ui-prefab-dialog-host.tsx +0 -74
  414. package/src/scene-ui-mode/ui-prefab-hierarchy-menu.ts +0 -49
  415. package/src/scene-ui-mode/ui-prefab-io.ts +0 -76
  416. package/src/ui-editor/inspector.tsx +0 -563
  417. package/src/ui-editor/node-ops.ts +0 -266
  418. package/src/ui-editor/overlay.tsx +0 -380
  419. package/src/ui-editor/palette.tsx +0 -114
  420. package/src/ui-editor/react-store.ts +0 -78
  421. package/src/ui-editor/timeline-panel.tsx +0 -443
  422. package/src/ui-editor/ui-edit-store.ts +0 -552
  423. package/src/ui-editor/ui-prefab.ts +0 -95
  424. package/template/project.json +0 -9
  425. package/template/src/scripts/main.ts +0 -94
  426. package/template/src/ui/DefaultHud.tsx +0 -40
  427. package/template/src/ui/game-state.tsx +0 -37
  428. package/template/src/ui/mount-default-hud.tsx +0 -19
  429. package/template/src/ui/mount-ui.ts +0 -15
  430. package/vite-plugin-react-world-provider.ts +0 -81
@@ -0,0 +1 @@
1
+ import{ag as a,ah as s,_ as i,ai as e,aj as t,ak as n,al as d}from"./index-CQEfi217.js";import"./webworkerAll-Fn0e-ouF.js";a.add(s);a.mixin(i,e);a.add(t);a.add(n);a.mixin(i,d);
@@ -0,0 +1 @@
1
+ import{s as j,c as B,d as M,b as G,e as I,T as D,h as b,i as R}from"./index-CQEfi217.js";import{j as ot}from"./index-CQEfi217.js";import{c as F,a as L}from"./game-loop-DMIgSMV-.js";function A(t){return R(t)?{physics:t.ctx.physics,collisions:t.ctx.collisions,camera:t.ctx.camera,frame:t.frame}:{}}function U(t,o,e,n){const s=b({id:n?.id??"main",kind:"threejs",pausable:n?.pausable??!0,adapter:o,mounted:e,scene:e.scene,...A(e)});return R(e)&&e.ctx.components.adoptWorld(s),t.registerWorld(s),s}function q(t){return t.firstParty!==!0?{}:{physics2d:t.ctx.physics2d,collisions2d:t.ctx.collisions2d,frame:t.frame}}function N(t,o,e,n){const s=n?.id??"main",i=e.firstParty===!0,d=b({id:s,kind:"pixijs",pausable:n?.pausable??!0,adapter:o,mounted:e,stage:e.stage,...q(e)});return i&&e.ctx.components.adoptWorld(d),t.registerWorld(d),d}function $(t,o,e,n,s){const i=b({id:s?.id??"main",kind:"react",pausable:s?.pausable??!0,adapter:o,mounted:e,container:n});return t.registerWorld(i),i}async function rt(t){return _(t)}function J(){return{setPixelRatio(){},setClearColor(){},setSize(){},dispose(){},forceContextLoss(){}}}function K(t){if(t.firstParty!==!0)return;const e=t.ctx.app?.renderer?.events?.rootBoundary;if(!(!e||typeof e.hitTest!="function"))return(n,s)=>e.rootTarget!=null&&e.hitTest(n,s)!=null}async function Q(t,o){const{game:e,canvas:n,w:s,h:i,dpr:d,isBottom:a,headless:l,loopHandle:u,assets:h}=o,c=l?J():I(n,s,i,void 0,{alpha:!a});c.setSize(s,i,!1),n.style.width="100%",n.style.height="100%",c.setPixelRatio(d),a||c.setClearColor(0,0);const p={three:D,surface:{canvas:n,width:s,height:i},renderer:c,loop:u,assets:h,headless:l,game:e,requestSystem:()=>null},y=await t.adapter.mount(p);return U(e,t.adapter,y,{id:t.id,pausable:t.pausable}),{mountedEntry:{id:t.id,kind:"threejs",element:n,mounted:y,renderer:c},routerEntry:{id:t.id,zOrder:t.zOrder??0,canvas:n,hitTest:t.hitTest}}}async function V(t,o){const{game:e,canvas:n,w:s,h:i,dpr:d,isBottom:a}=o,l={canvas:n,width:s,height:i,game:e,dpr:d,transparent:!a,preserveDrawingBuffer:!0},u=await t.adapter.mount(l);return N(e,t.adapter,u,{id:t.id,pausable:t.pausable}),{mountedEntry:{id:t.id,kind:"pixijs",element:n,mounted:u,renderer:void 0},routerEntry:{id:t.id,zOrder:t.zOrder??0,canvas:n,hitTest:t.hitTest??K(u)}}}async function X(t,o,e){e.style.pointerEvents="none",e.style.width="100%",e.style.height="100%";const n={container:e,game:o},s=await t.adapter.mount(n);return $(o,t.adapter,s,e,{id:t.id,pausable:t.pausable}),{mountedEntry:{id:t.id,kind:"react",element:e,mounted:s,renderer:void 0}}}function Y(t){return()=>{}}async function Z(t,o,e){const{surfacesById:n,...s}=e,i=[],d=[];for(const a of t){const l=a.id===o;if(a.kind==="react"){const y=n.get(a.id),{mountedEntry:v}=await X(a,s.game,y);i.push(v);continue}const u=n.get(a.id),h={...s,canvas:u,isBottom:l};let c,p;a.kind==="threejs"?{mountedEntry:c,routerEntry:p}=await Q(a,h):a.kind==="pixijs"?{mountedEntry:c,routerEntry:p}=await V(a,h):G(a,"create-runtime mount loop"),i.push(c),d.push(p)}return{mountedEntries:i,routerEntries:d}}async function _(t){const{container:o,roots:e,width:n,height:s,headless:i=!1,seed:d}=t;if(e.length===0)throw new Error("createGameRuntime: `roots` must contain at least one root.");const a=e,l=Math.max(1,n??o.clientWidth??0),u=Math.max(1,s??o.clientHeight??0),h=i?1:Math.min(typeof window<"u"&&window.devicePixelRatio||1,2);o.style.position||(o.style.position="relative");const c=j(a.map(r=>({id:r.id,zOrder:r.zOrder??0,hitTest:r.hitTest}))),p=c[0]?.id,y=new Map(a.map(r=>[r.id,r.kind])),v=new Map;c.forEach((r,x)=>{const g=y.get(r.id)==="react",m=document.createElement(g?"div":"canvas");if(!g){const w=m;w.width=l,w.height=u}m.style.cssText=`position:absolute;top:0;left:0;width:100%;height:100%;z-index:${x+1};contain:layout paint;`,o.appendChild(m),v.set(r.id,m)});const T=L(),E=new Set,z={onUpdate(r){return E.add(r),()=>E.delete(r)}};let k=!1;const W=F({fixedTimestep:1/60,maxSubSteps:8,update:r=>{k&&f.runFrame(r);for(const x of E)x(r)}}),f=B({loop:W,assets:T,seed:d}),{mountedEntries:P,routerEntries:C}=await Z(a,p,{game:f,surfacesById:v,w:l,h:u,dpr:h,headless:i,loopHandle:z,assets:T}),S=M(o,C);k=!0,W.start();const H=Y();function O(){W.stop(),S.dispose();for(const r of P)r.mounted.dispose(),r.renderer?.dispose(),r.renderer?.forceContextLoss(),o.removeChild(r.element);H()}return{stop:O,pause(){f.play.pause()},resume(){f.play.resume()},step(){f.play.step()},resize(r,x){const g=Math.max(1,r),m=Math.max(1,x);for(const w of P)w.renderer?.setSize(g,m,!1),w.mounted.resize?.(g,m)},get scene(){const r=f.defaultWorld.mounted;return r.kind==="threejs"?r.scene:void 0},get camera(){const r=f.defaultWorld.mounted;return r.kind==="threejs"?r.camera:void 0},get mounted(){return f.defaultWorld.mounted},game:f}}export{ot as adoptSceneCamera,rt as createGameRuntime,N as registerPixiWorld,$ as registerReactWorld,U as registerThreeWorld};
@@ -1,10 +1,10 @@
1
- import{a9 as u,aX as Q,aY as pt,aZ as gt,a_ as rt,a$ as ot,b0 as mt,b1 as ft,ah as tt,af as bt,av as yt,S as vt,L as wt,ar as At,P as xt,as as _t,X as Et,M as $t,b2 as St,b3 as Ct,aV as kt,$ as Lt,N as zt,b4 as Mt,b5 as Vt}from"./index-_bCaipUk.js";import{S as Dt}from"./stats.module--VATS4Kh.js";class O{constructor(t=new u(0,0,0),e=new u(0,1,0),i=1){this.start=t,this.end=e,this.radius=i}clone(){return new O(this.start.clone(),this.end.clone(),this.radius)}set(t,e,i){this.start.copy(t),this.end.copy(e),this.radius=i}copy(t){this.start.copy(t.start),this.end.copy(t.end),this.radius=t.radius}getCenter(t){return t.copy(this.end).add(this.start).multiplyScalar(.5)}translate(t){this.start.add(t),this.end.add(t)}checkAABBAxis(t,e,i,r,s,n,l,a,d){return(s-t<d||s-i<d)&&(t-n<d||i-n<d)&&(l-e<d||l-r<d)&&(e-a<d||r-a<d)}intersectsBox(t){return this.checkAABBAxis(this.start.x,this.start.y,this.end.x,this.end.y,t.min.x,t.max.x,t.min.y,t.max.y,this.radius)&&this.checkAABBAxis(this.start.x,this.start.z,this.end.x,this.end.z,t.min.x,t.max.x,t.min.z,t.max.z,this.radius)&&this.checkAABBAxis(this.start.y,this.start.z,this.end.y,this.end.z,t.min.y,t.max.y,t.min.z,t.max.z,this.radius)}}const V=new u,D=new u,I=new u,T=new u,w=new gt,W=new rt,Tt=new rt,P=new ot,B=new O,Bt=new u,Ft=new u,It=new u,Pt=1e-10;function Ht(o,t,e=null,i=null){const r=Bt.copy(o.end).sub(o.start),s=Ft.copy(t.end).sub(t.start),n=It.copy(t.start).sub(o.start),l=r.dot(s),a=r.dot(r),d=s.dot(s),h=s.dot(n),p=r.dot(n);let c,b;const k=a*d-l*l;if(Math.abs(k)<Pt){const M=-h/d,L=(l-h)/d;Math.abs(M-.5)<Math.abs(L-.5)?(c=0,b=M):(c=1,b=L)}else c=(h*l+p*d)/k,b=(c*l-h)/d;b=Math.max(0,Math.min(1,b)),c=Math.max(0,Math.min(1,c)),e&&e.copy(r).multiplyScalar(c).add(o.start),i&&i.copy(s).multiplyScalar(b).add(t.start)}class N{constructor(t){this.box=t,this.bounds=new Q,this.subTrees=[],this.triangles=[],this.layers=new pt}addTriangle(t){return this.bounds.min.x=Math.min(this.bounds.min.x,t.a.x,t.b.x,t.c.x),this.bounds.min.y=Math.min(this.bounds.min.y,t.a.y,t.b.y,t.c.y),this.bounds.min.z=Math.min(this.bounds.min.z,t.a.z,t.b.z,t.c.z),this.bounds.max.x=Math.max(this.bounds.max.x,t.a.x,t.b.x,t.c.x),this.bounds.max.y=Math.max(this.bounds.max.y,t.a.y,t.b.y,t.c.y),this.bounds.max.z=Math.max(this.bounds.max.z,t.a.z,t.b.z,t.c.z),this.triangles.push(t),this}calcBox(){return this.box=this.bounds.clone(),this.box.min.x-=.01,this.box.min.y-=.01,this.box.min.z-=.01,this}split(t){if(!this.box)return;const e=[],i=D.copy(this.box.max).sub(this.box.min).multiplyScalar(.5);for(let s=0;s<2;s++)for(let n=0;n<2;n++)for(let l=0;l<2;l++){const a=new Q,d=V.set(s,n,l);a.min.copy(this.box.min).add(d.multiply(i)),a.max.copy(a.min).add(i),e.push(new N(a))}let r;for(;r=this.triangles.pop();)for(let s=0;s<e.length;s++)e[s].box.intersectsTriangle(r)&&e[s].triangles.push(r);for(let s=0;s<e.length;s++){const n=e[s].triangles.length;n>8&&t<16&&e[s].split(t+1),n!==0&&this.subTrees.push(e[s])}return this}build(){return this.calcBox(),this.split(0),this}getRayTriangles(t,e){for(let i=0;i<this.subTrees.length;i++){const r=this.subTrees[i];if(t.intersectsBox(r.box))if(r.triangles.length>0)for(let s=0;s<r.triangles.length;s++)e.indexOf(r.triangles[s])===-1&&e.push(r.triangles[s]);else r.getRayTriangles(t,e)}return e}triangleCapsuleIntersect(t,e){e.getPlane(w);const i=w.distanceToPoint(t.start)-t.radius,r=w.distanceToPoint(t.end)-t.radius;if(i>0&&r>0||i<-t.radius&&r<-t.radius)return!1;const s=Math.abs(i/(Math.abs(i)+Math.abs(r))),n=V.copy(t.start).lerp(t.end,s);if(e.containsPoint(n))return{normal:w.normal.clone(),point:n.clone(),depth:Math.abs(Math.min(i,r))};const l=t.radius*t.radius,a=W.set(t.start,t.end),d=[[e.a,e.b],[e.b,e.c],[e.c,e.a]];for(let h=0;h<d.length;h++){const p=Tt.set(d[h][0],d[h][1]);if(Ht(a,p,I,T),I.distanceToSquared(T)<l)return{normal:I.clone().sub(T).normalize(),point:T.clone(),depth:t.radius-I.distanceTo(T)}}return!1}triangleSphereIntersect(t,e){if(e.getPlane(w),!t.intersectsPlane(w))return!1;const i=Math.abs(w.distanceToSphere(t)),r=t.radius*t.radius-i*i,s=w.projectPoint(t.center,V);if(e.containsPoint(t.center))return{normal:w.normal.clone(),point:s.clone(),depth:Math.abs(w.distanceToSphere(t))};const n=[[e.a,e.b],[e.b,e.c],[e.c,e.a]];for(let l=0;l<n.length;l++){W.set(n[l][0],n[l][1]),W.closestPointToPoint(s,!0,D);const a=D.distanceToSquared(t.center);if(a<r)return{normal:t.center.clone().sub(D).normalize(),point:D.clone(),depth:t.radius-Math.sqrt(a)}}return!1}getSphereTriangles(t,e){for(let i=0;i<this.subTrees.length;i++){const r=this.subTrees[i];if(t.intersectsBox(r.box))if(r.triangles.length>0)for(let s=0;s<r.triangles.length;s++)e.indexOf(r.triangles[s])===-1&&e.push(r.triangles[s]);else r.getSphereTriangles(t,e)}}getCapsuleTriangles(t,e){for(let i=0;i<this.subTrees.length;i++){const r=this.subTrees[i];if(t.intersectsBox(r.box))if(r.triangles.length>0)for(let s=0;s<r.triangles.length;s++)e.indexOf(r.triangles[s])===-1&&e.push(r.triangles[s]);else r.getCapsuleTriangles(t,e)}}sphereIntersect(t){P.copy(t);const e=[];let i,r=!1;this.getSphereTriangles(t,e);for(let s=0;s<e.length;s++)(i=this.triangleSphereIntersect(P,e[s]))&&(r=!0,P.center.add(i.normal.multiplyScalar(i.depth)));if(r){const s=P.center.clone().sub(t.center),n=s.length();return{normal:s.normalize(),depth:n}}return!1}capsuleIntersect(t){B.copy(t);const e=[];let i,r=!1;this.getCapsuleTriangles(B,e);for(let s=0;s<e.length;s++)(i=this.triangleCapsuleIntersect(B,e[s]))&&(r=!0,B.translate(i.normal.multiplyScalar(i.depth)));if(r){const s=B.getCenter(new u).sub(t.getCenter(V)),n=s.length();return{normal:s.normalize(),depth:n}}return!1}rayIntersect(t){if(t.direction.length()===0)return;const e=[];let i,r,s=1e100;this.getRayTriangles(t,e);for(let n=0;n<e.length;n++){const l=t.intersectTriangle(e[n].a,e[n].b,e[n].c,!0,V);if(l){const a=l.sub(t.origin).length();s>a&&(r=l.clone().add(t.origin),s=a,i=e[n])}}return s<1e100?{distance:s,triangle:i,position:r}:!1}fromGraphNode(t){return t.updateWorldMatrix(!0,!0),t.traverse(e=>{if(e.isMesh===!0&&this.layers.test(e.layers)){let i,r=!1;e.geometry.index!==null?(r=!0,i=e.geometry.toNonIndexed()):i=e.geometry;const s=i.getAttribute("position");for(let n=0;n<s.count;n+=3){const l=new u().fromBufferAttribute(s,n),a=new u().fromBufferAttribute(s,n+1),d=new u().fromBufferAttribute(s,n+2);l.applyMatrix4(e.matrixWorld),a.applyMatrix4(e.matrixWorld),d.applyMatrix4(e.matrixWorld),this.addTriangle(new mt(l,a,d))}r&&i.dispose()}}),this.build(),this}clear(){return this.box=null,this.bounds.makeEmpty(),this.subTrees.length=0,this.triangles.length=0,this}}class Ot extends ft{constructor(t,e=16776960){super(new tt,new bt({color:e,toneMapped:!1})),this.octree=t,this.color=e,this.type="OctreeHelper",this.update()}update(){const t=[];function e(i){for(let r=0;r<i.length;r++){const s=i[r].box.min,n=i[r].box.max;t.push(n.x,n.y,n.z),t.push(s.x,n.y,n.z),t.push(s.x,n.y,n.z),t.push(s.x,s.y,n.z),t.push(s.x,s.y,n.z),t.push(n.x,s.y,n.z),t.push(n.x,s.y,n.z),t.push(n.x,n.y,n.z),t.push(n.x,n.y,s.z),t.push(s.x,n.y,s.z),t.push(s.x,n.y,s.z),t.push(s.x,s.y,s.z),t.push(s.x,s.y,s.z),t.push(n.x,s.y,s.z),t.push(n.x,s.y,s.z),t.push(n.x,n.y,s.z),t.push(n.x,n.y,n.z),t.push(n.x,n.y,s.z),t.push(s.x,n.y,n.z),t.push(s.x,n.y,s.z),t.push(s.x,s.y,n.z),t.push(s.x,s.y,s.z),t.push(n.x,s.y,n.z),t.push(n.x,s.y,s.z),e(i[r].subTrees)}}e(this.octree.subTrees),this.geometry.dispose(),this.geometry=new tt,this.geometry.setAttribute("position",new yt(t,3))}dispose(){this.geometry.dispose(),this.material.dispose()}}/**
1
+ import{a6 as u,b8 as Q,b9 as pt,ba as gt,bb as rt,bc as ot,bd as mt,be as ft,bf as tt,bg as bt,ac as yt,S as vt,F as wt,a8 as At,P as xt,a9 as _t,L as Et,G as $t,bh as St,bi as Ct,b6 as kt,Q as Lt,M as zt,bj as Mt,bk as Vt}from"./index-CQEfi217.js";import{S as Dt}from"./stats.module--VATS4Kh.js";class O{constructor(t=new u(0,0,0),e=new u(0,1,0),i=1){this.start=t,this.end=e,this.radius=i}clone(){return new O(this.start.clone(),this.end.clone(),this.radius)}set(t,e,i){this.start.copy(t),this.end.copy(e),this.radius=i}copy(t){this.start.copy(t.start),this.end.copy(t.end),this.radius=t.radius}getCenter(t){return t.copy(this.end).add(this.start).multiplyScalar(.5)}translate(t){this.start.add(t),this.end.add(t)}checkAABBAxis(t,e,i,r,s,n,l,a,d){return(s-t<d||s-i<d)&&(t-n<d||i-n<d)&&(l-e<d||l-r<d)&&(e-a<d||r-a<d)}intersectsBox(t){return this.checkAABBAxis(this.start.x,this.start.y,this.end.x,this.end.y,t.min.x,t.max.x,t.min.y,t.max.y,this.radius)&&this.checkAABBAxis(this.start.x,this.start.z,this.end.x,this.end.z,t.min.x,t.max.x,t.min.z,t.max.z,this.radius)&&this.checkAABBAxis(this.start.y,this.start.z,this.end.y,this.end.z,t.min.y,t.max.y,t.min.z,t.max.z,this.radius)}}const V=new u,D=new u,I=new u,F=new u,w=new gt,W=new rt,Ft=new rt,P=new ot,T=new O,Tt=new u,Bt=new u,It=new u,Pt=1e-10;function Ht(o,t,e=null,i=null){const r=Tt.copy(o.end).sub(o.start),s=Bt.copy(t.end).sub(t.start),n=It.copy(t.start).sub(o.start),l=r.dot(s),a=r.dot(r),d=s.dot(s),h=s.dot(n),p=r.dot(n);let c,b;const k=a*d-l*l;if(Math.abs(k)<Pt){const M=-h/d,L=(l-h)/d;Math.abs(M-.5)<Math.abs(L-.5)?(c=0,b=M):(c=1,b=L)}else c=(h*l+p*d)/k,b=(c*l-h)/d;b=Math.max(0,Math.min(1,b)),c=Math.max(0,Math.min(1,c)),e&&e.copy(r).multiplyScalar(c).add(o.start),i&&i.copy(s).multiplyScalar(b).add(t.start)}class J{constructor(t){this.box=t,this.bounds=new Q,this.subTrees=[],this.triangles=[],this.layers=new pt}addTriangle(t){return this.bounds.min.x=Math.min(this.bounds.min.x,t.a.x,t.b.x,t.c.x),this.bounds.min.y=Math.min(this.bounds.min.y,t.a.y,t.b.y,t.c.y),this.bounds.min.z=Math.min(this.bounds.min.z,t.a.z,t.b.z,t.c.z),this.bounds.max.x=Math.max(this.bounds.max.x,t.a.x,t.b.x,t.c.x),this.bounds.max.y=Math.max(this.bounds.max.y,t.a.y,t.b.y,t.c.y),this.bounds.max.z=Math.max(this.bounds.max.z,t.a.z,t.b.z,t.c.z),this.triangles.push(t),this}calcBox(){return this.box=this.bounds.clone(),this.box.min.x-=.01,this.box.min.y-=.01,this.box.min.z-=.01,this}split(t){if(!this.box)return;const e=[],i=D.copy(this.box.max).sub(this.box.min).multiplyScalar(.5);for(let s=0;s<2;s++)for(let n=0;n<2;n++)for(let l=0;l<2;l++){const a=new Q,d=V.set(s,n,l);a.min.copy(this.box.min).add(d.multiply(i)),a.max.copy(a.min).add(i),e.push(new J(a))}let r;for(;r=this.triangles.pop();)for(let s=0;s<e.length;s++)e[s].box.intersectsTriangle(r)&&e[s].triangles.push(r);for(let s=0;s<e.length;s++){const n=e[s].triangles.length;n>8&&t<16&&e[s].split(t+1),n!==0&&this.subTrees.push(e[s])}return this}build(){return this.calcBox(),this.split(0),this}getRayTriangles(t,e){for(let i=0;i<this.subTrees.length;i++){const r=this.subTrees[i];if(t.intersectsBox(r.box))if(r.triangles.length>0)for(let s=0;s<r.triangles.length;s++)e.indexOf(r.triangles[s])===-1&&e.push(r.triangles[s]);else r.getRayTriangles(t,e)}return e}triangleCapsuleIntersect(t,e){e.getPlane(w);const i=w.distanceToPoint(t.start)-t.radius,r=w.distanceToPoint(t.end)-t.radius;if(i>0&&r>0||i<-t.radius&&r<-t.radius)return!1;const s=Math.abs(i/(Math.abs(i)+Math.abs(r))),n=V.copy(t.start).lerp(t.end,s);if(e.containsPoint(n))return{normal:w.normal.clone(),point:n.clone(),depth:Math.abs(Math.min(i,r))};const l=t.radius*t.radius,a=W.set(t.start,t.end),d=[[e.a,e.b],[e.b,e.c],[e.c,e.a]];for(let h=0;h<d.length;h++){const p=Ft.set(d[h][0],d[h][1]);if(Ht(a,p,I,F),I.distanceToSquared(F)<l)return{normal:I.clone().sub(F).normalize(),point:F.clone(),depth:t.radius-I.distanceTo(F)}}return!1}triangleSphereIntersect(t,e){if(e.getPlane(w),!t.intersectsPlane(w))return!1;const i=Math.abs(w.distanceToSphere(t)),r=t.radius*t.radius-i*i,s=w.projectPoint(t.center,V);if(e.containsPoint(t.center))return{normal:w.normal.clone(),point:s.clone(),depth:Math.abs(w.distanceToSphere(t))};const n=[[e.a,e.b],[e.b,e.c],[e.c,e.a]];for(let l=0;l<n.length;l++){W.set(n[l][0],n[l][1]),W.closestPointToPoint(s,!0,D);const a=D.distanceToSquared(t.center);if(a<r)return{normal:t.center.clone().sub(D).normalize(),point:D.clone(),depth:t.radius-Math.sqrt(a)}}return!1}getSphereTriangles(t,e){for(let i=0;i<this.subTrees.length;i++){const r=this.subTrees[i];if(t.intersectsBox(r.box))if(r.triangles.length>0)for(let s=0;s<r.triangles.length;s++)e.indexOf(r.triangles[s])===-1&&e.push(r.triangles[s]);else r.getSphereTriangles(t,e)}}getCapsuleTriangles(t,e){for(let i=0;i<this.subTrees.length;i++){const r=this.subTrees[i];if(t.intersectsBox(r.box))if(r.triangles.length>0)for(let s=0;s<r.triangles.length;s++)e.indexOf(r.triangles[s])===-1&&e.push(r.triangles[s]);else r.getCapsuleTriangles(t,e)}}sphereIntersect(t){P.copy(t);const e=[];let i,r=!1;this.getSphereTriangles(t,e);for(let s=0;s<e.length;s++)(i=this.triangleSphereIntersect(P,e[s]))&&(r=!0,P.center.add(i.normal.multiplyScalar(i.depth)));if(r){const s=P.center.clone().sub(t.center),n=s.length();return{normal:s.normalize(),depth:n}}return!1}capsuleIntersect(t){T.copy(t);const e=[];let i,r=!1;this.getCapsuleTriangles(T,e);for(let s=0;s<e.length;s++)(i=this.triangleCapsuleIntersect(T,e[s]))&&(r=!0,T.translate(i.normal.multiplyScalar(i.depth)));if(r){const s=T.getCenter(new u).sub(t.getCenter(V)),n=s.length();return{normal:s.normalize(),depth:n}}return!1}rayIntersect(t){if(t.direction.length()===0)return;const e=[];let i,r,s=1e100;this.getRayTriangles(t,e);for(let n=0;n<e.length;n++){const l=t.intersectTriangle(e[n].a,e[n].b,e[n].c,!0,V);if(l){const a=l.sub(t.origin).length();s>a&&(r=l.clone().add(t.origin),s=a,i=e[n])}}return s<1e100?{distance:s,triangle:i,position:r}:!1}fromGraphNode(t){return t.updateWorldMatrix(!0,!0),t.traverse(e=>{if(e.isMesh===!0&&this.layers.test(e.layers)){let i,r=!1;e.geometry.index!==null?(r=!0,i=e.geometry.toNonIndexed()):i=e.geometry;const s=i.getAttribute("position");for(let n=0;n<s.count;n+=3){const l=new u().fromBufferAttribute(s,n),a=new u().fromBufferAttribute(s,n+1),d=new u().fromBufferAttribute(s,n+2);l.applyMatrix4(e.matrixWorld),a.applyMatrix4(e.matrixWorld),d.applyMatrix4(e.matrixWorld),this.addTriangle(new mt(l,a,d))}r&&i.dispose()}}),this.build(),this}clear(){return this.box=null,this.bounds.makeEmpty(),this.subTrees.length=0,this.triangles.length=0,this}}class Ot extends ft{constructor(t,e=16776960){super(new tt,new bt({color:e,toneMapped:!1})),this.octree=t,this.color=e,this.type="OctreeHelper",this.update()}update(){const t=[];function e(i){for(let r=0;r<i.length;r++){const s=i[r].box.min,n=i[r].box.max;t.push(n.x,n.y,n.z),t.push(s.x,n.y,n.z),t.push(s.x,n.y,n.z),t.push(s.x,s.y,n.z),t.push(s.x,s.y,n.z),t.push(n.x,s.y,n.z),t.push(n.x,s.y,n.z),t.push(n.x,n.y,n.z),t.push(n.x,n.y,s.z),t.push(s.x,n.y,s.z),t.push(s.x,n.y,s.z),t.push(s.x,s.y,s.z),t.push(s.x,s.y,s.z),t.push(n.x,s.y,s.z),t.push(n.x,s.y,s.z),t.push(n.x,n.y,s.z),t.push(n.x,n.y,n.z),t.push(n.x,n.y,s.z),t.push(s.x,n.y,n.z),t.push(s.x,n.y,s.z),t.push(s.x,s.y,n.z),t.push(s.x,s.y,s.z),t.push(n.x,s.y,n.z),t.push(n.x,s.y,s.z),e(i[r].subTrees)}}e(this.octree.subTrees),this.geometry.dispose(),this.geometry=new tt,this.geometry.setAttribute("position",new yt(t,3))}dispose(){this.geometry.dispose(),this.material.dispose()}}/**
2
2
  * lil-gui
3
3
  * https://lil-gui.georgealways.com
4
4
  * @version 0.17.0
5
5
  * @author George Michael Brower
6
6
  * @license MIT
7
- */class x{constructor(t,e,i,r,s="div"){this.parent=t,this.object=e,this.property=i,this._disabled=!1,this._hidden=!1,this.initialValue=this.getValue(),this.domElement=document.createElement("div"),this.domElement.classList.add("controller"),this.domElement.classList.add(r),this.$name=document.createElement("div"),this.$name.classList.add("name"),x.nextNameID=x.nextNameID||0,this.$name.id="lil-gui-name-"+ ++x.nextNameID,this.$widget=document.createElement(s),this.$widget.classList.add("widget"),this.$disable=this.$widget,this.domElement.appendChild(this.$name),this.domElement.appendChild(this.$widget),this.parent.children.push(this),this.parent.controllers.push(this),this.parent.$children.appendChild(this.domElement),this._listenCallback=this._listenCallback.bind(this),this.name(i)}name(t){return this._name=t,this.$name.innerHTML=t,this}onChange(t){return this._onChange=t,this}_callOnChange(){this.parent._callOnChange(this),this._onChange!==void 0&&this._onChange.call(this,this.getValue()),this._changed=!0}onFinishChange(t){return this._onFinishChange=t,this}_callOnFinishChange(){this._changed&&(this.parent._callOnFinishChange(this),this._onFinishChange!==void 0&&this._onFinishChange.call(this,this.getValue())),this._changed=!1}reset(){return this.setValue(this.initialValue),this._callOnFinishChange(),this}enable(t=!0){return this.disable(!t)}disable(t=!0){return t===this._disabled||(this._disabled=t,this.domElement.classList.toggle("disabled",t),this.$disable.toggleAttribute("disabled",t)),this}show(t=!0){return this._hidden=!t,this.domElement.style.display=this._hidden?"none":"",this}hide(){return this.show(!1)}options(t){const e=this.parent.add(this.object,this.property,t);return e.name(this._name),this.destroy(),e}min(t){return this}max(t){return this}step(t){return this}decimals(t){return this}listen(t=!0){return this._listening=t,this._listenCallbackID!==void 0&&(cancelAnimationFrame(this._listenCallbackID),this._listenCallbackID=void 0),this._listening&&this._listenCallback(),this}_listenCallback(){this._listenCallbackID=requestAnimationFrame(this._listenCallback);const t=this.save();t!==this._listenPrevValue&&this.updateDisplay(),this._listenPrevValue=t}getValue(){return this.object[this.property]}setValue(t){return this.object[this.property]=t,this._callOnChange(),this.updateDisplay(),this}updateDisplay(){return this}load(t){return this.setValue(t),this._callOnFinishChange(),this}save(){return this.getValue()}destroy(){this.listen(!1),this.parent.children.splice(this.parent.children.indexOf(this),1),this.parent.controllers.splice(this.parent.controllers.indexOf(this),1),this.parent.$children.removeChild(this.domElement)}}class Gt extends x{constructor(t,e,i){super(t,e,i,"boolean","label"),this.$input=document.createElement("input"),this.$input.setAttribute("type","checkbox"),this.$input.setAttribute("aria-labelledby",this.$name.id),this.$widget.appendChild(this.$input),this.$input.addEventListener("change",()=>{this.setValue(this.$input.checked),this._callOnFinishChange()}),this.$disable=this.$input,this.updateDisplay()}updateDisplay(){return this.$input.checked=this.getValue(),this}}function X(o){let t,e;return(t=o.match(/(#|0x)?([a-f0-9]{6})/i))?e=t[2]:(t=o.match(/rgb\(\s*(\d*)\s*,\s*(\d*)\s*,\s*(\d*)\s*\)/))?e=parseInt(t[1]).toString(16).padStart(2,0)+parseInt(t[2]).toString(16).padStart(2,0)+parseInt(t[3]).toString(16).padStart(2,0):(t=o.match(/^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i))&&(e=t[1]+t[1]+t[2]+t[2]+t[3]+t[3]),!!e&&"#"+e}const Yt={isPrimitive:!0,match:o=>typeof o=="string",fromHexString:X,toHexString:X},F={isPrimitive:!0,match:o=>typeof o=="number",fromHexString:o=>parseInt(o.substring(1),16),toHexString:o=>"#"+o.toString(16).padStart(6,0)},Wt={isPrimitive:!1,match:Array.isArray,fromHexString(o,t,e=1){const i=F.fromHexString(o);t[0]=(i>>16&255)/255*e,t[1]=(i>>8&255)/255*e,t[2]=(255&i)/255*e},toHexString:([o,t,e],i=1)=>F.toHexString(o*(i=255/i)<<16^t*i<<8^e*i<<0)},jt={isPrimitive:!1,match:o=>Object(o)===o,fromHexString(o,t,e=1){const i=F.fromHexString(o);t.r=(i>>16&255)/255*e,t.g=(i>>8&255)/255*e,t.b=(255&i)/255*e},toHexString:({r:o,g:t,b:e},i=1)=>F.toHexString(o*(i=255/i)<<16^t*i<<8^e*i<<0)},Rt=[Yt,F,Wt,jt];class Xt extends x{constructor(t,e,i,r){var s;super(t,e,i,"color"),this.$input=document.createElement("input"),this.$input.setAttribute("type","color"),this.$input.setAttribute("tabindex",-1),this.$input.setAttribute("aria-labelledby",this.$name.id),this.$text=document.createElement("input"),this.$text.setAttribute("type","text"),this.$text.setAttribute("spellcheck","false"),this.$text.setAttribute("aria-labelledby",this.$name.id),this.$display=document.createElement("div"),this.$display.classList.add("display"),this.$display.appendChild(this.$input),this.$widget.appendChild(this.$display),this.$widget.appendChild(this.$text),this._format=(s=this.initialValue,Rt.find(n=>n.match(s))),this._rgbScale=r,this._initialValueHexString=this.save(),this._textFocused=!1,this.$input.addEventListener("input",()=>{this._setValueFromHexString(this.$input.value)}),this.$input.addEventListener("blur",()=>{this._callOnFinishChange()}),this.$text.addEventListener("input",()=>{const n=X(this.$text.value);n&&this._setValueFromHexString(n)}),this.$text.addEventListener("focus",()=>{this._textFocused=!0,this.$text.select()}),this.$text.addEventListener("blur",()=>{this._textFocused=!1,this.updateDisplay(),this._callOnFinishChange()}),this.$disable=this.$text,this.updateDisplay()}reset(){return this._setValueFromHexString(this._initialValueHexString),this}_setValueFromHexString(t){if(this._format.isPrimitive){const e=this._format.fromHexString(t);this.setValue(e)}else this._format.fromHexString(t,this.getValue(),this._rgbScale),this._callOnChange(),this.updateDisplay()}save(){return this._format.toHexString(this.getValue(),this._rgbScale)}load(t){return this._setValueFromHexString(t),this._callOnFinishChange(),this}updateDisplay(){return this.$input.value=this._format.toHexString(this.getValue(),this._rgbScale),this._textFocused||(this.$text.value=this.$input.value.substring(1)),this.$display.style.backgroundColor=this.$input.value,this}}class j extends x{constructor(t,e,i){super(t,e,i,"function"),this.$button=document.createElement("button"),this.$button.appendChild(this.$name),this.$widget.appendChild(this.$button),this.$button.addEventListener("click",r=>{r.preventDefault(),this.getValue().call(this.object)}),this.$button.addEventListener("touchstart",()=>{},{passive:!0}),this.$disable=this.$button}}class Kt extends x{constructor(t,e,i,r,s,n){super(t,e,i,"number"),this._initInput(),this.min(r),this.max(s);const l=n!==void 0;this.step(l?n:this._getImplicitStep(),l),this.updateDisplay()}decimals(t){return this._decimals=t,this.updateDisplay(),this}min(t){return this._min=t,this._onUpdateMinMax(),this}max(t){return this._max=t,this._onUpdateMinMax(),this}step(t,e=!0){return this._step=t,this._stepExplicit=e,this}updateDisplay(){const t=this.getValue();if(this._hasSlider){let e=(t-this._min)/(this._max-this._min);e=Math.max(0,Math.min(e,1)),this.$fill.style.width=100*e+"%"}return this._inputFocused||(this.$input.value=this._decimals===void 0?t:t.toFixed(this._decimals)),this}_initInput(){this.$input=document.createElement("input"),this.$input.setAttribute("type","number"),this.$input.setAttribute("step","any"),this.$input.setAttribute("aria-labelledby",this.$name.id),this.$widget.appendChild(this.$input),this.$disable=this.$input;const t=h=>{const p=parseFloat(this.$input.value);isNaN(p)||(this._snapClampSetValue(p+h),this.$input.value=this.getValue())};let e,i,r,s,n,l=!1;const a=h=>{if(l){const p=h.clientX-e,c=h.clientY-i;Math.abs(c)>5?(h.preventDefault(),this.$input.blur(),l=!1,this._setDraggingStyle(!0,"vertical")):Math.abs(p)>5&&d()}if(!l){const p=h.clientY-r;n-=p*this._step*this._arrowKeyMultiplier(h),s+n>this._max?n=this._max-s:s+n<this._min&&(n=this._min-s),this._snapClampSetValue(s+n)}r=h.clientY},d=()=>{this._setDraggingStyle(!1,"vertical"),this._callOnFinishChange(),window.removeEventListener("mousemove",a),window.removeEventListener("mouseup",d)};this.$input.addEventListener("input",()=>{let h=parseFloat(this.$input.value);isNaN(h)||(this._stepExplicit&&(h=this._snap(h)),this.setValue(this._clamp(h)))}),this.$input.addEventListener("keydown",h=>{h.code==="Enter"&&this.$input.blur(),h.code==="ArrowUp"&&(h.preventDefault(),t(this._step*this._arrowKeyMultiplier(h))),h.code==="ArrowDown"&&(h.preventDefault(),t(this._step*this._arrowKeyMultiplier(h)*-1))}),this.$input.addEventListener("wheel",h=>{this._inputFocused&&(h.preventDefault(),t(this._step*this._normalizeMouseWheel(h)))},{passive:!1}),this.$input.addEventListener("mousedown",h=>{e=h.clientX,i=r=h.clientY,l=!0,s=this.getValue(),n=0,window.addEventListener("mousemove",a),window.addEventListener("mouseup",d)}),this.$input.addEventListener("focus",()=>{this._inputFocused=!0}),this.$input.addEventListener("blur",()=>{this._inputFocused=!1,this.updateDisplay(),this._callOnFinishChange()})}_initSlider(){this._hasSlider=!0,this.$slider=document.createElement("div"),this.$slider.classList.add("slider"),this.$fill=document.createElement("div"),this.$fill.classList.add("fill"),this.$slider.appendChild(this.$fill),this.$widget.insertBefore(this.$slider,this.$input),this.domElement.classList.add("hasSlider");const t=c=>{const b=this.$slider.getBoundingClientRect();let k=(M=c,L=b.left,Z=b.right,Y=this._min,q=this._max,(M-L)/(Z-L)*(q-Y)+Y);var M,L,Z,Y,q;this._snapClampSetValue(k)},e=c=>{t(c.clientX)},i=()=>{this._callOnFinishChange(),this._setDraggingStyle(!1),window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",i)};let r,s,n=!1;const l=c=>{c.preventDefault(),this._setDraggingStyle(!0),t(c.touches[0].clientX),n=!1},a=c=>{if(n){const b=c.touches[0].clientX-r,k=c.touches[0].clientY-s;Math.abs(b)>Math.abs(k)?l(c):(window.removeEventListener("touchmove",a),window.removeEventListener("touchend",d))}else c.preventDefault(),t(c.touches[0].clientX)},d=()=>{this._callOnFinishChange(),this._setDraggingStyle(!1),window.removeEventListener("touchmove",a),window.removeEventListener("touchend",d)},h=this._callOnFinishChange.bind(this);let p;this.$slider.addEventListener("mousedown",c=>{this._setDraggingStyle(!0),t(c.clientX),window.addEventListener("mousemove",e),window.addEventListener("mouseup",i)}),this.$slider.addEventListener("touchstart",c=>{c.touches.length>1||(this._hasScrollBar?(r=c.touches[0].clientX,s=c.touches[0].clientY,n=!0):l(c),window.addEventListener("touchmove",a,{passive:!1}),window.addEventListener("touchend",d))},{passive:!1}),this.$slider.addEventListener("wheel",c=>{if(Math.abs(c.deltaX)<Math.abs(c.deltaY)&&this._hasScrollBar)return;c.preventDefault();const b=this._normalizeMouseWheel(c)*this._step;this._snapClampSetValue(this.getValue()+b),this.$input.value=this.getValue(),clearTimeout(p),p=setTimeout(h,400)},{passive:!1})}_setDraggingStyle(t,e="horizontal"){this.$slider&&this.$slider.classList.toggle("active",t),document.body.classList.toggle("lil-gui-dragging",t),document.body.classList.toggle("lil-gui-"+e,t)}_getImplicitStep(){return this._hasMin&&this._hasMax?(this._max-this._min)/1e3:.1}_onUpdateMinMax(){!this._hasSlider&&this._hasMin&&this._hasMax&&(this._stepExplicit||this.step(this._getImplicitStep(),!1),this._initSlider(),this.updateDisplay())}_normalizeMouseWheel(t){let{deltaX:e,deltaY:i}=t;return Math.floor(t.deltaY)!==t.deltaY&&t.wheelDelta&&(e=0,i=-t.wheelDelta/120,i*=this._stepExplicit?1:10),e+-i}_arrowKeyMultiplier(t){let e=this._stepExplicit?1:10;return t.shiftKey?e*=10:t.altKey&&(e/=10),e}_snap(t){const e=Math.round(t/this._step)*this._step;return parseFloat(e.toPrecision(15))}_clamp(t){return t<this._min&&(t=this._min),t>this._max&&(t=this._max),t}_snapClampSetValue(t){this.setValue(this._clamp(this._snap(t)))}get _hasScrollBar(){const t=this.parent.root.$children;return t.scrollHeight>t.clientHeight}get _hasMin(){return this._min!==void 0}get _hasMax(){return this._max!==void 0}}class Nt extends x{constructor(t,e,i,r){super(t,e,i,"option"),this.$select=document.createElement("select"),this.$select.setAttribute("aria-labelledby",this.$name.id),this.$display=document.createElement("div"),this.$display.classList.add("display"),this._values=Array.isArray(r)?r:Object.values(r),this._names=Array.isArray(r)?r:Object.keys(r),this._names.forEach(s=>{const n=document.createElement("option");n.innerHTML=s,this.$select.appendChild(n)}),this.$select.addEventListener("change",()=>{this.setValue(this._values[this.$select.selectedIndex]),this._callOnFinishChange()}),this.$select.addEventListener("focus",()=>{this.$display.classList.add("focus")}),this.$select.addEventListener("blur",()=>{this.$display.classList.remove("focus")}),this.$widget.appendChild(this.$select),this.$widget.appendChild(this.$display),this.$disable=this.$select,this.updateDisplay()}updateDisplay(){const t=this.getValue(),e=this._values.indexOf(t);return this.$select.selectedIndex=e,this.$display.innerHTML=e===-1?t:this._names[e],this}}class Jt extends x{constructor(t,e,i){super(t,e,i,"string"),this.$input=document.createElement("input"),this.$input.setAttribute("type","text"),this.$input.setAttribute("aria-labelledby",this.$name.id),this.$input.addEventListener("input",()=>{this.setValue(this.$input.value)}),this.$input.addEventListener("keydown",r=>{r.code==="Enter"&&this.$input.blur()}),this.$input.addEventListener("blur",()=>{this._callOnFinishChange()}),this.$widget.appendChild(this.$input),this.$disable=this.$input,this.updateDisplay()}updateDisplay(){return this.$input.value=this.getValue(),this}}let et=!1;class J{constructor({parent:t,autoPlace:e=t===void 0,container:i,width:r,title:s="Controls",injectStyles:n=!0,touchStyles:l=!0}={}){if(this.parent=t,this.root=t?t.root:this,this.children=[],this.controllers=[],this.folders=[],this._closed=!1,this._hidden=!1,this.domElement=document.createElement("div"),this.domElement.classList.add("lil-gui"),this.$title=document.createElement("div"),this.$title.classList.add("title"),this.$title.setAttribute("role","button"),this.$title.setAttribute("aria-expanded",!0),this.$title.setAttribute("tabindex",0),this.$title.addEventListener("click",()=>this.openAnimated(this._closed)),this.$title.addEventListener("keydown",a=>{a.code!=="Enter"&&a.code!=="Space"||(a.preventDefault(),this.$title.click())}),this.$title.addEventListener("touchstart",()=>{},{passive:!0}),this.$children=document.createElement("div"),this.$children.classList.add("children"),this.domElement.appendChild(this.$title),this.domElement.appendChild(this.$children),this.title(s),l&&this.domElement.classList.add("allow-touch-styles"),this.parent)return this.parent.children.push(this),this.parent.folders.push(this),void this.parent.$children.appendChild(this.domElement);this.domElement.classList.add("root"),!et&&n&&((function(a){const d=document.createElement("style");d.innerHTML=a;const h=document.querySelector("head link[rel=stylesheet], head style");h?document.head.insertBefore(d,h):document.head.appendChild(d)})('.lil-gui{--background-color:#1f1f1f;--text-color:#ebebeb;--title-background-color:#111;--title-text-color:#ebebeb;--widget-color:#424242;--hover-color:#4f4f4f;--focus-color:#595959;--number-color:#2cc9ff;--string-color:#a2db3c;--font-size:11px;--input-font-size:11px;--font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;--font-family-mono:Menlo,Monaco,Consolas,"Droid Sans Mono",monospace;--padding:4px;--spacing:4px;--widget-height:20px;--name-width:45%;--slider-knob-width:2px;--slider-input-width:27%;--color-input-width:27%;--slider-input-min-width:45px;--color-input-min-width:45px;--folder-indent:7px;--widget-padding:0 0 0 3px;--widget-border-radius:2px;--checkbox-size:calc(var(--widget-height)*0.75);--scrollbar-width:5px;background-color:var(--background-color);color:var(--text-color);font-family:var(--font-family);font-size:var(--font-size);font-style:normal;font-weight:400;line-height:1;text-align:left;touch-action:manipulation;user-select:none;-webkit-user-select:none}.lil-gui,.lil-gui *{box-sizing:border-box;margin:0;padding:0}.lil-gui.root{display:flex;flex-direction:column;width:var(--width,245px)}.lil-gui.root>.title{background:var(--title-background-color);color:var(--title-text-color)}.lil-gui.root>.children{overflow-x:hidden;overflow-y:auto}.lil-gui.root>.children::-webkit-scrollbar{background:var(--background-color);height:var(--scrollbar-width);width:var(--scrollbar-width)}.lil-gui.root>.children::-webkit-scrollbar-thumb{background:var(--focus-color);border-radius:var(--scrollbar-width)}.lil-gui.force-touch-styles{--widget-height:28px;--padding:6px;--spacing:6px;--font-size:13px;--input-font-size:16px;--folder-indent:10px;--scrollbar-width:7px;--slider-input-min-width:50px;--color-input-min-width:65px}.lil-gui.autoPlace{max-height:100%;position:fixed;right:15px;top:0;z-index:1001}.lil-gui .controller{align-items:center;display:flex;margin:var(--spacing) 0;padding:0 var(--padding)}.lil-gui .controller.disabled{opacity:.5}.lil-gui .controller.disabled,.lil-gui .controller.disabled *{pointer-events:none!important}.lil-gui .controller>.name{flex-shrink:0;line-height:var(--widget-height);min-width:var(--name-width);padding-right:var(--spacing);white-space:pre}.lil-gui .controller .widget{align-items:center;display:flex;min-height:var(--widget-height);position:relative;width:100%}.lil-gui .controller.string input{color:var(--string-color)}.lil-gui .controller.boolean .widget{cursor:pointer}.lil-gui .controller.color .display{border-radius:var(--widget-border-radius);height:var(--widget-height);position:relative;width:100%}.lil-gui .controller.color input[type=color]{cursor:pointer;height:100%;opacity:0;width:100%}.lil-gui .controller.color input[type=text]{flex-shrink:0;font-family:var(--font-family-mono);margin-left:var(--spacing);min-width:var(--color-input-min-width);width:var(--color-input-width)}.lil-gui .controller.option select{max-width:100%;opacity:0;position:absolute;width:100%}.lil-gui .controller.option .display{background:var(--widget-color);border-radius:var(--widget-border-radius);height:var(--widget-height);line-height:var(--widget-height);max-width:100%;overflow:hidden;padding-left:.55em;padding-right:1.75em;pointer-events:none;position:relative;word-break:break-all}.lil-gui .controller.option .display.active{background:var(--focus-color)}.lil-gui .controller.option .display:after{bottom:0;content:"↕";font-family:lil-gui;padding-right:.375em;position:absolute;right:0;top:0}.lil-gui .controller.option .widget,.lil-gui .controller.option select{cursor:pointer}.lil-gui .controller.number input{color:var(--number-color)}.lil-gui .controller.number.hasSlider input{flex-shrink:0;margin-left:var(--spacing);min-width:var(--slider-input-min-width);width:var(--slider-input-width)}.lil-gui .controller.number .slider{background-color:var(--widget-color);border-radius:var(--widget-border-radius);cursor:ew-resize;height:var(--widget-height);overflow:hidden;padding-right:var(--slider-knob-width);touch-action:pan-y;width:100%}.lil-gui .controller.number .slider.active{background-color:var(--focus-color)}.lil-gui .controller.number .slider.active .fill{opacity:.95}.lil-gui .controller.number .fill{border-right:var(--slider-knob-width) solid var(--number-color);box-sizing:content-box;height:100%}.lil-gui-dragging .lil-gui{--hover-color:var(--widget-color)}.lil-gui-dragging *{cursor:ew-resize!important}.lil-gui-dragging.lil-gui-vertical *{cursor:ns-resize!important}.lil-gui .title{--title-height:calc(var(--widget-height) + var(--spacing)*1.25);-webkit-tap-highlight-color:transparent;text-decoration-skip:objects;cursor:pointer;font-weight:600;height:var(--title-height);line-height:calc(var(--title-height) - 4px);outline:none;padding:0 var(--padding)}.lil-gui .title:before{content:"▾";display:inline-block;font-family:lil-gui;padding-right:2px}.lil-gui .title:active{background:var(--title-background-color);opacity:.75}.lil-gui.root>.title:focus{text-decoration:none!important}.lil-gui.closed>.title:before{content:"▸"}.lil-gui.closed>.children{opacity:0;transform:translateY(-7px)}.lil-gui.closed:not(.transition)>.children{display:none}.lil-gui.transition>.children{overflow:hidden;pointer-events:none;transition-duration:.3s;transition-property:height,opacity,transform;transition-timing-function:cubic-bezier(.2,.6,.35,1)}.lil-gui .children:empty:before{content:"Empty";display:block;font-style:italic;height:var(--widget-height);line-height:var(--widget-height);margin:var(--spacing) 0;opacity:.5;padding:0 var(--padding)}.lil-gui.root>.children>.lil-gui>.title{border-width:0;border-bottom:1px solid var(--widget-color);border-left:0 solid var(--widget-color);border-right:0 solid var(--widget-color);border-top:1px solid var(--widget-color);transition:border-color .3s}.lil-gui.root>.children>.lil-gui.closed>.title{border-bottom-color:transparent}.lil-gui+.controller{border-top:1px solid var(--widget-color);margin-top:0;padding-top:var(--spacing)}.lil-gui .lil-gui .lil-gui>.title{border:none}.lil-gui .lil-gui .lil-gui>.children{border:none;border-left:2px solid var(--widget-color);margin-left:var(--folder-indent)}.lil-gui .lil-gui .controller{border:none}.lil-gui input{-webkit-tap-highlight-color:transparent;background:var(--widget-color);border:0;border-radius:var(--widget-border-radius);color:var(--text-color);font-family:var(--font-family);font-size:var(--input-font-size);height:var(--widget-height);outline:none;width:100%}.lil-gui input:disabled{opacity:1}.lil-gui input[type=number],.lil-gui input[type=text]{padding:var(--widget-padding)}.lil-gui input[type=number]:focus,.lil-gui input[type=text]:focus{background:var(--focus-color)}.lil-gui input::-webkit-inner-spin-button,.lil-gui input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.lil-gui input[type=number]{-moz-appearance:textfield}.lil-gui input[type=checkbox]{appearance:none;-webkit-appearance:none;border-radius:var(--widget-border-radius);cursor:pointer;height:var(--checkbox-size);text-align:center;width:var(--checkbox-size)}.lil-gui input[type=checkbox]:checked:before{content:"✓";font-family:lil-gui;font-size:var(--checkbox-size);line-height:var(--checkbox-size)}.lil-gui button{-webkit-tap-highlight-color:transparent;background:var(--widget-color);border:1px solid var(--widget-color);border-radius:var(--widget-border-radius);color:var(--text-color);cursor:pointer;font-family:var(--font-family);font-size:var(--font-size);height:var(--widget-height);line-height:calc(var(--widget-height) - 4px);outline:none;text-align:center;text-transform:none;width:100%}.lil-gui button:active{background:var(--focus-color)}@font-face{font-family:lil-gui;src:url("data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUsAAsAAAAACJwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAAH4AAADAImwmYE9TLzIAAAGIAAAAPwAAAGBKqH5SY21hcAAAAcgAAAD0AAACrukyyJBnbHlmAAACvAAAAF8AAACEIZpWH2hlYWQAAAMcAAAAJwAAADZfcj2zaGhlYQAAA0QAAAAYAAAAJAC5AHhobXR4AAADXAAAABAAAABMAZAAAGxvY2EAAANsAAAAFAAAACgCEgIybWF4cAAAA4AAAAAeAAAAIAEfABJuYW1lAAADoAAAASIAAAIK9SUU/XBvc3QAAATEAAAAZgAAAJCTcMc2eJxVjbEOgjAURU+hFRBK1dGRL+ALnAiToyMLEzFpnPz/eAshwSa97517c/MwwJmeB9kwPl+0cf5+uGPZXsqPu4nvZabcSZldZ6kfyWnomFY/eScKqZNWupKJO6kXN3K9uCVoL7iInPr1X5baXs3tjuMqCtzEuagm/AAlzQgPAAB4nGNgYRBlnMDAysDAYM/gBiT5oLQBAwuDJAMDEwMrMwNWEJDmmsJwgCFeXZghBcjlZMgFCzOiKOIFAB71Bb8AeJy1kjFuwkAQRZ+DwRAwBtNQRUGKQ8OdKCAWUhAgKLhIuAsVSpWz5Bbkj3dEgYiUIszqWdpZe+Z7/wB1oCYmIoboiwiLT2WjKl/jscrHfGg/pKdMkyklC5Zs2LEfHYpjcRoPzme9MWWmk3dWbK9ObkWkikOetJ554fWyoEsmdSlt+uR0pCJR34b6t/TVg1SY3sYvdf8vuiKrpyaDXDISiegp17p7579Gp3p++y7HPAiY9pmTibljrr85qSidtlg4+l25GLCaS8e6rRxNBmsnERunKbaOObRz7N72ju5vdAjYpBXHgJylOAVsMseDAPEP8LYoUHicY2BiAAEfhiAGJgZWBgZ7RnFRdnVJELCQlBSRlATJMoLV2DK4glSYs6ubq5vbKrJLSbGrgEmovDuDJVhe3VzcXFwNLCOILB/C4IuQ1xTn5FPilBTj5FPmBAB4WwoqAHicY2BkYGAA4sk1sR/j+W2+MnAzpDBgAyEMQUCSg4EJxAEAwUgFHgB4nGNgZGBgSGFggJMhDIwMqEAYAByHATJ4nGNgAIIUNEwmAABl3AGReJxjYAACIQYlBiMGJ3wQAEcQBEV4nGNgZGBgEGZgY2BiAAEQyQWEDAz/wXwGAAsPATIAAHicXdBNSsNAHAXwl35iA0UQXYnMShfS9GPZA7T7LgIu03SSpkwzYTIt1BN4Ak/gKTyAeCxfw39jZkjymzcvAwmAW/wgwHUEGDb36+jQQ3GXGot79L24jxCP4gHzF/EIr4jEIe7wxhOC3g2TMYy4Q7+Lu/SHuEd/ivt4wJd4wPxbPEKMX3GI5+DJFGaSn4qNzk8mcbKSR6xdXdhSzaOZJGtdapd4vVPbi6rP+cL7TGXOHtXKll4bY1Xl7EGnPtp7Xy2n00zyKLVHfkHBa4IcJ2oD3cgggWvt/V/FbDrUlEUJhTn/0azVWbNTNr0Ens8de1tceK9xZmfB1CPjOmPH4kitmvOubcNpmVTN3oFJyjzCvnmrwhJTzqzVj9jiSX911FjeAAB4nG3HMRKCMBBA0f0giiKi4DU8k0V2GWbIZDOh4PoWWvq6J5V8If9NVNQcaDhyouXMhY4rPTcG7jwYmXhKq8Wz+p762aNaeYXom2n3m2dLTVgsrCgFJ7OTmIkYbwIbC6vIB7WmFfAAAA==") format("woff")}@media (pointer:coarse){.lil-gui.allow-touch-styles{--widget-height:28px;--padding:6px;--spacing:6px;--font-size:13px;--input-font-size:16px;--folder-indent:10px;--scrollbar-width:7px;--slider-input-min-width:50px;--color-input-min-width:65px}}@media (hover:hover){.lil-gui .controller.color .display:hover:before{border:1px solid #fff9;border-radius:var(--widget-border-radius);bottom:0;content:" ";display:block;left:0;position:absolute;right:0;top:0}.lil-gui .controller.option .display.focus{background:var(--focus-color)}.lil-gui .controller.option .widget:hover .display{background:var(--hover-color)}.lil-gui .controller.number .slider:hover{background-color:var(--hover-color)}body:not(.lil-gui-dragging) .lil-gui .title:hover{background:var(--title-background-color);opacity:.85}.lil-gui .title:focus{text-decoration:underline var(--focus-color)}.lil-gui input:hover{background:var(--hover-color)}.lil-gui input:active{background:var(--focus-color)}.lil-gui input[type=checkbox]:focus{box-shadow:inset 0 0 0 1px var(--focus-color)}.lil-gui button:hover{background:var(--hover-color);border-color:var(--hover-color)}.lil-gui button:focus{border-color:var(--focus-color)}}'),et=!0),i?i.appendChild(this.domElement):e&&(this.domElement.classList.add("autoPlace"),document.body.appendChild(this.domElement)),r&&this.domElement.style.setProperty("--width",r+"px"),this.domElement.addEventListener("keydown",a=>a.stopPropagation()),this.domElement.addEventListener("keyup",a=>a.stopPropagation())}add(t,e,i,r,s){if(Object(i)===i)return new Nt(this,t,e,i);const n=t[e];switch(typeof n){case"number":return new Kt(this,t,e,i,r,s);case"boolean":return new Gt(this,t,e);case"string":return new Jt(this,t,e);case"function":return new j(this,t,e)}console.error(`gui.add failed
7
+ */class x{constructor(t,e,i,r,s="div"){this.parent=t,this.object=e,this.property=i,this._disabled=!1,this._hidden=!1,this.initialValue=this.getValue(),this.domElement=document.createElement("div"),this.domElement.classList.add("controller"),this.domElement.classList.add(r),this.$name=document.createElement("div"),this.$name.classList.add("name"),x.nextNameID=x.nextNameID||0,this.$name.id="lil-gui-name-"+ ++x.nextNameID,this.$widget=document.createElement(s),this.$widget.classList.add("widget"),this.$disable=this.$widget,this.domElement.appendChild(this.$name),this.domElement.appendChild(this.$widget),this.parent.children.push(this),this.parent.controllers.push(this),this.parent.$children.appendChild(this.domElement),this._listenCallback=this._listenCallback.bind(this),this.name(i)}name(t){return this._name=t,this.$name.innerHTML=t,this}onChange(t){return this._onChange=t,this}_callOnChange(){this.parent._callOnChange(this),this._onChange!==void 0&&this._onChange.call(this,this.getValue()),this._changed=!0}onFinishChange(t){return this._onFinishChange=t,this}_callOnFinishChange(){this._changed&&(this.parent._callOnFinishChange(this),this._onFinishChange!==void 0&&this._onFinishChange.call(this,this.getValue())),this._changed=!1}reset(){return this.setValue(this.initialValue),this._callOnFinishChange(),this}enable(t=!0){return this.disable(!t)}disable(t=!0){return t===this._disabled||(this._disabled=t,this.domElement.classList.toggle("disabled",t),this.$disable.toggleAttribute("disabled",t)),this}show(t=!0){return this._hidden=!t,this.domElement.style.display=this._hidden?"none":"",this}hide(){return this.show(!1)}options(t){const e=this.parent.add(this.object,this.property,t);return e.name(this._name),this.destroy(),e}min(t){return this}max(t){return this}step(t){return this}decimals(t){return this}listen(t=!0){return this._listening=t,this._listenCallbackID!==void 0&&(cancelAnimationFrame(this._listenCallbackID),this._listenCallbackID=void 0),this._listening&&this._listenCallback(),this}_listenCallback(){this._listenCallbackID=requestAnimationFrame(this._listenCallback);const t=this.save();t!==this._listenPrevValue&&this.updateDisplay(),this._listenPrevValue=t}getValue(){return this.object[this.property]}setValue(t){return this.object[this.property]=t,this._callOnChange(),this.updateDisplay(),this}updateDisplay(){return this}load(t){return this.setValue(t),this._callOnFinishChange(),this}save(){return this.getValue()}destroy(){this.listen(!1),this.parent.children.splice(this.parent.children.indexOf(this),1),this.parent.controllers.splice(this.parent.controllers.indexOf(this),1),this.parent.$children.removeChild(this.domElement)}}class Gt extends x{constructor(t,e,i){super(t,e,i,"boolean","label"),this.$input=document.createElement("input"),this.$input.setAttribute("type","checkbox"),this.$input.setAttribute("aria-labelledby",this.$name.id),this.$widget.appendChild(this.$input),this.$input.addEventListener("change",()=>{this.setValue(this.$input.checked),this._callOnFinishChange()}),this.$disable=this.$input,this.updateDisplay()}updateDisplay(){return this.$input.checked=this.getValue(),this}}function X(o){let t,e;return(t=o.match(/(#|0x)?([a-f0-9]{6})/i))?e=t[2]:(t=o.match(/rgb\(\s*(\d*)\s*,\s*(\d*)\s*,\s*(\d*)\s*\)/))?e=parseInt(t[1]).toString(16).padStart(2,0)+parseInt(t[2]).toString(16).padStart(2,0)+parseInt(t[3]).toString(16).padStart(2,0):(t=o.match(/^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i))&&(e=t[1]+t[1]+t[2]+t[2]+t[3]+t[3]),!!e&&"#"+e}const Yt={isPrimitive:!0,match:o=>typeof o=="string",fromHexString:X,toHexString:X},B={isPrimitive:!0,match:o=>typeof o=="number",fromHexString:o=>parseInt(o.substring(1),16),toHexString:o=>"#"+o.toString(16).padStart(6,0)},Wt={isPrimitive:!1,match:Array.isArray,fromHexString(o,t,e=1){const i=B.fromHexString(o);t[0]=(i>>16&255)/255*e,t[1]=(i>>8&255)/255*e,t[2]=(255&i)/255*e},toHexString:([o,t,e],i=1)=>B.toHexString(o*(i=255/i)<<16^t*i<<8^e*i<<0)},jt={isPrimitive:!1,match:o=>Object(o)===o,fromHexString(o,t,e=1){const i=B.fromHexString(o);t.r=(i>>16&255)/255*e,t.g=(i>>8&255)/255*e,t.b=(255&i)/255*e},toHexString:({r:o,g:t,b:e},i=1)=>B.toHexString(o*(i=255/i)<<16^t*i<<8^e*i<<0)},Rt=[Yt,B,Wt,jt];class Xt extends x{constructor(t,e,i,r){var s;super(t,e,i,"color"),this.$input=document.createElement("input"),this.$input.setAttribute("type","color"),this.$input.setAttribute("tabindex",-1),this.$input.setAttribute("aria-labelledby",this.$name.id),this.$text=document.createElement("input"),this.$text.setAttribute("type","text"),this.$text.setAttribute("spellcheck","false"),this.$text.setAttribute("aria-labelledby",this.$name.id),this.$display=document.createElement("div"),this.$display.classList.add("display"),this.$display.appendChild(this.$input),this.$widget.appendChild(this.$display),this.$widget.appendChild(this.$text),this._format=(s=this.initialValue,Rt.find(n=>n.match(s))),this._rgbScale=r,this._initialValueHexString=this.save(),this._textFocused=!1,this.$input.addEventListener("input",()=>{this._setValueFromHexString(this.$input.value)}),this.$input.addEventListener("blur",()=>{this._callOnFinishChange()}),this.$text.addEventListener("input",()=>{const n=X(this.$text.value);n&&this._setValueFromHexString(n)}),this.$text.addEventListener("focus",()=>{this._textFocused=!0,this.$text.select()}),this.$text.addEventListener("blur",()=>{this._textFocused=!1,this.updateDisplay(),this._callOnFinishChange()}),this.$disable=this.$text,this.updateDisplay()}reset(){return this._setValueFromHexString(this._initialValueHexString),this}_setValueFromHexString(t){if(this._format.isPrimitive){const e=this._format.fromHexString(t);this.setValue(e)}else this._format.fromHexString(t,this.getValue(),this._rgbScale),this._callOnChange(),this.updateDisplay()}save(){return this._format.toHexString(this.getValue(),this._rgbScale)}load(t){return this._setValueFromHexString(t),this._callOnFinishChange(),this}updateDisplay(){return this.$input.value=this._format.toHexString(this.getValue(),this._rgbScale),this._textFocused||(this.$text.value=this.$input.value.substring(1)),this.$display.style.backgroundColor=this.$input.value,this}}class j extends x{constructor(t,e,i){super(t,e,i,"function"),this.$button=document.createElement("button"),this.$button.appendChild(this.$name),this.$widget.appendChild(this.$button),this.$button.addEventListener("click",r=>{r.preventDefault(),this.getValue().call(this.object)}),this.$button.addEventListener("touchstart",()=>{},{passive:!0}),this.$disable=this.$button}}class Kt extends x{constructor(t,e,i,r,s,n){super(t,e,i,"number"),this._initInput(),this.min(r),this.max(s);const l=n!==void 0;this.step(l?n:this._getImplicitStep(),l),this.updateDisplay()}decimals(t){return this._decimals=t,this.updateDisplay(),this}min(t){return this._min=t,this._onUpdateMinMax(),this}max(t){return this._max=t,this._onUpdateMinMax(),this}step(t,e=!0){return this._step=t,this._stepExplicit=e,this}updateDisplay(){const t=this.getValue();if(this._hasSlider){let e=(t-this._min)/(this._max-this._min);e=Math.max(0,Math.min(e,1)),this.$fill.style.width=100*e+"%"}return this._inputFocused||(this.$input.value=this._decimals===void 0?t:t.toFixed(this._decimals)),this}_initInput(){this.$input=document.createElement("input"),this.$input.setAttribute("type","number"),this.$input.setAttribute("step","any"),this.$input.setAttribute("aria-labelledby",this.$name.id),this.$widget.appendChild(this.$input),this.$disable=this.$input;const t=h=>{const p=parseFloat(this.$input.value);isNaN(p)||(this._snapClampSetValue(p+h),this.$input.value=this.getValue())};let e,i,r,s,n,l=!1;const a=h=>{if(l){const p=h.clientX-e,c=h.clientY-i;Math.abs(c)>5?(h.preventDefault(),this.$input.blur(),l=!1,this._setDraggingStyle(!0,"vertical")):Math.abs(p)>5&&d()}if(!l){const p=h.clientY-r;n-=p*this._step*this._arrowKeyMultiplier(h),s+n>this._max?n=this._max-s:s+n<this._min&&(n=this._min-s),this._snapClampSetValue(s+n)}r=h.clientY},d=()=>{this._setDraggingStyle(!1,"vertical"),this._callOnFinishChange(),window.removeEventListener("mousemove",a),window.removeEventListener("mouseup",d)};this.$input.addEventListener("input",()=>{let h=parseFloat(this.$input.value);isNaN(h)||(this._stepExplicit&&(h=this._snap(h)),this.setValue(this._clamp(h)))}),this.$input.addEventListener("keydown",h=>{h.code==="Enter"&&this.$input.blur(),h.code==="ArrowUp"&&(h.preventDefault(),t(this._step*this._arrowKeyMultiplier(h))),h.code==="ArrowDown"&&(h.preventDefault(),t(this._step*this._arrowKeyMultiplier(h)*-1))}),this.$input.addEventListener("wheel",h=>{this._inputFocused&&(h.preventDefault(),t(this._step*this._normalizeMouseWheel(h)))},{passive:!1}),this.$input.addEventListener("mousedown",h=>{e=h.clientX,i=r=h.clientY,l=!0,s=this.getValue(),n=0,window.addEventListener("mousemove",a),window.addEventListener("mouseup",d)}),this.$input.addEventListener("focus",()=>{this._inputFocused=!0}),this.$input.addEventListener("blur",()=>{this._inputFocused=!1,this.updateDisplay(),this._callOnFinishChange()})}_initSlider(){this._hasSlider=!0,this.$slider=document.createElement("div"),this.$slider.classList.add("slider"),this.$fill=document.createElement("div"),this.$fill.classList.add("fill"),this.$slider.appendChild(this.$fill),this.$widget.insertBefore(this.$slider,this.$input),this.domElement.classList.add("hasSlider");const t=c=>{const b=this.$slider.getBoundingClientRect();let k=(M=c,L=b.left,Z=b.right,Y=this._min,q=this._max,(M-L)/(Z-L)*(q-Y)+Y);var M,L,Z,Y,q;this._snapClampSetValue(k)},e=c=>{t(c.clientX)},i=()=>{this._callOnFinishChange(),this._setDraggingStyle(!1),window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",i)};let r,s,n=!1;const l=c=>{c.preventDefault(),this._setDraggingStyle(!0),t(c.touches[0].clientX),n=!1},a=c=>{if(n){const b=c.touches[0].clientX-r,k=c.touches[0].clientY-s;Math.abs(b)>Math.abs(k)?l(c):(window.removeEventListener("touchmove",a),window.removeEventListener("touchend",d))}else c.preventDefault(),t(c.touches[0].clientX)},d=()=>{this._callOnFinishChange(),this._setDraggingStyle(!1),window.removeEventListener("touchmove",a),window.removeEventListener("touchend",d)},h=this._callOnFinishChange.bind(this);let p;this.$slider.addEventListener("mousedown",c=>{this._setDraggingStyle(!0),t(c.clientX),window.addEventListener("mousemove",e),window.addEventListener("mouseup",i)}),this.$slider.addEventListener("touchstart",c=>{c.touches.length>1||(this._hasScrollBar?(r=c.touches[0].clientX,s=c.touches[0].clientY,n=!0):l(c),window.addEventListener("touchmove",a,{passive:!1}),window.addEventListener("touchend",d))},{passive:!1}),this.$slider.addEventListener("wheel",c=>{if(Math.abs(c.deltaX)<Math.abs(c.deltaY)&&this._hasScrollBar)return;c.preventDefault();const b=this._normalizeMouseWheel(c)*this._step;this._snapClampSetValue(this.getValue()+b),this.$input.value=this.getValue(),clearTimeout(p),p=setTimeout(h,400)},{passive:!1})}_setDraggingStyle(t,e="horizontal"){this.$slider&&this.$slider.classList.toggle("active",t),document.body.classList.toggle("lil-gui-dragging",t),document.body.classList.toggle("lil-gui-"+e,t)}_getImplicitStep(){return this._hasMin&&this._hasMax?(this._max-this._min)/1e3:.1}_onUpdateMinMax(){!this._hasSlider&&this._hasMin&&this._hasMax&&(this._stepExplicit||this.step(this._getImplicitStep(),!1),this._initSlider(),this.updateDisplay())}_normalizeMouseWheel(t){let{deltaX:e,deltaY:i}=t;return Math.floor(t.deltaY)!==t.deltaY&&t.wheelDelta&&(e=0,i=-t.wheelDelta/120,i*=this._stepExplicit?1:10),e+-i}_arrowKeyMultiplier(t){let e=this._stepExplicit?1:10;return t.shiftKey?e*=10:t.altKey&&(e/=10),e}_snap(t){const e=Math.round(t/this._step)*this._step;return parseFloat(e.toPrecision(15))}_clamp(t){return t<this._min&&(t=this._min),t>this._max&&(t=this._max),t}_snapClampSetValue(t){this.setValue(this._clamp(this._snap(t)))}get _hasScrollBar(){const t=this.parent.root.$children;return t.scrollHeight>t.clientHeight}get _hasMin(){return this._min!==void 0}get _hasMax(){return this._max!==void 0}}class Jt extends x{constructor(t,e,i,r){super(t,e,i,"option"),this.$select=document.createElement("select"),this.$select.setAttribute("aria-labelledby",this.$name.id),this.$display=document.createElement("div"),this.$display.classList.add("display"),this._values=Array.isArray(r)?r:Object.values(r),this._names=Array.isArray(r)?r:Object.keys(r),this._names.forEach(s=>{const n=document.createElement("option");n.innerHTML=s,this.$select.appendChild(n)}),this.$select.addEventListener("change",()=>{this.setValue(this._values[this.$select.selectedIndex]),this._callOnFinishChange()}),this.$select.addEventListener("focus",()=>{this.$display.classList.add("focus")}),this.$select.addEventListener("blur",()=>{this.$display.classList.remove("focus")}),this.$widget.appendChild(this.$select),this.$widget.appendChild(this.$display),this.$disable=this.$select,this.updateDisplay()}updateDisplay(){const t=this.getValue(),e=this._values.indexOf(t);return this.$select.selectedIndex=e,this.$display.innerHTML=e===-1?t:this._names[e],this}}class Nt extends x{constructor(t,e,i){super(t,e,i,"string"),this.$input=document.createElement("input"),this.$input.setAttribute("type","text"),this.$input.setAttribute("aria-labelledby",this.$name.id),this.$input.addEventListener("input",()=>{this.setValue(this.$input.value)}),this.$input.addEventListener("keydown",r=>{r.code==="Enter"&&this.$input.blur()}),this.$input.addEventListener("blur",()=>{this._callOnFinishChange()}),this.$widget.appendChild(this.$input),this.$disable=this.$input,this.updateDisplay()}updateDisplay(){return this.$input.value=this.getValue(),this}}let et=!1;class N{constructor({parent:t,autoPlace:e=t===void 0,container:i,width:r,title:s="Controls",injectStyles:n=!0,touchStyles:l=!0}={}){if(this.parent=t,this.root=t?t.root:this,this.children=[],this.controllers=[],this.folders=[],this._closed=!1,this._hidden=!1,this.domElement=document.createElement("div"),this.domElement.classList.add("lil-gui"),this.$title=document.createElement("div"),this.$title.classList.add("title"),this.$title.setAttribute("role","button"),this.$title.setAttribute("aria-expanded",!0),this.$title.setAttribute("tabindex",0),this.$title.addEventListener("click",()=>this.openAnimated(this._closed)),this.$title.addEventListener("keydown",a=>{a.code!=="Enter"&&a.code!=="Space"||(a.preventDefault(),this.$title.click())}),this.$title.addEventListener("touchstart",()=>{},{passive:!0}),this.$children=document.createElement("div"),this.$children.classList.add("children"),this.domElement.appendChild(this.$title),this.domElement.appendChild(this.$children),this.title(s),l&&this.domElement.classList.add("allow-touch-styles"),this.parent)return this.parent.children.push(this),this.parent.folders.push(this),void this.parent.$children.appendChild(this.domElement);this.domElement.classList.add("root"),!et&&n&&((function(a){const d=document.createElement("style");d.innerHTML=a;const h=document.querySelector("head link[rel=stylesheet], head style");h?document.head.insertBefore(d,h):document.head.appendChild(d)})('.lil-gui{--background-color:#1f1f1f;--text-color:#ebebeb;--title-background-color:#111;--title-text-color:#ebebeb;--widget-color:#424242;--hover-color:#4f4f4f;--focus-color:#595959;--number-color:#2cc9ff;--string-color:#a2db3c;--font-size:11px;--input-font-size:11px;--font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;--font-family-mono:Menlo,Monaco,Consolas,"Droid Sans Mono",monospace;--padding:4px;--spacing:4px;--widget-height:20px;--name-width:45%;--slider-knob-width:2px;--slider-input-width:27%;--color-input-width:27%;--slider-input-min-width:45px;--color-input-min-width:45px;--folder-indent:7px;--widget-padding:0 0 0 3px;--widget-border-radius:2px;--checkbox-size:calc(var(--widget-height)*0.75);--scrollbar-width:5px;background-color:var(--background-color);color:var(--text-color);font-family:var(--font-family);font-size:var(--font-size);font-style:normal;font-weight:400;line-height:1;text-align:left;touch-action:manipulation;user-select:none;-webkit-user-select:none}.lil-gui,.lil-gui *{box-sizing:border-box;margin:0;padding:0}.lil-gui.root{display:flex;flex-direction:column;width:var(--width,245px)}.lil-gui.root>.title{background:var(--title-background-color);color:var(--title-text-color)}.lil-gui.root>.children{overflow-x:hidden;overflow-y:auto}.lil-gui.root>.children::-webkit-scrollbar{background:var(--background-color);height:var(--scrollbar-width);width:var(--scrollbar-width)}.lil-gui.root>.children::-webkit-scrollbar-thumb{background:var(--focus-color);border-radius:var(--scrollbar-width)}.lil-gui.force-touch-styles{--widget-height:28px;--padding:6px;--spacing:6px;--font-size:13px;--input-font-size:16px;--folder-indent:10px;--scrollbar-width:7px;--slider-input-min-width:50px;--color-input-min-width:65px}.lil-gui.autoPlace{max-height:100%;position:fixed;right:15px;top:0;z-index:1001}.lil-gui .controller{align-items:center;display:flex;margin:var(--spacing) 0;padding:0 var(--padding)}.lil-gui .controller.disabled{opacity:.5}.lil-gui .controller.disabled,.lil-gui .controller.disabled *{pointer-events:none!important}.lil-gui .controller>.name{flex-shrink:0;line-height:var(--widget-height);min-width:var(--name-width);padding-right:var(--spacing);white-space:pre}.lil-gui .controller .widget{align-items:center;display:flex;min-height:var(--widget-height);position:relative;width:100%}.lil-gui .controller.string input{color:var(--string-color)}.lil-gui .controller.boolean .widget{cursor:pointer}.lil-gui .controller.color .display{border-radius:var(--widget-border-radius);height:var(--widget-height);position:relative;width:100%}.lil-gui .controller.color input[type=color]{cursor:pointer;height:100%;opacity:0;width:100%}.lil-gui .controller.color input[type=text]{flex-shrink:0;font-family:var(--font-family-mono);margin-left:var(--spacing);min-width:var(--color-input-min-width);width:var(--color-input-width)}.lil-gui .controller.option select{max-width:100%;opacity:0;position:absolute;width:100%}.lil-gui .controller.option .display{background:var(--widget-color);border-radius:var(--widget-border-radius);height:var(--widget-height);line-height:var(--widget-height);max-width:100%;overflow:hidden;padding-left:.55em;padding-right:1.75em;pointer-events:none;position:relative;word-break:break-all}.lil-gui .controller.option .display.active{background:var(--focus-color)}.lil-gui .controller.option .display:after{bottom:0;content:"↕";font-family:lil-gui;padding-right:.375em;position:absolute;right:0;top:0}.lil-gui .controller.option .widget,.lil-gui .controller.option select{cursor:pointer}.lil-gui .controller.number input{color:var(--number-color)}.lil-gui .controller.number.hasSlider input{flex-shrink:0;margin-left:var(--spacing);min-width:var(--slider-input-min-width);width:var(--slider-input-width)}.lil-gui .controller.number .slider{background-color:var(--widget-color);border-radius:var(--widget-border-radius);cursor:ew-resize;height:var(--widget-height);overflow:hidden;padding-right:var(--slider-knob-width);touch-action:pan-y;width:100%}.lil-gui .controller.number .slider.active{background-color:var(--focus-color)}.lil-gui .controller.number .slider.active .fill{opacity:.95}.lil-gui .controller.number .fill{border-right:var(--slider-knob-width) solid var(--number-color);box-sizing:content-box;height:100%}.lil-gui-dragging .lil-gui{--hover-color:var(--widget-color)}.lil-gui-dragging *{cursor:ew-resize!important}.lil-gui-dragging.lil-gui-vertical *{cursor:ns-resize!important}.lil-gui .title{--title-height:calc(var(--widget-height) + var(--spacing)*1.25);-webkit-tap-highlight-color:transparent;text-decoration-skip:objects;cursor:pointer;font-weight:600;height:var(--title-height);line-height:calc(var(--title-height) - 4px);outline:none;padding:0 var(--padding)}.lil-gui .title:before{content:"▾";display:inline-block;font-family:lil-gui;padding-right:2px}.lil-gui .title:active{background:var(--title-background-color);opacity:.75}.lil-gui.root>.title:focus{text-decoration:none!important}.lil-gui.closed>.title:before{content:"▸"}.lil-gui.closed>.children{opacity:0;transform:translateY(-7px)}.lil-gui.closed:not(.transition)>.children{display:none}.lil-gui.transition>.children{overflow:hidden;pointer-events:none;transition-duration:.3s;transition-property:height,opacity,transform;transition-timing-function:cubic-bezier(.2,.6,.35,1)}.lil-gui .children:empty:before{content:"Empty";display:block;font-style:italic;height:var(--widget-height);line-height:var(--widget-height);margin:var(--spacing) 0;opacity:.5;padding:0 var(--padding)}.lil-gui.root>.children>.lil-gui>.title{border-width:0;border-bottom:1px solid var(--widget-color);border-left:0 solid var(--widget-color);border-right:0 solid var(--widget-color);border-top:1px solid var(--widget-color);transition:border-color .3s}.lil-gui.root>.children>.lil-gui.closed>.title{border-bottom-color:transparent}.lil-gui+.controller{border-top:1px solid var(--widget-color);margin-top:0;padding-top:var(--spacing)}.lil-gui .lil-gui .lil-gui>.title{border:none}.lil-gui .lil-gui .lil-gui>.children{border:none;border-left:2px solid var(--widget-color);margin-left:var(--folder-indent)}.lil-gui .lil-gui .controller{border:none}.lil-gui input{-webkit-tap-highlight-color:transparent;background:var(--widget-color);border:0;border-radius:var(--widget-border-radius);color:var(--text-color);font-family:var(--font-family);font-size:var(--input-font-size);height:var(--widget-height);outline:none;width:100%}.lil-gui input:disabled{opacity:1}.lil-gui input[type=number],.lil-gui input[type=text]{padding:var(--widget-padding)}.lil-gui input[type=number]:focus,.lil-gui input[type=text]:focus{background:var(--focus-color)}.lil-gui input::-webkit-inner-spin-button,.lil-gui input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.lil-gui input[type=number]{-moz-appearance:textfield}.lil-gui input[type=checkbox]{appearance:none;-webkit-appearance:none;border-radius:var(--widget-border-radius);cursor:pointer;height:var(--checkbox-size);text-align:center;width:var(--checkbox-size)}.lil-gui input[type=checkbox]:checked:before{content:"✓";font-family:lil-gui;font-size:var(--checkbox-size);line-height:var(--checkbox-size)}.lil-gui button{-webkit-tap-highlight-color:transparent;background:var(--widget-color);border:1px solid var(--widget-color);border-radius:var(--widget-border-radius);color:var(--text-color);cursor:pointer;font-family:var(--font-family);font-size:var(--font-size);height:var(--widget-height);line-height:calc(var(--widget-height) - 4px);outline:none;text-align:center;text-transform:none;width:100%}.lil-gui button:active{background:var(--focus-color)}@font-face{font-family:lil-gui;src:url("data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUsAAsAAAAACJwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAAH4AAADAImwmYE9TLzIAAAGIAAAAPwAAAGBKqH5SY21hcAAAAcgAAAD0AAACrukyyJBnbHlmAAACvAAAAF8AAACEIZpWH2hlYWQAAAMcAAAAJwAAADZfcj2zaGhlYQAAA0QAAAAYAAAAJAC5AHhobXR4AAADXAAAABAAAABMAZAAAGxvY2EAAANsAAAAFAAAACgCEgIybWF4cAAAA4AAAAAeAAAAIAEfABJuYW1lAAADoAAAASIAAAIK9SUU/XBvc3QAAATEAAAAZgAAAJCTcMc2eJxVjbEOgjAURU+hFRBK1dGRL+ALnAiToyMLEzFpnPz/eAshwSa97517c/MwwJmeB9kwPl+0cf5+uGPZXsqPu4nvZabcSZldZ6kfyWnomFY/eScKqZNWupKJO6kXN3K9uCVoL7iInPr1X5baXs3tjuMqCtzEuagm/AAlzQgPAAB4nGNgYRBlnMDAysDAYM/gBiT5oLQBAwuDJAMDEwMrMwNWEJDmmsJwgCFeXZghBcjlZMgFCzOiKOIFAB71Bb8AeJy1kjFuwkAQRZ+DwRAwBtNQRUGKQ8OdKCAWUhAgKLhIuAsVSpWz5Bbkj3dEgYiUIszqWdpZe+Z7/wB1oCYmIoboiwiLT2WjKl/jscrHfGg/pKdMkyklC5Zs2LEfHYpjcRoPzme9MWWmk3dWbK9ObkWkikOetJ554fWyoEsmdSlt+uR0pCJR34b6t/TVg1SY3sYvdf8vuiKrpyaDXDISiegp17p7579Gp3p++y7HPAiY9pmTibljrr85qSidtlg4+l25GLCaS8e6rRxNBmsnERunKbaOObRz7N72ju5vdAjYpBXHgJylOAVsMseDAPEP8LYoUHicY2BiAAEfhiAGJgZWBgZ7RnFRdnVJELCQlBSRlATJMoLV2DK4glSYs6ubq5vbKrJLSbGrgEmovDuDJVhe3VzcXFwNLCOILB/C4IuQ1xTn5FPilBTj5FPmBAB4WwoqAHicY2BkYGAA4sk1sR/j+W2+MnAzpDBgAyEMQUCSg4EJxAEAwUgFHgB4nGNgZGBgSGFggJMhDIwMqEAYAByHATJ4nGNgAIIUNEwmAABl3AGReJxjYAACIQYlBiMGJ3wQAEcQBEV4nGNgZGBgEGZgY2BiAAEQyQWEDAz/wXwGAAsPATIAAHicXdBNSsNAHAXwl35iA0UQXYnMShfS9GPZA7T7LgIu03SSpkwzYTIt1BN4Ak/gKTyAeCxfw39jZkjymzcvAwmAW/wgwHUEGDb36+jQQ3GXGot79L24jxCP4gHzF/EIr4jEIe7wxhOC3g2TMYy4Q7+Lu/SHuEd/ivt4wJd4wPxbPEKMX3GI5+DJFGaSn4qNzk8mcbKSR6xdXdhSzaOZJGtdapd4vVPbi6rP+cL7TGXOHtXKll4bY1Xl7EGnPtp7Xy2n00zyKLVHfkHBa4IcJ2oD3cgggWvt/V/FbDrUlEUJhTn/0azVWbNTNr0Ens8de1tceK9xZmfB1CPjOmPH4kitmvOubcNpmVTN3oFJyjzCvnmrwhJTzqzVj9jiSX911FjeAAB4nG3HMRKCMBBA0f0giiKi4DU8k0V2GWbIZDOh4PoWWvq6J5V8If9NVNQcaDhyouXMhY4rPTcG7jwYmXhKq8Wz+p762aNaeYXom2n3m2dLTVgsrCgFJ7OTmIkYbwIbC6vIB7WmFfAAAA==") format("woff")}@media (pointer:coarse){.lil-gui.allow-touch-styles{--widget-height:28px;--padding:6px;--spacing:6px;--font-size:13px;--input-font-size:16px;--folder-indent:10px;--scrollbar-width:7px;--slider-input-min-width:50px;--color-input-min-width:65px}}@media (hover:hover){.lil-gui .controller.color .display:hover:before{border:1px solid #fff9;border-radius:var(--widget-border-radius);bottom:0;content:" ";display:block;left:0;position:absolute;right:0;top:0}.lil-gui .controller.option .display.focus{background:var(--focus-color)}.lil-gui .controller.option .widget:hover .display{background:var(--hover-color)}.lil-gui .controller.number .slider:hover{background-color:var(--hover-color)}body:not(.lil-gui-dragging) .lil-gui .title:hover{background:var(--title-background-color);opacity:.85}.lil-gui .title:focus{text-decoration:underline var(--focus-color)}.lil-gui input:hover{background:var(--hover-color)}.lil-gui input:active{background:var(--focus-color)}.lil-gui input[type=checkbox]:focus{box-shadow:inset 0 0 0 1px var(--focus-color)}.lil-gui button:hover{background:var(--hover-color);border-color:var(--hover-color)}.lil-gui button:focus{border-color:var(--focus-color)}}'),et=!0),i?i.appendChild(this.domElement):e&&(this.domElement.classList.add("autoPlace"),document.body.appendChild(this.domElement)),r&&this.domElement.style.setProperty("--width",r+"px"),this.domElement.addEventListener("keydown",a=>a.stopPropagation()),this.domElement.addEventListener("keyup",a=>a.stopPropagation())}add(t,e,i,r,s){if(Object(i)===i)return new Jt(this,t,e,i);const n=t[e];switch(typeof n){case"number":return new Kt(this,t,e,i,r,s);case"boolean":return new Gt(this,t,e);case"string":return new Nt(this,t,e);case"function":return new j(this,t,e)}console.error(`gui.add failed
8
8
  property:`,e,`
9
9
  object:`,t,`
10
- value:`,n)}addColor(t,e,i=1){return new Xt(this,t,e,i)}addFolder(t){return new J({parent:this,title:t})}load(t,e=!0){return t.controllers&&this.controllers.forEach(i=>{i instanceof j||i._name in t.controllers&&i.load(t.controllers[i._name])}),e&&t.folders&&this.folders.forEach(i=>{i._title in t.folders&&i.load(t.folders[i._title])}),this}save(t=!0){const e={controllers:{},folders:{}};return this.controllers.forEach(i=>{if(!(i instanceof j)){if(i._name in e.controllers)throw new Error(`Cannot save GUI with duplicate property "${i._name}"`);e.controllers[i._name]=i.save()}}),t&&this.folders.forEach(i=>{if(i._title in e.folders)throw new Error(`Cannot save GUI with duplicate folder "${i._title}"`);e.folders[i._title]=i.save()}),e}open(t=!0){return this._closed=!t,this.$title.setAttribute("aria-expanded",!this._closed),this.domElement.classList.toggle("closed",this._closed),this}close(){return this.open(!1)}show(t=!0){return this._hidden=!t,this.domElement.style.display=this._hidden?"none":"",this}hide(){return this.show(!1)}openAnimated(t=!0){return this._closed=!t,this.$title.setAttribute("aria-expanded",!this._closed),requestAnimationFrame(()=>{const e=this.$children.clientHeight;this.$children.style.height=e+"px",this.domElement.classList.add("transition");const i=s=>{s.target===this.$children&&(this.$children.style.height="",this.domElement.classList.remove("transition"),this.$children.removeEventListener("transitionend",i))};this.$children.addEventListener("transitionend",i);const r=t?this.$children.scrollHeight:0;this.domElement.classList.toggle("closed",!t),requestAnimationFrame(()=>{this.$children.style.height=r+"px"})}),this}title(t){return this._title=t,this.$title.innerHTML=t,this}reset(t=!0){return(t?this.controllersRecursive():this.controllers).forEach(e=>e.reset()),this}onChange(t){return this._onChange=t,this}_callOnChange(t){this.parent&&this.parent._callOnChange(t),this._onChange!==void 0&&this._onChange.call(this,{object:t.object,property:t.property,value:t.getValue(),controller:t})}onFinishChange(t){return this._onFinishChange=t,this}_callOnFinishChange(t){this.parent&&this.parent._callOnFinishChange(t),this._onFinishChange!==void 0&&this._onFinishChange.call(this,{object:t.object,property:t.property,value:t.getValue(),controller:t})}destroy(){this.parent&&(this.parent.children.splice(this.parent.children.indexOf(this),1),this.parent.folders.splice(this.parent.folders.indexOf(this),1)),this.domElement.parentElement&&this.domElement.parentElement.removeChild(this.domElement),Array.from(this.children).forEach(t=>t.destroy())}controllersRecursive(){let t=Array.from(this.controllers);return this.folders.forEach(e=>{t=t.concat(e.controllersRecursive())}),t}foldersRecursive(){let t=Array.from(this.folders);return this.folders.forEach(e=>{t=t.concat(e.foldersRecursive())}),t}}const A=globalThis.__vgaiGameWindow||globalThis.window,_=globalThis.__vgaiGameDocument||globalThis.document,Ut=new Vt,S=new vt;S.background=new wt(8965358);S.fog=new At(8965358,0,50);const f=new xt(70,A.innerWidth/A.innerHeight,.1,1e3);f.rotation.order="YXZ";const lt=new _t(9290206,26253,1.5);lt.position.set(2,1,1);S.add(lt);const y=new Et(16777215,2.5);y.position.set(-5,25,-1);y.castShadow=!0;y.shadow.camera.near=.01;y.shadow.camera.far=500;y.shadow.camera.right=30;y.shadow.camera.left=-30;y.shadow.camera.top=30;y.shadow.camera.bottom=-30;y.shadow.mapSize.width=1024;y.shadow.mapSize.height=1024;y.shadow.radius=4;y.shadow.bias=-6e-5;S.add(y);const U=_.getElementById("container"),E=new $t({antialias:!0});E.setPixelRatio(A.devicePixelRatio);E.setSize(A.innerWidth,A.innerHeight);E.setAnimationLoop(de);E.shadowMap.enabled=!0;E.shadowMap.type=St;E.toneMapping=Ct;U.appendChild(E.domElement);const G=new Dt;G.domElement.style.position="absolute";G.domElement.style.top="0px";U.appendChild(G.domElement);const at=30,Zt=100,ht=.2,it=5,qt=new kt(ht,5),Qt=new Lt({color:14605965}),$=[];let R=0;for(let o=0;o<Zt;o++){const t=new zt(qt,Qt);t.castShadow=!0,t.receiveShadow=!0,S.add(t),$.push({mesh:t,collider:new ot(new u(0,-100,0),ht),velocity:new u})}const H=new N,g=new O(new u(0,.35,0),new u(0,1,0),.35),m=new u,v=new u;let z=!1,dt=0;const C={},K=new u,ct=new u,ut=new u;_.addEventListener("keydown",o=>{C[o.code]=!0});_.addEventListener("keyup",o=>{C[o.code]=!1});U.addEventListener("mousedown",()=>{_.body.requestPointerLock(),dt=performance.now()});_.addEventListener("mouseup",()=>{_.pointerLockElement!==null&&ee()});_.body.addEventListener("mousemove",o=>{_.pointerLockElement===_.body&&(f.rotation.y-=o.movementX/500,f.rotation.x-=o.movementY/500)});A.addEventListener("resize",te);function te(){f.aspect=A.innerWidth/A.innerHeight,f.updateProjectionMatrix(),E.setSize(A.innerWidth,A.innerHeight)}function ee(){const o=$[R];f.getWorldDirection(v),o.collider.center.copy(g.end).addScaledVector(v,g.radius*1.5);const t=15+30*(1-Math.exp((dt-performance.now())*.001));o.velocity.copy(v).multiplyScalar(t),o.velocity.addScaledVector(m,2),R=(R+1)%$.length}function ie(){const o=H.capsuleIntersect(g);z=!1,o&&(z=o.normal.y>0,z||m.addScaledVector(o.normal,-o.normal.dot(m)),o.depth>=1e-10&&g.translate(o.normal.multiplyScalar(o.depth)))}function se(o){let t=Math.exp(-4*o)-1;z||(m.y-=at*o,t*=.1),m.addScaledVector(m,t);const e=m.clone().multiplyScalar(o);g.translate(e),ie(),f.position.copy(g.end)}function ne(o){const t=K.addVectors(g.start,g.end).multiplyScalar(.5),e=o.collider.center,i=g.radius+o.collider.radius,r=i*i;for(const s of[g.start,g.end,t]){const n=s.distanceToSquared(e);if(n<r){const l=K.subVectors(s,e).normalize(),a=ct.copy(l).multiplyScalar(l.dot(m)),d=ut.copy(l).multiplyScalar(l.dot(o.velocity));m.add(d).sub(a),o.velocity.add(a).sub(d);const h=(i-Math.sqrt(n))/2;e.addScaledVector(l,-h)}}}function re(){for(let o=0,t=$.length;o<t;o++){const e=$[o];for(let i=o+1;i<t;i++){const r=$[i],s=e.collider.center.distanceToSquared(r.collider.center),n=e.collider.radius+r.collider.radius,l=n*n;if(s<l){const a=K.subVectors(e.collider.center,r.collider.center).normalize(),d=ct.copy(a).multiplyScalar(a.dot(e.velocity)),h=ut.copy(a).multiplyScalar(a.dot(r.velocity));e.velocity.add(h).sub(d),r.velocity.add(d).sub(h);const p=(n-Math.sqrt(s))/2;e.collider.center.addScaledVector(a,p),r.collider.center.addScaledVector(a,-p)}}}}function oe(o){$.forEach(t=>{t.collider.center.addScaledVector(t.velocity,o);const e=H.sphereIntersect(t.collider);e?(t.velocity.addScaledVector(e.normal,-e.normal.dot(t.velocity)*1.5),t.collider.center.add(e.normal.multiplyScalar(e.depth))):t.velocity.y-=at*o;const i=Math.exp(-1.5*o)-1;t.velocity.addScaledVector(t.velocity,i),ne(t)}),re();for(const t of $)t.mesh.position.copy(t.collider.center)}function st(){return f.getWorldDirection(v),v.y=0,v.normalize(),v}function nt(){return f.getWorldDirection(v),v.y=0,v.normalize(),v.cross(f.up),v}function le(o){const t=o*(z?25:8);C.KeyW&&m.add(st().multiplyScalar(t)),C.KeyS&&m.add(st().multiplyScalar(-t)),C.KeyA&&m.add(nt().multiplyScalar(-t)),C.KeyD&&m.add(nt().multiplyScalar(t)),z&&C.Space&&(m.y=15)}const ae=new Mt().setPath("./models/gltf/");ae.load("collision-world.glb",o=>{S.add(o.scene),H.fromGraphNode(o.scene),o.scene.traverse(i=>{i.isMesh&&(i.castShadow=!0,i.receiveShadow=!0,i.material.map&&(i.material.map.anisotropy=4))});const t=new Ot(H);t.visible=!1,S.add(t),new J({width:200}).add({debug:!1},"debug").onChange(function(i){t.visible=i})});function he(){f.position.y<=-25&&(g.start.set(0,.35,0),g.end.set(0,1,0),g.radius=.35,f.position.copy(g.end),f.rotation.set(0,0,0))}function de(){const o=Math.min(.05,Ut.getDelta())/it;for(let t=0;t<it;t++)le(o),se(o),oe(o),he();E.render(S,f),G.update()}
10
+ value:`,n)}addColor(t,e,i=1){return new Xt(this,t,e,i)}addFolder(t){return new N({parent:this,title:t})}load(t,e=!0){return t.controllers&&this.controllers.forEach(i=>{i instanceof j||i._name in t.controllers&&i.load(t.controllers[i._name])}),e&&t.folders&&this.folders.forEach(i=>{i._title in t.folders&&i.load(t.folders[i._title])}),this}save(t=!0){const e={controllers:{},folders:{}};return this.controllers.forEach(i=>{if(!(i instanceof j)){if(i._name in e.controllers)throw new Error(`Cannot save GUI with duplicate property "${i._name}"`);e.controllers[i._name]=i.save()}}),t&&this.folders.forEach(i=>{if(i._title in e.folders)throw new Error(`Cannot save GUI with duplicate folder "${i._title}"`);e.folders[i._title]=i.save()}),e}open(t=!0){return this._closed=!t,this.$title.setAttribute("aria-expanded",!this._closed),this.domElement.classList.toggle("closed",this._closed),this}close(){return this.open(!1)}show(t=!0){return this._hidden=!t,this.domElement.style.display=this._hidden?"none":"",this}hide(){return this.show(!1)}openAnimated(t=!0){return this._closed=!t,this.$title.setAttribute("aria-expanded",!this._closed),requestAnimationFrame(()=>{const e=this.$children.clientHeight;this.$children.style.height=e+"px",this.domElement.classList.add("transition");const i=s=>{s.target===this.$children&&(this.$children.style.height="",this.domElement.classList.remove("transition"),this.$children.removeEventListener("transitionend",i))};this.$children.addEventListener("transitionend",i);const r=t?this.$children.scrollHeight:0;this.domElement.classList.toggle("closed",!t),requestAnimationFrame(()=>{this.$children.style.height=r+"px"})}),this}title(t){return this._title=t,this.$title.innerHTML=t,this}reset(t=!0){return(t?this.controllersRecursive():this.controllers).forEach(e=>e.reset()),this}onChange(t){return this._onChange=t,this}_callOnChange(t){this.parent&&this.parent._callOnChange(t),this._onChange!==void 0&&this._onChange.call(this,{object:t.object,property:t.property,value:t.getValue(),controller:t})}onFinishChange(t){return this._onFinishChange=t,this}_callOnFinishChange(t){this.parent&&this.parent._callOnFinishChange(t),this._onFinishChange!==void 0&&this._onFinishChange.call(this,{object:t.object,property:t.property,value:t.getValue(),controller:t})}destroy(){this.parent&&(this.parent.children.splice(this.parent.children.indexOf(this),1),this.parent.folders.splice(this.parent.folders.indexOf(this),1)),this.domElement.parentElement&&this.domElement.parentElement.removeChild(this.domElement),Array.from(this.children).forEach(t=>t.destroy())}controllersRecursive(){let t=Array.from(this.controllers);return this.folders.forEach(e=>{t=t.concat(e.controllersRecursive())}),t}foldersRecursive(){let t=Array.from(this.folders);return this.folders.forEach(e=>{t=t.concat(e.foldersRecursive())}),t}}const A=globalThis.__vgaiGameWindow||globalThis.window,_=globalThis.__vgaiGameDocument||globalThis.document,Ut=new Vt,S=new vt;S.background=new wt(8965358);S.fog=new At(8965358,0,50);const f=new xt(70,A.innerWidth/A.innerHeight,.1,1e3);f.rotation.order="YXZ";const lt=new _t(9290206,26253,1.5);lt.position.set(2,1,1);S.add(lt);const y=new Et(16777215,2.5);y.position.set(-5,25,-1);y.castShadow=!0;y.shadow.camera.near=.01;y.shadow.camera.far=500;y.shadow.camera.right=30;y.shadow.camera.left=-30;y.shadow.camera.top=30;y.shadow.camera.bottom=-30;y.shadow.mapSize.width=1024;y.shadow.mapSize.height=1024;y.shadow.radius=4;y.shadow.bias=-6e-5;S.add(y);const U=_.getElementById("container"),E=new $t({antialias:!0});E.setPixelRatio(A.devicePixelRatio);E.setSize(A.innerWidth,A.innerHeight);E.setAnimationLoop(de);E.shadowMap.enabled=!0;E.shadowMap.type=St;E.toneMapping=Ct;U.appendChild(E.domElement);const G=new Dt;G.domElement.style.position="absolute";G.domElement.style.top="0px";U.appendChild(G.domElement);const at=30,Zt=100,ht=.2,it=5,qt=new kt(ht,5),Qt=new Lt({color:14605965}),$=[];let R=0;for(let o=0;o<Zt;o++){const t=new zt(qt,Qt);t.castShadow=!0,t.receiveShadow=!0,S.add(t),$.push({mesh:t,collider:new ot(new u(0,-100,0),ht),velocity:new u})}const H=new J,g=new O(new u(0,.35,0),new u(0,1,0),.35),m=new u,v=new u;let z=!1,dt=0;const C={},K=new u,ct=new u,ut=new u;_.addEventListener("keydown",o=>{C[o.code]=!0});_.addEventListener("keyup",o=>{C[o.code]=!1});U.addEventListener("mousedown",()=>{_.body.requestPointerLock(),dt=performance.now()});_.addEventListener("mouseup",()=>{_.pointerLockElement!==null&&ee()});_.body.addEventListener("mousemove",o=>{_.pointerLockElement===_.body&&(f.rotation.y-=o.movementX/500,f.rotation.x-=o.movementY/500)});A.addEventListener("resize",te);function te(){f.aspect=A.innerWidth/A.innerHeight,f.updateProjectionMatrix(),E.setSize(A.innerWidth,A.innerHeight)}function ee(){const o=$[R];f.getWorldDirection(v),o.collider.center.copy(g.end).addScaledVector(v,g.radius*1.5);const t=15+30*(1-Math.exp((dt-performance.now())*.001));o.velocity.copy(v).multiplyScalar(t),o.velocity.addScaledVector(m,2),R=(R+1)%$.length}function ie(){const o=H.capsuleIntersect(g);z=!1,o&&(z=o.normal.y>0,z||m.addScaledVector(o.normal,-o.normal.dot(m)),o.depth>=1e-10&&g.translate(o.normal.multiplyScalar(o.depth)))}function se(o){let t=Math.exp(-4*o)-1;z||(m.y-=at*o,t*=.1),m.addScaledVector(m,t);const e=m.clone().multiplyScalar(o);g.translate(e),ie(),f.position.copy(g.end)}function ne(o){const t=K.addVectors(g.start,g.end).multiplyScalar(.5),e=o.collider.center,i=g.radius+o.collider.radius,r=i*i;for(const s of[g.start,g.end,t]){const n=s.distanceToSquared(e);if(n<r){const l=K.subVectors(s,e).normalize(),a=ct.copy(l).multiplyScalar(l.dot(m)),d=ut.copy(l).multiplyScalar(l.dot(o.velocity));m.add(d).sub(a),o.velocity.add(a).sub(d);const h=(i-Math.sqrt(n))/2;e.addScaledVector(l,-h)}}}function re(){for(let o=0,t=$.length;o<t;o++){const e=$[o];for(let i=o+1;i<t;i++){const r=$[i],s=e.collider.center.distanceToSquared(r.collider.center),n=e.collider.radius+r.collider.radius,l=n*n;if(s<l){const a=K.subVectors(e.collider.center,r.collider.center).normalize(),d=ct.copy(a).multiplyScalar(a.dot(e.velocity)),h=ut.copy(a).multiplyScalar(a.dot(r.velocity));e.velocity.add(h).sub(d),r.velocity.add(d).sub(h);const p=(n-Math.sqrt(s))/2;e.collider.center.addScaledVector(a,p),r.collider.center.addScaledVector(a,-p)}}}}function oe(o){$.forEach(t=>{t.collider.center.addScaledVector(t.velocity,o);const e=H.sphereIntersect(t.collider);e?(t.velocity.addScaledVector(e.normal,-e.normal.dot(t.velocity)*1.5),t.collider.center.add(e.normal.multiplyScalar(e.depth))):t.velocity.y-=at*o;const i=Math.exp(-1.5*o)-1;t.velocity.addScaledVector(t.velocity,i),ne(t)}),re();for(const t of $)t.mesh.position.copy(t.collider.center)}function st(){return f.getWorldDirection(v),v.y=0,v.normalize(),v}function nt(){return f.getWorldDirection(v),v.y=0,v.normalize(),v.cross(f.up),v}function le(o){const t=o*(z?25:8);C.KeyW&&m.add(st().multiplyScalar(t)),C.KeyS&&m.add(st().multiplyScalar(-t)),C.KeyA&&m.add(nt().multiplyScalar(-t)),C.KeyD&&m.add(nt().multiplyScalar(t)),z&&C.Space&&(m.y=15)}const ae=new Mt().setPath("./models/gltf/");ae.load("collision-world.glb",o=>{S.add(o.scene),H.fromGraphNode(o.scene),o.scene.traverse(i=>{i.isMesh&&(i.castShadow=!0,i.receiveShadow=!0,i.material.map&&(i.material.map.anisotropy=4))});const t=new Ot(H);t.visible=!1,S.add(t),new N({width:200}).add({debug:!1},"debug").onChange(function(i){t.visible=i})});function he(){f.position.y<=-25&&(g.start.set(0,.35,0),g.end.set(0,1,0),g.radius=.35,f.position.copy(g.end),f.rotation.set(0,0,0))}function de(){const o=Math.min(.05,Ut.getDelta())/it;for(let t=0;t<it;t++)le(o),se(o),oe(o),he();E.render(S,f),G.update()}
@@ -0,0 +1 @@
1
+ import{Y as M,_,Z as p,a0 as W}from"./index-CQEfi217.js";const E=globalThis.__vgaiGameWindow||globalThis.window,L=globalThis.__vgaiGameDocument||globalThis.document;function Y(){return globalThis.__world2dGameContainer??L.body}H();async function H(){const a=new M;await a.init({width:480,height:640,background:"#4ec0ca",antialias:!0}),Y().appendChild(a.canvas);const w=480,c=640,b=new _;a.stage.addChild(b);const e=new _,C=new p().roundRect(-14,-12,28,24,8).fill("#ffd23f").stroke({width:2,color:"#c98a00"}),u=new p().ellipse(-2,2,9,6).fill("#fff3b0");e.addChild(C,u),e.x=w*.3,e.y=c*.5,b.addChild(e);const d=[],x=170,l=64;let y=7;const T=()=>(y=y*1103515245+12345&2147483647,y/2147483647);function k(o){const n=120+T()*(c-240-x),t=new p().rect(0,0,l,n).fill("#5dbb46").stroke({width:3,color:"#3f8a30"}),i=new p().rect(0,0,l,c-n-x).fill("#5dbb46").stroke({width:3,color:"#3f8a30"});t.x=o,t.y=0,i.x=o,i.y=n+x,b.addChild(t,i),d.push({top:t,bot:i,x:o,scored:!1})}for(let o=0;o<4;o++)k(w+o*220);const r=new W({text:"Score: 0",style:{fontSize:28,fill:"#fff",fontWeight:"bold"}});r.x=16,r.y=16,a.stage.addChild(r);let f=0,h=0,s=!1,g=0;const G=.5,A=-8.5;function m(){if(s){e.y=c*.5,f=0,h=0,s=!1;for(let o=0;o<d.length;o++)d[o].x=w+o*220;return}f=A}E.addEventListener("keydown",o=>{(o.code==="Space"||o.code==="ArrowUp")&&m()}),a.canvas.addEventListener("pointerdown",m),a.ticker.add(o=>{const n=o.deltaTime;if(g+=n,u.scale.y=.6+Math.abs(Math.sin(g*.3))*.8,!s){f+=G*n,e.y+=f*n,e.rotation=Math.max(-.5,Math.min(1.2,f*.05));for(const t of d){t.x-=2.2*n,t.top.x=t.x,t.bot.x=t.x,t.x+l<0&&(t.x+=d.length*220,t.scored=!1),!t.scored&&t.x+l<e.x&&(t.scored=!0,h++,r.text=`Score: ${h}`);const i=e.x-14,v=e.y-12;if(i+28>t.x&&i<t.x+l){const P=t.top.height,S=t.bot.y;(v<P||v+24>S)&&(s=!0)}}(e.y>c-12||e.y<0)&&(s=!0),s&&(r.text=`Score: ${h} — tap to retry`)}}),globalThis.__flappy={app:a,score:()=>h}}
@@ -1 +1 @@
1
- import{M as d,S as c,L as l,P as m,X as h,N as w,O as g,Q as b}from"./index-_bCaipUk.js";const e=globalThis.__vgaiGameWindow||globalThis.window,i=globalThis.__vgaiGameDocument||globalThis.document,n=new d({antialias:!0});n.setSize(e.innerWidth,e.innerHeight);(i.getElementById("container")||i.body).appendChild(n.domElement);const t=new c;t.background=new l(2105384);const r=new m(60,e.innerWidth/e.innerHeight,.1,100);r.position.set(0,1.5,5);const o=new h(16777215,1.2);o.position.set(2,3,4);o.name="KeyLight";t.add(o);const a=new w(new g(1,1,1),new b({color:3368652}));a.name="OwnThreeCube";t.add(a);let s=0;n.setAnimationLoop(()=>{s+=.01,a.rotation.y=s,n.render(t,r)});
1
+ import{G as d,S as c,F as l,P as m,L as h,M as w,H as g,J as b}from"./index-CQEfi217.js";const e=globalThis.__vgaiGameWindow||globalThis.window,i=globalThis.__vgaiGameDocument||globalThis.document,n=new d({antialias:!0});n.setSize(e.innerWidth,e.innerHeight);(i.getElementById("container")||i.body).appendChild(n.domElement);const t=new c;t.background=new l(2105384);const r=new m(60,e.innerWidth/e.innerHeight,.1,100);r.position.set(0,1.5,5);const o=new h(16777215,1.2);o.position.set(2,3,4);o.name="KeyLight";t.add(o);const a=new w(new g(1,1,1),new b({color:3368652}));a.name="OwnThreeCube";t.add(a);let s=0;n.setAnimationLoop(()=>{s+=.01,a.rotation.y=s,n.render(t,r)});
@@ -0,0 +1 @@
1
+ import{Y as u,Z as h,_ as v,$ as y}from"./index-CQEfi217.js";const x=globalThis.__vgaiGameDocument||globalThis.document;function g(){return globalThis.__world2dGameContainer??x.body}p();async function p(){const t=new u;await t.init({width:800,height:600,background:"#1a1a2e",antialias:!1}),g().appendChild(t.canvas);const r=new h().roundRect(0,0,26,32,6).fill("#ffd166").circle(8,10,3).fill("#222").circle(18,10,3).fill("#222"),d=t.renderer.generateTexture(r),e=[],s=new v;t.stage.addChild(s);const a=800,c=600,f=.5;let i=12345;const o=()=>(i=i*1103515245+12345&2147483647,i/2147483647);function l(){const n=new y(d);n.anchor.set(.5),n.x=a/2,n.y=0,n.tint=o()*16777215|0,s.addChild(n),e.push({s:n,vx:(o()-.5)*12,vy:o()*6})}for(let n=0;n<250;n++)l();t.ticker.add(()=>{if(e.length<1500)for(let n=0;n<4;n++)l();for(const n of e)n.s.x+=n.vx,n.s.y+=n.vy,n.vy+=f,n.s.x>a?(n.s.x=a,n.vx=-n.vx):n.s.x<0&&(n.s.x=0,n.vx=-n.vx),n.s.y>c&&(n.s.y=c,n.vy=-n.vy*.85)}),globalThis.__bunnymark={app:t,count:()=>e.length}}
@@ -0,0 +1 @@
1
+ import{Y as C,_ as w,a1 as T,Z as _,a2 as v}from"./index-CQEfi217.js";const y=globalThis.__vgaiGameWindow||globalThis.window,m=globalThis.__vgaiGameDocument||globalThis.document;function k(){return globalThis.__world2dGameContainer??m.body}function h(l,a,e){const d=m.createElement("canvas");d.width=e,d.height=e;const n=d.getContext("2d");return n.fillStyle=l,n.fillRect(0,0,e,e),n.fillStyle=a,n.fillRect(2,2,e-4,3),n.fillRect(2,e-5,e-4,3),v.from(d)}A();async function A(){const l=new C;await l.init({width:640,height:480,background:"#0c1a12",antialias:!1}),k().appendChild(l.canvas);const a=32,e=60,d=40,n=new w;l.stage.addChild(n);const g=h("#3a7d44","#2f6638",a),p=h("#6b6b7b","#54545f",a),x=h("#2f6db0","#255a93",a),f=new T;n.addChild(f);let c=99;const u=()=>(c=c*1103515245+12345&2147483647,c/2147483647);for(let i=0;i<d;i++)for(let r=0;r<e;r++){const s=u(),b=s<.12?x:s<.24?p:g;f.tile(b,r*a,i*a)}const t=new w;t.addChild(new _().roundRect(-12,-12,24,24,5).fill("#ffd23f").stroke({width:2,color:"#c98a00"})),t.x=e*a/2,t.y=d*a/2,n.addChild(t);const o={};y.addEventListener("keydown",i=>{o[i.code]=!0}),y.addEventListener("keyup",i=>{o[i.code]=!1}),l.ticker.add(i=>{const s=5*i.deltaTime;(o.ArrowLeft||o.KeyA)&&(t.x-=s),(o.ArrowRight||o.KeyD)&&(t.x+=s),(o.ArrowUp||o.KeyW)&&(t.y-=s),(o.ArrowDown||o.KeyS)&&(t.y+=s),t.x=Math.max(0,Math.min(e*a,t.x)),t.y=Math.max(0,Math.min(d*a,t.y)),n.x=l.screen.width/2-t.x,n.y=l.screen.height/2-t.y}),globalThis.__tilemapCamera={app:l,tiles:e*d,playerPos:()=>({x:t.x,y:t.y}),press:(i,r)=>{o[i]=r}}}
@@ -0,0 +1 @@
1
+ import{a5 as W,a6 as k,a7 as T,F as H,P as X,S as N,a8 as U,a9 as Y,U as q,aa as O,ab as S,ac as C,ad as V,M as D,H as Q,ae as Z,G as J}from"./index-CQEfi217.js";const p=new T(0,0,0,"YXZ"),b=new k,$={type:"change"},ee={type:"lock"},te={type:"unlock"},R=Math.PI/2;class oe extends W{constructor(r,t=null){super(r,t),this.isLocked=!1,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.pointerSpeed=1,this._onMouseMove=ne.bind(this),this._onPointerlockChange=re.bind(this),this._onPointerlockError=ie.bind(this),this.domElement!==null&&this.connect()}connect(){this.domElement.ownerDocument.addEventListener("mousemove",this._onMouseMove),this.domElement.ownerDocument.addEventListener("pointerlockchange",this._onPointerlockChange),this.domElement.ownerDocument.addEventListener("pointerlockerror",this._onPointerlockError)}disconnect(){this.domElement.ownerDocument.removeEventListener("mousemove",this._onMouseMove),this.domElement.ownerDocument.removeEventListener("pointerlockchange",this._onPointerlockChange),this.domElement.ownerDocument.removeEventListener("pointerlockerror",this._onPointerlockError)}dispose(){this.disconnect()}getObject(){return console.warn("THREE.PointerLockControls: getObject() has been deprecated. Use controls.object instead."),this.object}getDirection(r){return r.set(0,0,-1).applyQuaternion(this.object.quaternion)}moveForward(r){if(this.enabled===!1)return;const t=this.object;b.setFromMatrixColumn(t.matrix,0),b.crossVectors(t.up,b),t.position.addScaledVector(b,r)}moveRight(r){if(this.enabled===!1)return;const t=this.object;b.setFromMatrixColumn(t.matrix,0),t.position.addScaledVector(b,r)}lock(){this.domElement.requestPointerLock()}unlock(){this.domElement.ownerDocument.exitPointerLock()}}function ne(n){if(this.enabled===!1||this.isLocked===!1)return;const r=n.movementX||n.mozMovementX||n.webkitMovementX||0,t=n.movementY||n.mozMovementY||n.webkitMovementY||0,i=this.object;p.setFromQuaternion(i.quaternion),p.y-=r*.002*this.pointerSpeed,p.x-=t*.002*this.pointerSpeed,p.x=Math.max(R-this.maxPolarAngle,Math.min(R-this.minPolarAngle,p.x)),i.quaternion.setFromEuler(p),this.dispatchEvent($)}function re(){this.domElement.ownerDocument.pointerLockElement===this.domElement?(this.dispatchEvent(ee),this.isLocked=!0):(this.dispatchEvent(te),this.isLocked=!1)}function ie(){console.error("THREE.PointerLockControls: Unable to use Pointer Lock API")}const a=globalThis.__vgaiGameWindow||globalThis.window,w=globalThis.__vgaiGameDocument||globalThis.document;let y,d,f,s;const K=[];let M,E=!1,x=!1,L=!1,P=!1,A=!1,F=performance.now();const o=new k,g=new k,u=new k,l=new H;se();function se(){y=new X(75,a.innerWidth/a.innerHeight,1,1e3),y.position.y=10,d=new N,d.background=new H(16777215),d.fog=new U(16777215,0,750);const n=new Y(15658751,7829384,2.5);n.position.set(.5,1,.75),d.add(n),s=new oe(y,w.body);const r=w.getElementById("blocker"),t=w.getElementById("instructions");t.addEventListener("click",function(){s.lock()}),s.addEventListener("lock",function(){t.style.display="none",r.style.display="none"}),s.addEventListener("unlock",function(){r.style.display="block",t.style.display=""}),d.add(s.object);const i=function(e){switch(e.code){case"ArrowUp":case"KeyW":E=!0;break;case"ArrowLeft":case"KeyA":L=!0;break;case"ArrowDown":case"KeyS":x=!0;break;case"ArrowRight":case"KeyD":P=!0;break;case"Space":A===!0&&(o.y+=350),A=!1;break}},B=function(e){switch(e.code){case"ArrowUp":case"KeyW":E=!1;break;case"ArrowLeft":case"KeyA":L=!1;break;case"ArrowDown":case"KeyS":x=!1;break;case"ArrowRight":case"KeyD":P=!1;break}};w.addEventListener("keydown",i),w.addEventListener("keyup",B),M=new q(new k,new k(0,-1,0),0,10);let m=new O(2e3,2e3,100,100);m.rotateX(-Math.PI/2);let h=m.attributes.position;for(let e=0,c=h.count;e<c;e++)u.fromBufferAttribute(h,e),u.x+=Math.random()*20-10,u.y+=Math.random()*2,u.z+=Math.random()*20-10,h.setXYZ(e,u.x,u.y,u.z);m=m.toNonIndexed(),h=m.attributes.position;const j=[];for(let e=0,c=h.count;e<c;e++)l.setHSL(Math.random()*.3+.5,.75,Math.random()*.25+.75,S),j.push(l.r,l.g,l.b);m.setAttribute("color",new C(j,3));const G=new V({vertexColors:!0}),I=new D(m,G);d.add(I);const _=new Q(20,20,20).toNonIndexed();h=_.attributes.position;const z=[];for(let e=0,c=h.count;e<c;e++)l.setHSL(Math.random()*.3+.5,.75,Math.random()*.25+.75,S),z.push(l.r,l.g,l.b);_.setAttribute("color",new C(z,3));for(let e=0;e<500;e++){const c=new Z({specular:16777215,flatShading:!0,vertexColors:!0});c.color.setHSL(Math.random()*.2+.5,.75,Math.random()*.25+.75,S);const v=new D(_,c);v.position.x=Math.floor(Math.random()*20-10)*20,v.position.y=Math.floor(Math.random()*20)*20+10,v.position.z=Math.floor(Math.random()*20-10)*20,d.add(v),K.push(v)}f=new J({antialias:!0}),f.setPixelRatio(a.devicePixelRatio),f.setSize(a.innerWidth,a.innerHeight),f.setAnimationLoop(ce),w.body.appendChild(f.domElement),a.addEventListener("resize",ae)}function ae(){y.aspect=a.innerWidth/a.innerHeight,y.updateProjectionMatrix(),f.setSize(a.innerWidth,a.innerHeight)}function ce(){const n=performance.now();if(s.isLocked===!0){M.ray.origin.copy(s.object.position),M.ray.origin.y-=10;const t=M.intersectObjects(K,!1).length>0,i=(n-F)/1e3;o.x-=o.x*10*i,o.z-=o.z*10*i,o.y-=9.8*100*i,g.z=Number(E)-Number(x),g.x=Number(P)-Number(L),g.normalize(),(E||x)&&(o.z-=g.z*400*i),(L||P)&&(o.x-=g.x*400*i),t===!0&&(o.y=Math.max(0,o.y),A=!0),s.moveRight(-o.x*i),s.moveForward(-o.z*i),s.object.position.y+=o.y*i,s.object.position.y<10&&(o.y=0,s.object.position.y=10,A=!0)}F=n,f.render(d,y)}
@@ -0,0 +1 @@
1
+ import{O as x,P as g,S as u,F as w,L as b,H,M as v,Q as y,U as z,G as P,X as d}from"./index-CQEfi217.js";import{S as R}from"./stats.module--VATS4Kh.js";const t=globalThis.__vgaiGameWindow||globalThis.window,c=globalThis.__vgaiGameDocument||globalThis.document;let m,n,r,h,o,e,s=0;const f=new x,l=5;T();function T(){n=new g(70,t.innerWidth/t.innerHeight,.1,100),r=new u,r.background=new w(15790320);const a=new b(16777215,3);a.position.set(1,1,1).normalize(),r.add(a);const p=new H;for(let M=0;M<2e3;M++){const i=new v(p,new y({color:Math.random()*16777215}));i.position.x=Math.random()*40-20,i.position.y=Math.random()*40-20,i.position.z=Math.random()*40-20,i.rotation.x=Math.random()*2*Math.PI,i.rotation.y=Math.random()*2*Math.PI,i.rotation.z=Math.random()*2*Math.PI,i.scale.x=Math.random()+.5,i.scale.y=Math.random()+.5,i.scale.z=Math.random()+.5,r.add(i)}h=new z,o=new P({antialias:!0}),o.setPixelRatio(t.devicePixelRatio),o.setSize(t.innerWidth,t.innerHeight),o.setAnimationLoop(S),c.body.appendChild(o.domElement),m=new R,c.body.appendChild(m.dom),c.addEventListener("mousemove",L),t.addEventListener("resize",W)}function W(){n.aspect=t.innerWidth/t.innerHeight,n.updateProjectionMatrix(),o.setSize(t.innerWidth,t.innerHeight)}function L(a){f.x=a.clientX/t.innerWidth*2-1,f.y=-(a.clientY/t.innerHeight)*2+1}function S(){C(),m.update()}function C(){s+=.1,n.position.x=l*Math.sin(d.degToRad(s)),n.position.y=l*Math.sin(d.degToRad(s)),n.position.z=l*Math.cos(d.degToRad(s)),n.lookAt(r.position),n.updateMatrixWorld(),h.setFromCamera(f,n);const a=h.intersectObjects(r.children,!1);a.length>0?e!=a[0].object&&(e&&e.material.emissive.setHex(e.currentHex),e=a[0].object,e.currentHex=e.material.emissive.getHex(),e.material.emissive.setHex(16711680)):(e&&e.material.emissive.setHex(e.currentHex),e=null),o.render(r,n)}
@@ -1,4 +1,4 @@
1
- import{aN as P,L as v,Z as u,aO as S,aP as w,aQ as y,aR as p,a9 as d,aS as _,aT as H,ae as z,aU as A,M as V,S as Q,P as W,X as E,N as L,aV as I,aW as N}from"./index-_bCaipUk.js";class O extends P{constructor(e,l,i=null,a=null,t=null){super(),this.scene=e,this.camera=l,this.overrideMaterial=i,this.clearColor=a,this.clearAlpha=t,this.clear=!0,this.clearDepth=!1,this.needsSwap=!1,this._oldClearColor=new v}render(e,l,i){const a=e.autoClear;e.autoClear=!1;let t,o;this.overrideMaterial!==null&&(o=this.scene.overrideMaterial,this.scene.overrideMaterial=this.overrideMaterial),this.clearColor!==null&&(e.getClearColor(this._oldClearColor),e.setClearColor(this.clearColor,e.getClearAlpha())),this.clearAlpha!==null&&(t=e.getClearAlpha(),e.setClearAlpha(this.clearAlpha)),this.clearDepth==!0&&e.clearDepth(),e.setRenderTarget(this.renderToScreen?null:i),this.clear===!0&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),e.render(this.scene,this.camera),this.clearColor!==null&&e.setClearColor(this._oldClearColor),this.clearAlpha!==null&&e.setClearAlpha(t),this.overrideMaterial!==null&&(this.scene.overrideMaterial=o),e.autoClear=a}}const G={uniforms:{tDiffuse:{value:null},luminosityThreshold:{value:1},smoothWidth:{value:1},defaultColor:{value:new v(0)},defaultOpacity:{value:0}},vertexShader:`
1
+ import{a_ as P,F as v,O as u,a$ as S,b0 as w,b1 as U,b2 as p,a6 as d,b3 as _,b4 as H,ad as z,b5 as A,G as V,S as Q,P as W,L as E,M as L,b6 as I,b7 as O}from"./index-CQEfi217.js";class G extends P{constructor(e,l,i=null,a=null,t=null){super(),this.scene=e,this.camera=l,this.overrideMaterial=i,this.clearColor=a,this.clearAlpha=t,this.clear=!0,this.clearDepth=!1,this.needsSwap=!1,this._oldClearColor=new v}render(e,l,i){const a=e.autoClear;e.autoClear=!1;let t,o;this.overrideMaterial!==null&&(o=this.scene.overrideMaterial,this.scene.overrideMaterial=this.overrideMaterial),this.clearColor!==null&&(e.getClearColor(this._oldClearColor),e.setClearColor(this.clearColor,e.getClearAlpha())),this.clearAlpha!==null&&(t=e.getClearAlpha(),e.setClearAlpha(this.clearAlpha)),this.clearDepth==!0&&e.clearDepth(),e.setRenderTarget(this.renderToScreen?null:i),this.clear===!0&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),e.render(this.scene,this.camera),this.clearColor!==null&&e.setClearColor(this._oldClearColor),this.clearAlpha!==null&&e.setClearAlpha(t),this.overrideMaterial!==null&&(this.scene.overrideMaterial=o),e.autoClear=a}}const N={uniforms:{tDiffuse:{value:null},luminosityThreshold:{value:1},smoothWidth:{value:1},defaultColor:{value:new v(0)},defaultOpacity:{value:0}},vertexShader:`
2
2
 
3
3
  varying vec2 vUv;
4
4
 
@@ -30,7 +30,7 @@ import{aN as P,L as v,Z as u,aO as S,aP as w,aQ as y,aR as p,a9 as d,aS as _,aT
30
30
 
31
31
  gl_FragColor = mix( outputColor, texel, alpha );
32
32
 
33
- }`};class f extends P{constructor(e,l,i,a){super(),this.strength=l!==void 0?l:1,this.radius=i,this.threshold=a,this.resolution=e!==void 0?new u(e.x,e.y):new u(256,256),this.clearColor=new v(0,0,0),this.renderTargetsHorizontal=[],this.renderTargetsVertical=[],this.nMips=5;let t=Math.round(this.resolution.x/2),o=Math.round(this.resolution.y/2);this.renderTargetBright=new S(t,o,{type:w}),this.renderTargetBright.texture.name="UnrealBloomPass.bright",this.renderTargetBright.texture.generateMipmaps=!1;for(let n=0;n<this.nMips;n++){const C=new S(t,o,{type:w});C.texture.name="UnrealBloomPass.h"+n,C.texture.generateMipmaps=!1,this.renderTargetsHorizontal.push(C);const M=new S(t,o,{type:w});M.texture.name="UnrealBloomPass.v"+n,M.texture.generateMipmaps=!1,this.renderTargetsVertical.push(M),t=Math.round(t/2),o=Math.round(o/2)}const c=G;this.highPassUniforms=y.clone(c.uniforms),this.highPassUniforms.luminosityThreshold.value=a,this.highPassUniforms.smoothWidth.value=.01,this.materialHighPassFilter=new p({uniforms:this.highPassUniforms,vertexShader:c.vertexShader,fragmentShader:c.fragmentShader}),this.separableBlurMaterials=[];const s=[3,5,7,9,11];t=Math.round(this.resolution.x/2),o=Math.round(this.resolution.y/2);for(let n=0;n<this.nMips;n++)this.separableBlurMaterials.push(this.getSeperableBlurMaterial(s[n])),this.separableBlurMaterials[n].uniforms.invSize.value=new u(1/t,1/o),t=Math.round(t/2),o=Math.round(o/2);this.compositeMaterial=this.getCompositeMaterial(this.nMips),this.compositeMaterial.uniforms.blurTexture1.value=this.renderTargetsVertical[0].texture,this.compositeMaterial.uniforms.blurTexture2.value=this.renderTargetsVertical[1].texture,this.compositeMaterial.uniforms.blurTexture3.value=this.renderTargetsVertical[2].texture,this.compositeMaterial.uniforms.blurTexture4.value=this.renderTargetsVertical[3].texture,this.compositeMaterial.uniforms.blurTexture5.value=this.renderTargetsVertical[4].texture,this.compositeMaterial.uniforms.bloomStrength.value=l,this.compositeMaterial.uniforms.bloomRadius.value=.1;const F=[1,.8,.6,.4,.2];this.compositeMaterial.uniforms.bloomFactors.value=F,this.bloomTintColors=[new d(1,1,1),new d(1,1,1),new d(1,1,1),new d(1,1,1),new d(1,1,1)],this.compositeMaterial.uniforms.bloomTintColors.value=this.bloomTintColors;const b=_;this.copyUniforms=y.clone(b.uniforms),this.blendMaterial=new p({uniforms:this.copyUniforms,vertexShader:b.vertexShader,fragmentShader:b.fragmentShader,blending:H,depthTest:!1,depthWrite:!1,transparent:!0}),this.enabled=!0,this.needsSwap=!1,this._oldClearColor=new v,this.oldClearAlpha=1,this.basic=new z,this.fsQuad=new A(null)}dispose(){for(let e=0;e<this.renderTargetsHorizontal.length;e++)this.renderTargetsHorizontal[e].dispose();for(let e=0;e<this.renderTargetsVertical.length;e++)this.renderTargetsVertical[e].dispose();this.renderTargetBright.dispose();for(let e=0;e<this.separableBlurMaterials.length;e++)this.separableBlurMaterials[e].dispose();this.compositeMaterial.dispose(),this.blendMaterial.dispose(),this.basic.dispose(),this.fsQuad.dispose()}setSize(e,l){let i=Math.round(e/2),a=Math.round(l/2);this.renderTargetBright.setSize(i,a);for(let t=0;t<this.nMips;t++)this.renderTargetsHorizontal[t].setSize(i,a),this.renderTargetsVertical[t].setSize(i,a),this.separableBlurMaterials[t].uniforms.invSize.value=new u(1/i,1/a),i=Math.round(i/2),a=Math.round(a/2)}render(e,l,i,a,t){e.getClearColor(this._oldClearColor),this.oldClearAlpha=e.getClearAlpha();const o=e.autoClear;e.autoClear=!1,e.setClearColor(this.clearColor,0),t&&e.state.buffers.stencil.setTest(!1),this.renderToScreen&&(this.fsQuad.material=this.basic,this.basic.map=i.texture,e.setRenderTarget(null),e.clear(),this.fsQuad.render(e)),this.highPassUniforms.tDiffuse.value=i.texture,this.highPassUniforms.luminosityThreshold.value=this.threshold,this.fsQuad.material=this.materialHighPassFilter,e.setRenderTarget(this.renderTargetBright),e.clear(),this.fsQuad.render(e);let c=this.renderTargetBright;for(let s=0;s<this.nMips;s++)this.fsQuad.material=this.separableBlurMaterials[s],this.separableBlurMaterials[s].uniforms.colorTexture.value=c.texture,this.separableBlurMaterials[s].uniforms.direction.value=f.BlurDirectionX,e.setRenderTarget(this.renderTargetsHorizontal[s]),e.clear(),this.fsQuad.render(e),this.separableBlurMaterials[s].uniforms.colorTexture.value=this.renderTargetsHorizontal[s].texture,this.separableBlurMaterials[s].uniforms.direction.value=f.BlurDirectionY,e.setRenderTarget(this.renderTargetsVertical[s]),e.clear(),this.fsQuad.render(e),c=this.renderTargetsVertical[s];this.fsQuad.material=this.compositeMaterial,this.compositeMaterial.uniforms.bloomStrength.value=this.strength,this.compositeMaterial.uniforms.bloomRadius.value=this.radius,this.compositeMaterial.uniforms.bloomTintColors.value=this.bloomTintColors,e.setRenderTarget(this.renderTargetsHorizontal[0]),e.clear(),this.fsQuad.render(e),this.fsQuad.material=this.blendMaterial,this.copyUniforms.tDiffuse.value=this.renderTargetsHorizontal[0].texture,t&&e.state.buffers.stencil.setTest(!0),this.renderToScreen?(e.setRenderTarget(null),this.fsQuad.render(e)):(e.setRenderTarget(i),this.fsQuad.render(e)),e.setClearColor(this._oldClearColor,this.oldClearAlpha),e.autoClear=o}getSeperableBlurMaterial(e){const l=[];for(let i=0;i<e;i++)l.push(.39894*Math.exp(-.5*i*i/(e*e))/e);return new p({defines:{KERNEL_RADIUS:e},uniforms:{colorTexture:{value:null},invSize:{value:new u(.5,.5)},direction:{value:new u(.5,.5)},gaussianCoefficients:{value:l}},vertexShader:`varying vec2 vUv;
33
+ }`};class f extends P{constructor(e,l,i,a){super(),this.strength=l!==void 0?l:1,this.radius=i,this.threshold=a,this.resolution=e!==void 0?new u(e.x,e.y):new u(256,256),this.clearColor=new v(0,0,0),this.renderTargetsHorizontal=[],this.renderTargetsVertical=[],this.nMips=5;let t=Math.round(this.resolution.x/2),o=Math.round(this.resolution.y/2);this.renderTargetBright=new S(t,o,{type:w}),this.renderTargetBright.texture.name="UnrealBloomPass.bright",this.renderTargetBright.texture.generateMipmaps=!1;for(let n=0;n<this.nMips;n++){const C=new S(t,o,{type:w});C.texture.name="UnrealBloomPass.h"+n,C.texture.generateMipmaps=!1,this.renderTargetsHorizontal.push(C);const M=new S(t,o,{type:w});M.texture.name="UnrealBloomPass.v"+n,M.texture.generateMipmaps=!1,this.renderTargetsVertical.push(M),t=Math.round(t/2),o=Math.round(o/2)}const c=N;this.highPassUniforms=U.clone(c.uniforms),this.highPassUniforms.luminosityThreshold.value=a,this.highPassUniforms.smoothWidth.value=.01,this.materialHighPassFilter=new p({uniforms:this.highPassUniforms,vertexShader:c.vertexShader,fragmentShader:c.fragmentShader}),this.separableBlurMaterials=[];const s=[3,5,7,9,11];t=Math.round(this.resolution.x/2),o=Math.round(this.resolution.y/2);for(let n=0;n<this.nMips;n++)this.separableBlurMaterials.push(this.getSeperableBlurMaterial(s[n])),this.separableBlurMaterials[n].uniforms.invSize.value=new u(1/t,1/o),t=Math.round(t/2),o=Math.round(o/2);this.compositeMaterial=this.getCompositeMaterial(this.nMips),this.compositeMaterial.uniforms.blurTexture1.value=this.renderTargetsVertical[0].texture,this.compositeMaterial.uniforms.blurTexture2.value=this.renderTargetsVertical[1].texture,this.compositeMaterial.uniforms.blurTexture3.value=this.renderTargetsVertical[2].texture,this.compositeMaterial.uniforms.blurTexture4.value=this.renderTargetsVertical[3].texture,this.compositeMaterial.uniforms.blurTexture5.value=this.renderTargetsVertical[4].texture,this.compositeMaterial.uniforms.bloomStrength.value=l,this.compositeMaterial.uniforms.bloomRadius.value=.1;const R=[1,.8,.6,.4,.2];this.compositeMaterial.uniforms.bloomFactors.value=R,this.bloomTintColors=[new d(1,1,1),new d(1,1,1),new d(1,1,1),new d(1,1,1),new d(1,1,1)],this.compositeMaterial.uniforms.bloomTintColors.value=this.bloomTintColors;const x=_;this.copyUniforms=U.clone(x.uniforms),this.blendMaterial=new p({uniforms:this.copyUniforms,vertexShader:x.vertexShader,fragmentShader:x.fragmentShader,blending:H,depthTest:!1,depthWrite:!1,transparent:!0}),this.enabled=!0,this.needsSwap=!1,this._oldClearColor=new v,this.oldClearAlpha=1,this.basic=new z,this.fsQuad=new A(null)}dispose(){for(let e=0;e<this.renderTargetsHorizontal.length;e++)this.renderTargetsHorizontal[e].dispose();for(let e=0;e<this.renderTargetsVertical.length;e++)this.renderTargetsVertical[e].dispose();this.renderTargetBright.dispose();for(let e=0;e<this.separableBlurMaterials.length;e++)this.separableBlurMaterials[e].dispose();this.compositeMaterial.dispose(),this.blendMaterial.dispose(),this.basic.dispose(),this.fsQuad.dispose()}setSize(e,l){let i=Math.round(e/2),a=Math.round(l/2);this.renderTargetBright.setSize(i,a);for(let t=0;t<this.nMips;t++)this.renderTargetsHorizontal[t].setSize(i,a),this.renderTargetsVertical[t].setSize(i,a),this.separableBlurMaterials[t].uniforms.invSize.value=new u(1/i,1/a),i=Math.round(i/2),a=Math.round(a/2)}render(e,l,i,a,t){e.getClearColor(this._oldClearColor),this.oldClearAlpha=e.getClearAlpha();const o=e.autoClear;e.autoClear=!1,e.setClearColor(this.clearColor,0),t&&e.state.buffers.stencil.setTest(!1),this.renderToScreen&&(this.fsQuad.material=this.basic,this.basic.map=i.texture,e.setRenderTarget(null),e.clear(),this.fsQuad.render(e)),this.highPassUniforms.tDiffuse.value=i.texture,this.highPassUniforms.luminosityThreshold.value=this.threshold,this.fsQuad.material=this.materialHighPassFilter,e.setRenderTarget(this.renderTargetBright),e.clear(),this.fsQuad.render(e);let c=this.renderTargetBright;for(let s=0;s<this.nMips;s++)this.fsQuad.material=this.separableBlurMaterials[s],this.separableBlurMaterials[s].uniforms.colorTexture.value=c.texture,this.separableBlurMaterials[s].uniforms.direction.value=f.BlurDirectionX,e.setRenderTarget(this.renderTargetsHorizontal[s]),e.clear(),this.fsQuad.render(e),this.separableBlurMaterials[s].uniforms.colorTexture.value=this.renderTargetsHorizontal[s].texture,this.separableBlurMaterials[s].uniforms.direction.value=f.BlurDirectionY,e.setRenderTarget(this.renderTargetsVertical[s]),e.clear(),this.fsQuad.render(e),c=this.renderTargetsVertical[s];this.fsQuad.material=this.compositeMaterial,this.compositeMaterial.uniforms.bloomStrength.value=this.strength,this.compositeMaterial.uniforms.bloomRadius.value=this.radius,this.compositeMaterial.uniforms.bloomTintColors.value=this.bloomTintColors,e.setRenderTarget(this.renderTargetsHorizontal[0]),e.clear(),this.fsQuad.render(e),this.fsQuad.material=this.blendMaterial,this.copyUniforms.tDiffuse.value=this.renderTargetsHorizontal[0].texture,t&&e.state.buffers.stencil.setTest(!0),this.renderToScreen?(e.setRenderTarget(null),this.fsQuad.render(e)):(e.setRenderTarget(i),this.fsQuad.render(e)),e.setClearColor(this._oldClearColor,this.oldClearAlpha),e.autoClear=o}getSeperableBlurMaterial(e){const l=[];for(let i=0;i<e;i++)l.push(.39894*Math.exp(-.5*i*i/(e*e))/e);return new p({defines:{KERNEL_RADIUS:e},uniforms:{colorTexture:{value:null},invSize:{value:new u(.5,.5)},direction:{value:new u(.5,.5)},gaussianCoefficients:{value:l}},vertexShader:`varying vec2 vUv;
34
34
  void main() {
35
35
  vUv = uv;
36
36
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
@@ -80,4 +80,4 @@ import{aN as P,L as v,Z as u,aO as S,aP as w,aQ as y,aR as p,a9 as d,aS as _,aT
80
80
  lerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) +
81
81
  lerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) +
82
82
  lerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );
83
- }`})}}f.BlurDirectionX=new u(1,0);f.BlurDirectionY=new u(0,1);const r=globalThis.__vgaiGameWindow||globalThis.window,D=globalThis.__vgaiGameDocument||globalThis.document,R=r.devicePixelRatio||1,h=new V({antialias:!0});h.setPixelRatio(R);h.setSize(r.innerWidth,r.innerHeight);(D.getElementById("container")||D.body).appendChild(h.domElement);const x=new Q;x.background=new v(328970);const g=new W(60,r.innerWidth/r.innerHeight,.1,100);g.position.set(0,1.2,4.5);const U=new E(16777215,.6);U.position.set(2,3,4);U.name="KeyLight";x.add(U);const T=new L(new I(1,1),new z({color:16773808}));T.name="BloomCore";x.add(T);const m=new N(h);m.setPixelRatio(R);m.setSize(r.innerWidth,r.innerHeight);m.addPass(new O(x,g));const j=new f(new u(r.innerWidth,r.innerHeight),1.6,.5,.1);m.addPass(j);r.addEventListener("resize",()=>{g.aspect=r.innerWidth/r.innerHeight,g.updateProjectionMatrix(),h.setSize(r.innerWidth,r.innerHeight),m.setSize(r.innerWidth,r.innerHeight)});r.__vgaiBloomComposer={composerSize:()=>[m.writeBuffer.width,m.writeBuffer.height],rendererSize:()=>[h.domElement.width,h.domElement.height],pixelRatio:()=>h.getPixelRatio()};let B=0;h.setAnimationLoop(()=>{B+=.01,T.rotation.y=B,T.rotation.x=B*.6,m.render()});
83
+ }`})}}f.BlurDirectionX=new u(1,0);f.BlurDirectionY=new u(0,1);const r=globalThis.__vgaiGameWindow||globalThis.window,D=globalThis.__vgaiGameDocument||globalThis.document,F=r.devicePixelRatio||1,h=new V({antialias:!0});h.setPixelRatio(F);h.setSize(r.innerWidth,r.innerHeight);(D.getElementById("container")||D.body).appendChild(h.domElement);const T=new Q;T.background=new v(328970);const g=new W(60,r.innerWidth/r.innerHeight,.1,100);g.position.set(0,1.2,4.5);const y=new E(16777215,.6);y.position.set(2,3,4);y.name="KeyLight";T.add(y);const b=new L(new I(1,1),new z({color:16773808}));b.name="BloomCore";T.add(b);const m=new O(h);m.setPixelRatio(F);m.setSize(r.innerWidth,r.innerHeight);m.addPass(new G(T,g));const j=new f(new u(r.innerWidth,r.innerHeight),1.6,.5,.1);m.addPass(j);r.addEventListener("resize",()=>{g.aspect=r.innerWidth/r.innerHeight,g.updateProjectionMatrix(),h.setSize(r.innerWidth,r.innerHeight),m.setSize(r.innerWidth,r.innerHeight)});r.__vgaiBloomComposer={composerSize:()=>[m.writeBuffer.width,m.writeBuffer.height],rendererSize:()=>[h.domElement.width,h.domElement.height],pixelRatio:()=>h.getPixelRatio()};let B=0;h.setAnimationLoop(()=>{B+=.01,b.rotation.y=B,b.rotation.x=B*.6,m.render()});
@@ -0,0 +1 @@
1
+ import{a3 as x,a4 as A}from"./index-CQEfi217.js";function y(){const o=new Map,s=new Map;function l(e){const i=o.get(e);if(i)return i;let r;if(e.endsWith(".glb")||e.endsWith(".gltf"))r=new Promise((t,d)=>{x.load(e,a=>t({scene:a.scene,animations:a.animations}),void 0,d)});else if(e.endsWith(".json"))r=fetch(A(e)).then(t=>{if(!t.ok)throw new Error(`Failed to fetch ${e}: ${t.status}`);return t.json()});else throw new Error(`AssetCache: unsupported file type for "${e}"`);const n=r.then(t=>(s.set(e,t),t));return o.set(e,n),n}function c(e){if(!s.has(e))throw new Error(`AssetCache: "${e}" not loaded. Call load() first and await it.`);return s.get(e)}return{load:l,get:c}}function S(o){const s=o.fixedTimestep??.016666666666666666,l=o.maxSubSteps??8,c=s*l,e=o.externalDrive??!1;let i=0,r=0,n=!1,t=0,d=1,a=!1,u=!1;function p(){typeof document>"u"||(document.hidden?n&&(n=!1,cancelAnimationFrame(t),a=!0):a&&(a=!1,n=!0,r=performance.now(),i=0,t=requestAnimationFrame(h)))}function h(f){if(!n)return;t=requestAnimationFrame(h);const m=(f-r)/1e3;r=f;const w=Math.min(m,c)*d;i+=w,i>c&&(i=c);let g=0;for(;i>=s&&g<l;)o.update(s),i-=s,g++}return{start(){if(!n&&(n=!0,a=!1,r=performance.now(),i=0,!e)){if(!u&&typeof document<"u"&&(document.addEventListener("visibilitychange",p),u=!0),typeof document<"u"&&document.hidden){n=!1,a=!0;return}t=requestAnimationFrame(h)}},stop(){n=!1,a=!1,cancelAnimationFrame(t),u&&typeof document<"u"&&(document.removeEventListener("visibilitychange",p),u=!1)},get isRunning(){return n},get liveness(){return a?"hidden-paused":n?"running":"stopped"},set timeScale(f){const m=Math.min(8,Math.max(0,f));m!==f&&console.warn(`[game-loop] timeScale ${f} is out of range [0, 8]; clamped to ${m}.`),d=m},get timeScale(){return d},get fixedDt(){return s}}}export{y as a,S as c};
@@ -1 +1 @@
1
- import{S as h,L as l,P as f,M as w,N as s,O as p,Q as r,U as u,X as b,Y as g}from"./index-_bCaipUk.js";const c=globalThis.__vgaiGameDocument||globalThis.document,e=new h;e.name="BundleScene";e.background=new l(1053724);const n=new f(60,innerWidth/innerHeight,.1,100);n.position.set(0,1.6,5);const d=c.createElement("canvas"),t=new w({canvas:d,antialias:!0});t.setSize(innerWidth,innerHeight,!1);c.body.appendChild(d);const a=new s(new p(1,1,1),new r({color:16733491}));a.name="HeroCube";e.add(a);const i=new s(new u(.6,24,16),new r({color:3377407}));i.name="Orb";i.position.set(2.2,0,0);e.add(i);const o=new b(16777215,2.2);o.position.set(3,5,2);o.name="Sun";e.add(o);e.add(new g(4210768,1));t.setAnimationLoop(m=>{a.rotation.y=m*.001,t.render(e,n)});addEventListener("resize",()=>{n.aspect=innerWidth/innerHeight,n.updateProjectionMatrix(),t.setSize(innerWidth,innerHeight,!1)});
1
+ import{S as h,F as l,P as f,G as w,M as s,H as p,J as r,K as u,L as b,N as g}from"./index-CQEfi217.js";const c=globalThis.__vgaiGameDocument||globalThis.document,e=new h;e.name="BundleScene";e.background=new l(1053724);const n=new f(60,innerWidth/innerHeight,.1,100);n.position.set(0,1.6,5);const d=c.createElement("canvas"),t=new w({canvas:d,antialias:!0});t.setSize(innerWidth,innerHeight,!1);c.body.appendChild(d);const a=new s(new p(1,1,1),new r({color:16733491}));a.name="HeroCube";e.add(a);const i=new s(new u(.6,24,16),new r({color:3377407}));i.name="Orb";i.position.set(2.2,0,0);e.add(i);const o=new b(16777215,2.2);o.position.set(3,5,2);o.name="Sun";e.add(o);e.add(new g(4210768,1));t.setAnimationLoop(m=>{a.rotation.y=m*.001,t.render(e,n)});addEventListener("resize",()=>{n.aspect=innerWidth/innerHeight,n.updateProjectionMatrix(),t.setSize(innerWidth,innerHeight,!1)});