@volter/game-editor 0.5.65
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.
- package/BUNDLED_NOTICES +11228 -0
- package/LICENSE +686 -0
- package/LICENSE-BLENDER +1409 -0
- package/LICENSE-MCP +21 -0
- package/NOTICE +21 -0
- package/catalog/entries/audio.json +14 -0
- package/catalog/entries/bake.json +36 -0
- package/catalog/entries/blender.json +17 -0
- package/catalog/entries/react-root.json +24 -0
- package/catalog/entries/reflections.json +29 -0
- package/catalog/entries/static-batch.json +25 -0
- package/catalog/project-source/LICENSE +37 -0
- package/catalog/project-source/src/contributions/bake.kind.ts +40 -0
- package/catalog/project-source/src/contributions/builder-document.tsx +65 -0
- package/catalog/project-source/src/contributions/builder-state.ts +27 -0
- package/catalog/project-source/src/contributions/builder-ui.tsx +61 -0
- package/catalog/project-source/src/contributions/module-source.ts +502 -0
- package/catalog/project-source/src/contributions/pages.finder.ts +61 -0
- package/catalog/project-source/src/lib/audio/sfx.ts +255 -0
- package/catalog/project-source/src/lib/bake/asset-seed.ts +128 -0
- package/catalog/project-source/src/lib/bake/bake-schema.ts +65 -0
- package/catalog/project-source/src/lib/bake/clip-layering.ts +203 -0
- package/catalog/project-source/src/lib/bake/gltf-bake.ts +657 -0
- package/catalog/project-source/src/lib/bake/mesh-slice.ts +157 -0
- package/catalog/project-source/src/lib/bake/node-image.ts +463 -0
- package/catalog/project-source/src/lib/bake/object3d-bake.ts +121 -0
- package/catalog/project-source/src/lib/bake/object3d-lifecycle.ts +15 -0
- package/catalog/project-source/src/lib/bake/object3d-source.ts +8 -0
- package/catalog/project-source/src/lib/bake/params.ts +75 -0
- package/catalog/project-source/src/lib/bake/rest-relative-animation.ts +217 -0
- package/catalog/project-source/src/lib/bake/use-model.ts +95 -0
- package/catalog/project-source/src/lib/react-root/index.ts +20 -0
- package/catalog/project-source/src/lib/react-root/react-root-adapter.tsx +57 -0
- package/catalog/project-source/src/lib/reflections/ReflectionProbe.tsx +201 -0
- package/catalog/project-source/src/lib/reflections/index.ts +19 -0
- package/catalog/project-source/src/lib/reflections/probe-controller.ts +75 -0
- package/catalog/project-source/src/lib/reflections/reflection-probe-registry.ts +402 -0
- package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +416 -0
- package/catalog/project-source/src/lib/static-batch/Frozen.tsx +91 -0
- package/catalog/project-source/src/lib/static-batch/freeze.ts +579 -0
- package/catalog/project-source/src/lib/static-batch/index.ts +44 -0
- package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +149 -0
- package/catalog/project-source/src/lib/static-batch/shadow-cache.ts +171 -0
- package/catalog/project-source/src/tools/bake-module.tool.ts +139 -0
- package/catalog/project-source/src/tools/bake-preview.tool.ts +475 -0
- package/dist/.vite/manifest.json +8304 -0
- package/dist/assets/AssetBudgetPanel-J9--TZPU.js +23 -0
- package/dist/assets/AudioViewer-CR7333fe.js +1 -0
- package/dist/assets/BVHLoader-6bQIXhMX.js +1 -0
- package/dist/assets/BufferGeometryUtils-Nz37EVXf.js +1 -0
- package/dist/assets/CCDIKSolver-CD7vLpsK.js +1 -0
- package/dist/assets/CSS3DRenderer-CL7ABLVK.js +1 -0
- package/dist/assets/CanvasSceneViewport-Bpi6gVTC.js +1 -0
- package/dist/assets/ColladaLoader-aVOPIsCh.js +3 -0
- package/dist/assets/ColorInput-DQBNrW-K.js +1 -0
- package/dist/assets/ConvexGeometry-CAzXlPVG.js +1 -0
- package/dist/assets/ConvexHull-BINCESFp.js +1 -0
- package/dist/assets/CopyShader-BzTUYzf6.js +24 -0
- package/dist/assets/DecalGeometry-160KRdfg.js +1 -0
- package/dist/assets/EXRLoader-Cdans_oJ.js +1 -0
- package/dist/assets/EffectComposer-DQxfsXBZ.js +1 -0
- package/dist/assets/EntityModelDocument-Ccvw66N9.js +1 -0
- package/dist/assets/EnvironmentAssetDocument-Dg-Qq6O6.js +1 -0
- package/dist/assets/FBXLoader-B4MoUtAn.js +1 -0
- package/dist/assets/Fbo-Dz-Soul3.js +1 -0
- package/dist/assets/FontLoader-CvGoVI5a.js +2 -0
- package/dist/assets/GLTFExporter-HgrCle4L.js +1 -0
- package/dist/assets/GameplaySessionTimeline-B52W3FVZ.js +1 -0
- package/dist/assets/Gltf-UHVWKz65.js +2 -0
- package/dist/assets/HDRLoader-THU88oVD.js +5 -0
- package/dist/assets/ImageViewer-Tn7s_MnW.js +1 -0
- package/dist/assets/InspectorCanvasPreview-CEr_Kxna.js +1 -0
- package/dist/assets/InspectorObjectPreview-CVejvLRg.js +1 -0
- package/dist/assets/JsonAssetDocument-C7VGcLhu.js +3 -0
- package/dist/assets/LineSegments2-CsOpKSiM.js +370 -0
- package/dist/assets/MTLLoader-_Xzd4_0p.js +2 -0
- package/dist/assets/MarchingCubes-Bsp4wrzd.js +1 -0
- package/dist/assets/MeshBVH-BiDHDcu-.js +1 -0
- package/dist/assets/ModelAssetDocument-F5GACirk.js +1 -0
- package/dist/assets/NonThreeAuthoringBootstrap-C3woOMxX.js +1 -0
- package/dist/assets/OBJLoader-BhIC6Hwo.js +5 -0
- package/dist/assets/Object3DDocumentViewport-DB7T0NTl.js +2 -0
- package/dist/assets/Object3DPreview-DL8oi7Xs.js +2 -0
- package/dist/assets/OnlineAssetDetail-C6z9RvYK.js +2 -0
- package/dist/assets/OrbitControls-CM3bPray.js +1 -0
- package/dist/assets/OrbitControls-DLpayAaK.js +1 -0
- package/dist/assets/OrthographicCamera-bQozawrh.js +1 -0
- package/dist/assets/PLYLoader-DYQqs5Ik.js +2 -0
- package/dist/assets/PerspectiveCamera-CQ2lh01o.js +1 -0
- package/dist/assets/PlayBar-BR-Vg3Jb.js +2 -0
- package/dist/assets/RGBELoader-BgBcQv8j.js +1 -0
- package/dist/assets/RectAreaLightUniformsLib-CMMoWfll.js +1 -0
- package/dist/assets/RenderPass-DPrn-Uky.js +1 -0
- package/dist/assets/ResolutionPicker-C67vs1F3.js +1 -0
- package/dist/assets/RootSelectionOverlay-BZPlxmXU.js +1 -0
- package/dist/assets/RoundedBox-BDGBg6QZ.js +1 -0
- package/dist/assets/RoundedBoxGeometry-CyUuYPfW.js +1 -0
- package/dist/assets/STLLoader-Dyv3lsxY.js +1 -0
- package/dist/assets/SelectionBox-D_75KrNW.js +1 -0
- package/dist/assets/ShaderPass-QYRpPuFJ.js +1 -0
- package/dist/assets/ShadowEditor-DkImwu1Y.js +1 -0
- package/dist/assets/SimplifyModifier-C8ayvRzd.js +1 -0
- package/dist/assets/SkeletonUtils-Cps8GOC6.js +1 -0
- package/dist/assets/Sky-CQKCgYDs.js +154 -0
- package/dist/assets/SourceAssetViewer-2SWQoUut.js +12 -0
- package/dist/assets/StageHost-BN-IoTef.js +2 -0
- package/dist/assets/StoryPreviewMount-DjyxRCXu.js +1 -0
- package/dist/assets/TDSLoader-D_T8XJ81.js +1 -0
- package/dist/assets/TextGeometry-DOWAEUV0.js +1 -0
- package/dist/assets/ThreeBoardDocument-CVncZyIq.js +2 -0
- package/dist/assets/ThreeIsolationSceneContent-C8C8whSF.js +1 -0
- package/dist/assets/ToolObject3DPreview-BRoDWe4Q.js +1 -0
- package/dist/assets/TrackballControls-DfznuQTh.js +1 -0
- package/dist/assets/TransientHint-BB1fwrvK.js +1 -0
- package/dist/assets/UnrealBloomPass-CR-cS_K5.js +83 -0
- package/dist/assets/VideoViewer-C6kocgIU.js +1 -0
- package/dist/assets/_commonjsHelpers-D6-XlEtG.js +1 -0
- package/dist/assets/active-ingest-CT6jSGhr.js +3 -0
- package/dist/assets/adapter-surface-Y37Nzcyw.js +1 -0
- package/dist/assets/after-paint-CB4bz1-e.js +1 -0
- package/dist/assets/agx-base-srgb-BjWZJgrZ.lut +0 -0
- package/dist/assets/agx-look-medium-high-contrast-D5F_ob1L.lut +0 -0
- package/dist/assets/agx-look-punchy-dxsnycNs.lut +0 -0
- package/dist/assets/animation-clock-CnjZqfJp.js +1 -0
- package/dist/assets/asset-budget-asset.menu-Di3KiQCd.js +1 -0
- package/dist/assets/asset-budget.action-DCzzcuTh.js +1 -0
- package/dist/assets/asset-budget.document-BWU8wnVW.js +1 -0
- package/dist/assets/asset-budget.menu-BGZpT_31.js +1 -0
- package/dist/assets/asset-editor-persistence-BBaONOJt.js +1 -0
- package/dist/assets/asset-loaders-BOy5Ss8k.js +2 -0
- package/dist/assets/asset-parse-error-BHMwBRU3.js +3 -0
- package/dist/assets/assets-BuSoGjBX.js +1 -0
- package/dist/assets/audio-meter-CyiToeUW.js +1 -0
- package/dist/assets/audio-unlock.service-CfUgUQVy.js +1 -0
- package/dist/assets/audio.utility-C6K6jem8.js +1 -0
- package/dist/assets/authoring-CgcOFhGS.js +1 -0
- package/dist/assets/autoplay.service-BZBGNSvt.js +1 -0
- package/dist/assets/axe-LkjAB6Lv.js +30 -0
- package/dist/assets/babylon-authoring-adapter-CL02gWDn.js +1 -0
- package/dist/assets/binding-Bmxqznjk.js +1 -0
- package/dist/assets/binding-identity-DcTpbvyg.js +1 -0
- package/dist/assets/binding-resolver-Dsh-6Vor.js +2 -0
- package/dist/assets/blender-emscripten-engine-9ZIRYNhe.js +2 -0
- package/dist/assets/blender-node-editor.document-iIDkB9sI.js +1 -0
- package/dist/assets/blender-properties-tab-C5CyPydi.js +3 -0
- package/dist/assets/blender-runtime-host-BpBwGv7r.js +4 -0
- package/dist/assets/blender-runtime-skin-DyQ9B6CR.js +7140 -0
- package/dist/assets/blender-runtime.document-lIYhhPtv.js +8 -0
- package/dist/assets/blender-timeline.document-77fx96N7.js +1 -0
- package/dist/assets/blender-uv-editor.document-fsT7B4gV.js +1 -0
- package/dist/assets/blender-version.status-o6dBm3n6.js +1 -0
- package/dist/assets/blender-wali-engine-wTOcrOMC.js +2 -0
- package/dist/assets/blender.command-BtJeWk-A.js +1 -0
- package/dist/assets/blender.keymap-GAQgeklK.js +1 -0
- package/dist/assets/blender.status-ujwGU6dU.js +1 -0
- package/dist/assets/blender.style-Dcem5f_T.js +1 -0
- package/dist/assets/board-guides-DziKSTss.js +1 -0
- package/dist/assets/body-marks-h_xDxiDE.js +1 -0
- package/dist/assets/bridge.command-o5gDNEwa.js +3 -0
- package/dist/assets/browserAll-DeWblVez.js +1 -0
- package/dist/assets/build-profiles.document-kW8iw8Xj.js +2 -0
- package/dist/assets/build-progress.status-BNRLytg2.js +1 -0
- package/dist/assets/build-session-C_sg3CEn.js +9 -0
- package/dist/assets/build.action-lYjTLb7K.js +1 -0
- package/dist/assets/build.command-DIGgUPU_.js +1 -0
- package/dist/assets/build.header-CKajx5U3.js +1 -0
- package/dist/assets/build.menu-BdU0QXny.js +1 -0
- package/dist/assets/build.service-CbBAyeu3.js +1 -0
- package/dist/assets/bus-mixer-CGfWDP3C.js +1 -0
- package/dist/assets/camera-KEsKvOL7.js +1 -0
- package/dist/assets/camera-runtime.inspector-B7unX4g1.js +1 -0
- package/dist/assets/canvas-entry-runtime-SfBxaR9M.js +2 -0
- package/dist/assets/capability-coverage-Czas4C18.js +7 -0
- package/dist/assets/chrome-trace-YZHMz60-.js +1 -0
- package/dist/assets/client-DNXj_opT.js +25 -0
- package/dist/assets/clip-planes-CnAI6DZn.js +1 -0
- package/dist/assets/collaboration-presence-DLoZ7EA3.js +1 -0
- package/dist/assets/collider-Bw0mXlsW.js +1 -0
- package/dist/assets/collider-dimensions-9xoFADXN.js +1 -0
- package/dist/assets/collision-system-DpNUJRJ3.js +1 -0
- package/dist/assets/command-results-CUQD49AB.js +1 -0
- package/dist/assets/component-board-registry-DrIa2csL.js +1 -0
- package/dist/assets/component-board.service-DCwcUssB.js +2 -0
- package/dist/assets/component-board.service-DidCyM4O.js +2 -0
- package/dist/assets/component-verbs.command-7xzfjGMZ.js +1 -0
- package/dist/assets/component-verbs.service-Bv9jId3q.js +1 -0
- package/dist/assets/config-CEZk921y.js +6 -0
- package/dist/assets/configurations-DTBMdaTL.js +1 -0
- package/dist/assets/connection.status-BifnQdOs.js +1 -0
- package/dist/assets/console-bridge-CHcb-xk5.js +1 -0
- package/dist/assets/constraint-De8f1Uiq.js +1 -0
- package/dist/assets/constraints.inspector-B9U9Yj-u.js +1 -0
- package/dist/assets/countdown-timer-CUm74dom.js +1 -0
- package/dist/assets/coverage.service-VTX5Mcsx.js +3 -0
- package/dist/assets/crash-null-boundary-v3a0uEgw.js +1 -0
- package/dist/assets/create-runtime-CVCc1BDx.js +1 -0
- package/dist/assets/curve-7Q79VgU4.js +1 -0
- package/dist/assets/data-asset-4hjS642k.js +5 -0
- package/dist/assets/data-check-core-CQEjuFyt.js +1 -0
- package/dist/assets/data-ref-CQI28C0D.js +1 -0
- package/dist/assets/debug-bridge-CCohG-d-.js +1 -0
- package/dist/assets/debug-registry-Dgvitx8M.js +1 -0
- package/dist/assets/defaults-DKiBJCPN.js +1 -0
- package/dist/assets/deferred-commands-CEMmvL47.js +1 -0
- package/dist/assets/deferred-ingest-play-DCJi_Pgu.js +2 -0
- package/dist/assets/design-time-layers-wYgOTgni.js +1 -0
- package/dist/assets/design-time-mount-registry-DUpXCg1U.js +1 -0
- package/dist/assets/design-time-mount.service-BzY21e1F.js +2 -0
- package/dist/assets/design-time-react-mount-DM9WLrF2.js +1 -0
- package/dist/assets/dev-build-gDYrq68M.js +1 -0
- package/dist/assets/directional-shadow-fit-BVkOKAv2.js +1 -0
- package/dist/assets/document-preview-three-Kbg2GCLm.js +1 -0
- package/dist/assets/dom-authoring-adapter-CY8C7f4T.js +1 -0
- package/dist/assets/draco3d-BBUTcNkz.js +1 -0
- package/dist/assets/draco_decoder-DsQ12WqX.wasm +0 -0
- package/dist/assets/draco_encoder-2Tcju8Ns.wasm +0 -0
- package/dist/assets/edit-mode-audio.service-Bzetwd5B.js +1 -0
- package/dist/assets/edit-mode-authoring-B47TfLqu.js +1 -0
- package/dist/assets/edit-mode-networking.service-YCX6RRb_.js +1 -0
- package/dist/assets/editor-api-BoJIcyZG.js +1 -0
- package/dist/assets/editor-port-C_FeBdeV.js +1 -0
- package/dist/assets/editor-presentation-activity-C7SNSmTd.js +1 -0
- package/dist/assets/entry-adjudication-Cq8Yeb74.js +1 -0
- package/dist/assets/environment-capture-7himRh2L.js +1 -0
- package/dist/assets/esbuild-BHljloGq.wasm +0 -0
- package/dist/assets/events-156d8d12.esm-ErOhDXXB.js +36 -0
- package/dist/assets/extend-B-eOccUm.js +36 -0
- package/dist/assets/extends-CF3RwP-h.js +1 -0
- package/dist/assets/eyedropper-session-bjPXnfeX.js +1 -0
- package/dist/assets/fflate.module-DPuTF8aG.js +6 -0
- package/dist/assets/filmic-srgb-Ct35FIH6.lut +0 -0
- package/dist/assets/first-party-audio-system-DxnGJOER.js +1 -0
- package/dist/assets/first-party-navigation-system-CL5Bquub.js +1 -0
- package/dist/assets/fork-menu-BoVyw2Wu.js +1 -0
- package/dist/assets/frame-debugger-store-D1Mf_5up.js +1 -0
- package/dist/assets/frame-delta-D2nsw_Ht.js +1 -0
- package/dist/assets/frame-pacing-D5acoOzO.js +1 -0
- package/dist/assets/frame-selector-cache-cCeUbcjG.js +1 -0
- package/dist/assets/game-DHOZVb-7.js +1 -0
- package/dist/assets/game-contract-seams-a5YXejOu.js +1 -0
- package/dist/assets/game-css-scope-transform-Eng4wS8E.js +33 -0
- package/dist/assets/game-document.service-DbRfx2V0.js +1 -0
- package/dist/assets/game-eval.command-D-7Dxbj_.js +2 -0
- package/dist/assets/game-input-seams-CIQdetRw.js +1 -0
- package/dist/assets/game-loop-CZvXlY00.js +1 -0
- package/dist/assets/game-module-access-B2mFxv-i.js +1 -0
- package/dist/assets/game.layout-CBASrvQu.js +1 -0
- package/dist/assets/gameplay-export-BoKXm51x.js +1 -0
- package/dist/assets/gameplay-replay-e5umMlXv.js +1 -0
- package/dist/assets/gameplay-rng-trap-CTNhm-UW.js +3 -0
- package/dist/assets/gameplay.command-DxcVYX6F.js +1 -0
- package/dist/assets/generation-DhwCUHPf.css +1 -0
- package/dist/assets/generation-jobs-BQrXbGp_.js +1 -0
- package/dist/assets/generation.service-CDIgObuw.js +1 -0
- package/dist/assets/generations-DzUogZsM.js +1 -0
- package/dist/assets/generations.status-CgOUBCum.js +1 -0
- package/dist/assets/hierarchy-marks-BLPfSIym.js +1 -0
- package/dist/assets/host-pointer-DbGSCjE9.js +1 -0
- package/dist/assets/hosted-asset-materialization-CiIvWkGU.js +2 -0
- package/dist/assets/ibl-override-material-BlmCxFKq.js +6 -0
- package/dist/assets/index-96FBF1Oj.js +1 -0
- package/dist/assets/index-BAWkB0dv.js +1 -0
- package/dist/assets/index-BDnS2b6S.js +1 -0
- package/dist/assets/index-BHp07vN0.js +2 -0
- package/dist/assets/index-BMxv2MNV.js +1 -0
- package/dist/assets/index-BP6wv2A0.js +5 -0
- package/dist/assets/index-BcCBqgM_.js +952 -0
- package/dist/assets/index-Bge9JUr6.js +1 -0
- package/dist/assets/index-BjTCPEQ7.js +134 -0
- package/dist/assets/index-BncK9THk.js +1 -0
- package/dist/assets/index-CJbYy-CF.js +3 -0
- package/dist/assets/index-CVCb_ImQ.js +1 -0
- package/dist/assets/index-CZd9o7Lu.js +1 -0
- package/dist/assets/index-CanA16PU.js +2 -0
- package/dist/assets/index-CinJrH5C.js +9 -0
- package/dist/assets/index-CtzuWnCS.js +1 -0
- package/dist/assets/index-D2fNXpHa.css +1 -0
- package/dist/assets/index-DUpHH6JR.js +3120 -0
- package/dist/assets/index-DUqP1RMl.js +1 -0
- package/dist/assets/index-D_NuPfjr.js +9 -0
- package/dist/assets/index-Da9JhEvW.js +25 -0
- package/dist/assets/index-DgapqSPi.js +7 -0
- package/dist/assets/index-FUuS4qwW.js +562 -0
- package/dist/assets/index-GIL7oGEO.js +4894 -0
- package/dist/assets/index-IEjydI9d.js +1 -0
- package/dist/assets/index-OrYXPk3Z.js +487 -0
- package/dist/assets/index-V1R-e5Bd.js +1 -0
- package/dist/assets/index-bQE2NA0D.js +1 -0
- package/dist/assets/index-gHZae-lw.js +13 -0
- package/dist/assets/index-mjWQmGhM.js +1 -0
- package/dist/assets/index-nmcBqr7Y.js +1 -0
- package/dist/assets/inference-diagnostics-Dhmtfbq_.js +1 -0
- package/dist/assets/ingest-BbYMC2vQ.js +1 -0
- package/dist/assets/ingest-boot-viewport-D5rI_Kk_.js +1 -0
- package/dist/assets/ingest-siblings-Bop2kqVl.js +1 -0
- package/dist/assets/ingest-source-persistence-C_6Hiyra.js +1 -0
- package/dist/assets/ingest.service-BTDnQfM1.js +1 -0
- package/dist/assets/input-manager-DH_hGW6d.js +1 -0
- package/dist/assets/input-router-BNQvtIqw.js +1 -0
- package/dist/assets/inspect-BZfi3mmo.js +1 -0
- package/dist/assets/inspection-CObLhnrs.js +1 -0
- package/dist/assets/instance-fork-actions-D3sRzS3K.js +1 -0
- package/dist/assets/instances.command-D6UkZNO8.js +1 -0
- package/dist/assets/instruments-CKR02Y8I.js +1 -0
- package/dist/assets/json-history-resource-BbxllWfV.js +1 -0
- package/dist/assets/jsx-runtime-DPjLkJKQ.js +9 -0
- package/dist/assets/light-D-_wsKTq.js +1 -0
- package/dist/assets/light-camera-factory-CWbbe9gI.js +1 -0
- package/dist/assets/lil-gui.module.min-BF55BEwA.js +10 -0
- package/dist/assets/live-behaviors-Bxq49Maz.js +1 -0
- package/dist/assets/live-gesture-lock-DJbrjOqf.js +1 -0
- package/dist/assets/loader-CaF_I7Yt.js +1 -0
- package/dist/assets/logger-Dqis-7W1.js +1 -0
- package/dist/assets/loop-gate-report-N52EWFGD.js +1 -0
- package/dist/assets/matcap-texture-CVfalpWT.js +1 -0
- package/dist/assets/material-CpAdjDxn.js +1 -0
- package/dist/assets/material-factory-Bz6h__6g.js +1 -0
- package/dist/assets/mesh-B3WPtNKO.js +1 -0
- package/dist/assets/mesh-shadow-CZnXrw_l.js +1 -0
- package/dist/assets/mikktspace.module-DO88SLib.js +1 -0
- package/dist/assets/model-asset-sections-CFvvihfx.css +1 -0
- package/dist/assets/model-asset-sections.service-CHhFS3ZX.js +1 -0
- package/dist/assets/model.layout-BJUEQYUI.js +1 -0
- package/dist/assets/models.finder-G2jQgIRu.js +1 -0
- package/dist/assets/module-mode-DVBLT9d-.js +2 -0
- package/dist/assets/mount-canvas-ingest-root-DDuAWf_C.js +2 -0
- package/dist/assets/mount-dom-ingest-root-D_EiBgpn.js +2 -0
- package/dist/assets/mount-game-6t9cKNo4.js +1 -0
- package/dist/assets/mount-ingest-root-glv2SSWf.js +2 -0
- package/dist/assets/mount-manifest-CGVxhmAw.js +1 -0
- package/dist/assets/mount-readiness-Ds0HvvLH.js +4 -0
- package/dist/assets/mount-three-ingest-root-hrUt9VVU.js +1 -0
- package/dist/assets/mounted-authoring-Dmg5xmhP.js +1 -0
- package/dist/assets/mounted-story-viewport-source-DjP6RA9U.js +1 -0
- package/dist/assets/native-debug-module-CWicoSGD.js +1 -0
- package/dist/assets/native-entry-surface-BE8LJNdu.js +1 -0
- package/dist/assets/navigation-CIiCx-SM.js +1 -0
- package/dist/assets/navmesh-workflow-store-Cmnm57TB.js +1 -0
- package/dist/assets/navmesh.menu-CAKiH8PW.js +1 -0
- package/dist/assets/navmesh.service-jgDWlgj1.js +1 -0
- package/dist/assets/network.utility-CEu5nHf7.js +1 -0
- package/dist/assets/object-marks-DwvIEBOK.js +1 -0
- package/dist/assets/object3d-authoring-subject-CH5sI2oP.js +1 -0
- package/dist/assets/output-DK8waum9.js +195 -0
- package/dist/assets/particles-Y626p22p.js +1 -0
- package/dist/assets/particles-factory-DnLOHXT8.js +1 -0
- package/dist/assets/pasteboard-materialize-BqSS4QzV.js +20 -0
- package/dist/assets/pasteboard.action-DU3UHtJG.js +2 -0
- package/dist/assets/performance-profiler-D_Jey87L.js +1 -0
- package/dist/assets/physics-registry-B2Jkp8e6.js +1 -0
- package/dist/assets/physics-registry-CUB9cT9p.js +1 -0
- package/dist/assets/pixi-authoring-adapter-CjibysC3.js +1 -0
- package/dist/assets/pixi-live-write-target-DuWydlWb.js +1 -0
- package/dist/assets/pixi-primitive-DlWbUPN9.js +1 -0
- package/dist/assets/pixi-react-root-factory-DYsznYRQ.js +1 -0
- package/dist/assets/pixi-story-model-DNkfnWUV.js +1 -0
- package/dist/assets/pixi-transform-channels-VjdohT11.js +1 -0
- package/dist/assets/play-mode-BFU2PCkG.js +22 -0
- package/dist/assets/play.command-BpqqLqkq.js +2 -0
- package/dist/assets/playtest-BXIL1JEF.js +1 -0
- package/dist/assets/pose-guard-6Osb2cFu.js +1 -0
- package/dist/assets/presentation-BPP5pXeQ.js +1 -0
- package/dist/assets/product-DFhyARJj.js +1 -0
- package/dist/assets/profiler.action-CaXJDp3t.js +1 -0
- package/dist/assets/profiler.menu-BIMF6Bi4.js +1 -0
- package/dist/assets/profiler.utility-BExw9wBO.js +1 -0
- package/dist/assets/project-authoring-session-Bnt6icLr.js +2 -0
- package/dist/assets/project-provenance-BoP3nrle.js +1 -0
- package/dist/assets/prompt-labels-DSMdM2_B.js +1 -0
- package/dist/assets/properties-bone-constraints.inspector-ByT6p7S-.js +1 -0
- package/dist/assets/properties-bone.inspector-z4qJwKO5.js +1 -0
- package/dist/assets/properties-collection.inspector-D0_3ijWU.js +1 -0
- package/dist/assets/properties-constraints.inspector-CESzjuls.js +1 -0
- package/dist/assets/properties-data.inspector-hG8Wgyzb.js +1 -0
- package/dist/assets/properties-material.inspector-CzY0JCQ6.js +1 -0
- package/dist/assets/properties-modifiers.inspector-3dDhwf7g.js +1 -0
- package/dist/assets/properties-object.inspector-CiarfxkT.js +1 -0
- package/dist/assets/properties-output.inspector-DKJxmKSD.js +1 -0
- package/dist/assets/properties-particles.inspector-CCEdYWGm.js +1 -0
- package/dist/assets/properties-physics.inspector-B2c0KUyA.js +1 -0
- package/dist/assets/properties-render.inspector-Bcm0HLRW.js +1 -0
- package/dist/assets/properties-scene.inspector-PIM_eTb_.js +1 -0
- package/dist/assets/properties-texture.inspector-CgFlnyr8.js +1 -0
- package/dist/assets/properties-view-layer.inspector-DGjF_Aqo.js +1 -0
- package/dist/assets/properties-world.inspector-CrMvaRvB.js +1 -0
- package/dist/assets/r3f-design-session-D-4yyDO9.js +2 -0
- package/dist/assets/r3f-physics-binding-BBo8oma9.js +1 -0
- package/dist/assets/r3f-root-factory-z9llD1OU.js +1 -0
- package/dist/assets/r3f-source-authoring-adapter-w6Bc60K-.js +13 -0
- package/dist/assets/rapier-physics-adapter-CaZqWLu0.js +1 -0
- package/dist/assets/rapier-physics-bridge-CMoeVo3Y.js +1 -0
- package/dist/assets/react-18-By2b4xR9.js +1 -0
- package/dist/assets/react-inspector.service-B_neRnSK.js +1 -0
- package/dist/assets/react-root-CEz5NTck.js +1 -0
- package/dist/assets/react-story-board-BDDwiE2H.js +1 -0
- package/dist/assets/react-three-fiber.esm-CycrbDlA.js +1 -0
- package/dist/assets/react-three-rapier.esm-CEfKpvxT.js +1 -0
- package/dist/assets/react-world-authoring-adapter-DmrwM3py.js +1 -0
- package/dist/assets/realm-services-CobQsq_X.js +1 -0
- package/dist/assets/rebind-controller-Dtq19Vb3.js +1 -0
- package/dist/assets/recast-navigation.wasm-compat-Dsoa_MD-.js +1 -0
- package/dist/assets/reflection-probe-Don-M3Fj.js +1 -0
- package/dist/assets/reflection-probe-capture.inspector-CmFUoJCx.js +1 -0
- package/dist/assets/register-render-vitals-BiZk29b2.js +1 -0
- package/dist/assets/registry-02YZjMNp.js +1 -0
- package/dist/assets/relative-path-guard-GiM7Lsz8.js +1 -0
- package/dist/assets/render-audio-control-vMRlePWb.js +1 -0
- package/dist/assets/render-batch-system-0vq7p0VC.js +1 -0
- package/dist/assets/render-census-BrQX_CXv.js +1 -0
- package/dist/assets/render-control-Df3yTiyr.js +1 -0
- package/dist/assets/render-env-D2IV2x5k.js +1 -0
- package/dist/assets/render-features-CPQ_e568.js +1 -0
- package/dist/assets/render-seed-DF4JHy7P.js +1 -0
- package/dist/assets/render-settings-Bw4W9SYF.js +1 -0
- package/dist/assets/render-vitals-BZ5HtvMi.js +1 -0
- package/dist/assets/renderer-config-BqG4O8i9.js +1 -0
- package/dist/assets/resolve-three-SZE_WWUM.js +702 -0
- package/dist/assets/root-seam-contract-Z0VWX3Bk.js +1 -0
- package/dist/assets/rrweb-Cd2ifIRP.js +142 -0
- package/dist/assets/run-ticks-settled-C4ksViyA.js +1 -0
- package/dist/assets/runtime-inspection-l2iFQSsg.js +1 -0
- package/dist/assets/scene-capture-BQKzU0NT.js +1 -0
- package/dist/assets/scene-capture-CGYF-Viw.js +1 -0
- package/dist/assets/scene-document.service-qkDjUrlP.js +2 -0
- package/dist/assets/scene-framing-Cat0GtyJ.js +1 -0
- package/dist/assets/scene-index-B6BZOHMk.js +1 -0
- package/dist/assets/scene-query-C7_N-TpI.js +1 -0
- package/dist/assets/schema-kl9-2B_J.js +1 -0
- package/dist/assets/sculpt.layout-zJF55yCR.js +1 -0
- package/dist/assets/seeded-random-i3mtgBKZ.js +1 -0
- package/dist/assets/session-CZ5JPg-z.js +4877 -0
- package/dist/assets/setup-audio-S8GQF91f.js +1 -0
- package/dist/assets/setup-particles-GCXlnkj_.js +1 -0
- package/dist/assets/setup-physics-BeZ7-LKD.js +1 -0
- package/dist/assets/setup-renderer-DVXaSGin.js +1587 -0
- package/dist/assets/shading.layout-DULYZV6M.js +1 -0
- package/dist/assets/sim-clock-CLflx7kg.js +1 -0
- package/dist/assets/sky-precompute-worker-ChN7J87v.js +1 -0
- package/dist/assets/soft-particle-depth-DGvfQDi1.js +1 -0
- package/dist/assets/source-object3d-authoring-adapter-B-L6Ha6f.js +1 -0
- package/dist/assets/source-persistence-backend-C-aR-B_Y.js +1 -0
- package/dist/assets/spark-renderer-lifecycle-ynWESJcv.js +1 -0
- package/dist/assets/spark.module-4pXQoz5d.js +12120 -0
- package/dist/assets/stage-invalidation-DBg3C3Ta.js +1 -0
- package/dist/assets/stage-keyboard-n-5kKH-m.js +1 -0
- package/dist/assets/stage-overlay-set-B9zp2sLB.js +1 -0
- package/dist/assets/stage-presence-markers-DiGI6A45.js +1 -0
- package/dist/assets/standard-viewport-dressing-CzjAe_0A.js +7 -0
- package/dist/assets/state-bridge-DLP1jLRW.js +1 -0
- package/dist/assets/state-watch.action-BOvQR2qt.js +1 -0
- package/dist/assets/state-watch.menu-CNLvDeeY.js +1 -0
- package/dist/assets/state-watch.utility-Bg1tTTQU.js +1 -0
- package/dist/assets/static-batch-advisor-B13QEH7d.js +1 -0
- package/dist/assets/stats.module-BL02l9NC.js +1 -0
- package/dist/assets/story-arg-descriptors-Ek86ExX7.js +1 -0
- package/dist/assets/story-capture-_gC8dXV-.js +1 -0
- package/dist/assets/story-documents--TDLaPeL.js +3 -0
- package/dist/assets/story-documents.service-BiS_YbNQ.js +1 -0
- package/dist/assets/story-documents.service-CxOPYJ2j.js +1 -0
- package/dist/assets/story-media-presence-BHzk2IV5.js +1 -0
- package/dist/assets/story-mount-turn-DFRTj5hi.js +1 -0
- package/dist/assets/story-pixi-preview-BUrOJZXS.js +1 -0
- package/dist/assets/story-presentation-j2AVN-mK.js +1 -0
- package/dist/assets/story-three-preview-BHEDZzcl.js +2 -0
- package/dist/assets/structural-ids-Dc-7rEwi.js +1 -0
- package/dist/assets/structural-signature-0w-i_ats.js +1 -0
- package/dist/assets/surface-content-Dg9Kkazf.js +1 -0
- package/dist/assets/surface-state-DaxyruCj.js +3 -0
- package/dist/assets/system-adapters-rIC8FSGP.js +1 -0
- package/dist/assets/system-runner-DkOjxEBt.js +1 -0
- package/dist/assets/system-slot-E2mEdiih.js +1 -0
- package/dist/assets/team-playtest.service-DqOinFVA.js +1 -0
- package/dist/assets/texture.layout-DASpHVht.js +1 -0
- package/dist/assets/three-CDSueJyJ.js +1 -0
- package/dist/assets/three-authoring-adapter-CmSQ3Vui.js +1 -0
- package/dist/assets/three-authoring.service-iuHLwtf1.js +2 -0
- package/dist/assets/three-ingest-runtime-QzDYk6tU.js +1 -0
- package/dist/assets/three-projection-core-BmKMZ-nf.js +1 -0
- package/dist/assets/three-viewport-presentation-QBQpSdMh.js +1 -0
- package/dist/assets/three.module-D396a9Mn.js +3840 -0
- package/dist/assets/three.quarks.esm-B1C61jGo.js +1039 -0
- package/dist/assets/tools-B_NJsk05.js +1 -0
- package/dist/assets/transform-writer-BhBBTx33.js +1 -0
- package/dist/assets/transport.header-B-6HQlU2.js +1 -0
- package/dist/assets/trigger-volume-BNK2XzPL.js +1 -0
- package/dist/assets/tuples-CIQ4Bn1U.js +1 -0
- package/dist/assets/tween.module-DciWpAG6.js +1 -0
- package/dist/assets/ui-board-document-Bwtt--xp.js +2 -0
- package/dist/assets/unexported-game-trap-Dm1JYKHy.js +2 -0
- package/dist/assets/unmanaged-root-detector-B8CpbkSN.js +2 -0
- package/dist/assets/upstream-pin-BdgRH6ID.js +1 -0
- package/dist/assets/use-data-Dzq-MytE.js +1 -0
- package/dist/assets/use-live-actor-state-DErbWQWF.js +1 -0
- package/dist/assets/use-selection-DbR73-xd.js +1 -0
- package/dist/assets/user-data-BB2Of6Ht.js +1 -0
- package/dist/assets/utility-view-state-BHypxA33.js +1 -0
- package/dist/assets/uv-editing.layout-BEKHxmHw.js +1 -0
- package/dist/assets/vgai-shared-fontawesome-CU65D4Ij.js +1 -0
- package/dist/assets/vgai-shared-jsx-dev-runtime-DFDKL7fx.js +1 -0
- package/dist/assets/vgai-shared-jsx-runtime-DIqBpTut.js +1 -0
- package/dist/assets/vgai-shared-react-BT7rMc2H.js +1 -0
- package/dist/assets/vgai-shared-react-dom-DFajMqMT.js +1 -0
- package/dist/assets/vgai-shared-react-dom-client-S0ozfl6_.js +1 -0
- package/dist/assets/vgai-shared-three-Bc5PvpLM.js +1 -0
- package/dist/assets/viewport-pick-context-DkawXbEi.js +1 -0
- package/dist/assets/viewport-root-presentation-CWsE56K6.js +1 -0
- package/dist/assets/viewport-shading-BuA88e_A.js +1 -0
- package/dist/assets/viewport-shading-boundary-B_-_gABg.js +82 -0
- package/dist/assets/viewport-surface-status-B3om4Kcf.js +1 -0
- package/dist/assets/vision_bundle-DX0dWqEa.js +15 -0
- package/dist/assets/voxel-surface-DtcsSWRL.js +1 -0
- package/dist/assets/wav-encode-D31zWF6O.js +1 -0
- package/dist/assets/webgl-frame-capture-FlF9zQmW.js +1 -0
- package/dist/assets/webgl-gpu-timer-D3YX7RaD.js +1 -0
- package/dist/assets/webworkerAll-CM2o_dnz.js +1 -0
- package/dist/assets/worker-UrMcrc5_.js +2 -0
- package/dist/assets/world-documents-147tiFZe.js +1 -0
- package/dist/assets/world-root-stage-binding-vwTrtBz6.js +1 -0
- package/dist/assets/world-state-BWG-IcOd.js +1 -0
- package/dist/assets/writer-B-KovzkA.js +5 -0
- package/dist/assets/xstate-animation-binding-Brd0NST6.js +1 -0
- package/dist/assets/xstate-animation-meta-Q3u9zh_m.js +1 -0
- package/dist/assets/xstate-behavior.action-B8UluFBK.js +1 -0
- package/dist/assets/xstate-behavior.document-CKAsE45I.js +1 -0
- package/dist/assets/xstate-behavior.inspector-vJJyuifc.js +1 -0
- package/dist/assets/xstate-behavior.menu-BXbPICIh.js +1 -0
- package/dist/assets/xstate-inspection-BsZv8LS9.js +1 -0
- package/dist/vgai-shared-react.json +10 -0
- package/dist/vgai-shared-three.json +3 -0
- package/dist-node/cli.js +9320 -0
- package/dist-node/create.js +3239 -0
- package/package.json +91 -0
- package/presets.mjs +2 -0
- package/src/contributions.d.ts +4 -0
- package/src/index.ts +38 -0
- package/starter/cube.blend +0 -0
- package/starter/cube.py +81 -0
- package/template/.agents/references/project-manual.md +341 -0
- package/template/.agents/skills/editor/SKILL.md +53 -0
- package/template/.agents/skills/editor/agents/openai.yaml +4 -0
- package/template/.agents/skills/editor/references/editor-control.md +363 -0
- package/template/.agents/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.agents/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.agents/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.agents/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.claude/skills/editor/SKILL.md +53 -0
- package/template/.claude/skills/editor/agents/openai.yaml +4 -0
- package/template/.claude/skills/editor/references/editor-control.md +363 -0
- package/template/.claude/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.claude/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.claude/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.claude/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.github/copilot-instructions.md +6 -0
- package/template/.github/skills/editor/SKILL.md +53 -0
- package/template/.github/skills/editor/agents/openai.yaml +4 -0
- package/template/.github/skills/editor/references/editor-control.md +363 -0
- package/template/.github/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.github/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.github/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.github/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.mcp.json +12 -0
- package/template/.vgai/assets.json +1 -0
- package/template/.vgai/provenance.json +4 -0
- package/template/.volter/tracker/validation/.preset.base.mts +178 -0
- package/template/.volter/tracker/validation/preset.mts +186 -0
- package/template/.volter/tracker/visualizer/.extension.base.tsx +14 -0
- package/template/.volter/tracker/visualizer/extension.tsx +14 -0
- package/template/.volter/tracker-config.json +17 -0
- package/template/AGENTS.md +176 -0
- package/template/CLAUDE.md +1 -0
- package/template/DEVLOG.md +20 -0
- package/template/IDIOMS.md +118 -0
- package/template/LICENSE +30 -0
- package/template/README.md +83 -0
- package/template/ROADMAP.md +20 -0
- package/template/asset-manifest.json +3 -0
- package/template/check-idioms.ts +1533 -0
- package/template/index.html +18 -0
- package/template/manifest-entry-modules-plugin.ts +53 -0
- package/template/package.json +62 -0
- package/template/public/jsm/libs/basis/basis_transcoder.js +19 -0
- package/template/public/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/template/public/jsm/libs/draco/gltf/draco_decoder.js +33 -0
- package/template/public/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/template/public/jsm/libs/draco/gltf/draco_encoder.js +33 -0
- package/template/public/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
- package/template/public/shaders/daylight-sky.frag.glsl +15 -0
- package/template/public/shaders/daylight-sky.vert.glsl +7 -0
- package/template/scripts/patch-drei-stats-gl.mjs +35 -0
- package/template/server/colyseus-setup.ts +111 -0
- package/template/server/loopback.ts +76 -0
- package/template/server/main.ts +78 -0
- package/template/server/rooms/arena-room.ts +488 -0
- package/template/server/rooms/game-room.ts +274 -0
- package/template/server/rooms.ts +15 -0
- package/template/server/tsconfig.json +19 -0
- package/template/src/bot/QaTester.tsx +35 -0
- package/template/src/bot/behaviors.ts +203 -0
- package/template/src/bot/bot-station.ts +192 -0
- package/template/src/bot/tester-run.ts +238 -0
- package/template/src/bot/tester-station.ts +193 -0
- package/template/src/components/environment/DaylightSky.tsx +54 -0
- package/template/src/components/environment/Ground.tsx +129 -0
- package/template/src/components/environment/SceneAtmosphere.tsx +14 -0
- package/template/src/components/environment/SoftGroundShadow.tsx +62 -0
- package/template/src/components/environment/SunShadowFit.tsx +141 -0
- package/template/src/contributions/README.md +98 -0
- package/template/src/contributions/analytics.analytics.tsx +26 -0
- package/template/src/contributions/data.document.tsx +35 -0
- package/template/src/contributions/pages.finder.ts +61 -0
- package/template/src/contributions/tester.inspector.tsx +64 -0
- package/template/src/contributions/use-game-modules.ts +80 -0
- package/template/src/data/README.md +17 -0
- package/template/src/input.ts +97 -0
- package/template/src/lib/audio/capability.json +4 -0
- package/template/src/lib/audio/sfx.ts +255 -0
- package/template/src/lib/react-root/capability.json +4 -0
- package/template/src/lib/react-root/index.ts +20 -0
- package/template/src/lib/react-root/react-root-adapter.tsx +57 -0
- package/template/src/lib/reflections/ReflectionProbe.tsx +201 -0
- package/template/src/lib/reflections/capability.json +4 -0
- package/template/src/lib/reflections/index.ts +19 -0
- package/template/src/lib/reflections/probe-controller.ts +75 -0
- package/template/src/lib/reflections/reflection-probe-registry.ts +402 -0
- package/template/src/lib/reflections/volume-reflection-material.ts +416 -0
- package/template/src/lib/static-batch/Frozen.tsx +91 -0
- package/template/src/lib/static-batch/capability.json +4 -0
- package/template/src/lib/static-batch/freeze.ts +579 -0
- package/template/src/lib/static-batch/index.ts +44 -0
- package/template/src/lib/static-batch/mutation-watch.ts +149 -0
- package/template/src/lib/static-batch/shadow-cache.ts +171 -0
- package/template/src/main.ts +63 -0
- package/template/src/manifest-entry-modules.d.ts +3 -0
- package/template/src/prefabs/HeroBox.stories.tsx +23 -0
- package/template/src/prefabs/HeroBox.tsx +35 -0
- package/template/src/scenes/MainScene.tsx +77 -0
- package/template/src/world.tsx +87 -0
- package/template/tsconfig.json +35 -0
- package/template/tsconfig.node.json +32 -0
- package/template/tsconfig.tools.json +22 -0
- package/template/validate-asset-content.ts +27 -0
- package/template/validate-assets.ts +60 -0
- package/template/validate-manifest.ts +55 -0
- package/template/vgai.adapter.ts +76 -0
- package/template/vgai.project.json +24 -0
- package/template/vite.config.ts +247 -0
- package/template-dotfiles/gitignore +63 -0
- package/workbench/src/media/game-cover.css +83 -0
- package/workbench/src/product.contribution.ts +188 -0
- package/workbench/src/vgaiGameSkew.ts +276 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Vec3Schema as a}from"./tuples-CIQ4Bn1U.js";import{c7 as c,r as i,L as e,c5 as o,t as n,c4 as s,v as t,u as p}from"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";const b=i({type:t("ConstantValue"),value:e()}),h=i({type:t("IntervalValue"),a:e(),b:e()}),u=i({p0:e(),p1:e(),p2:e(),p3:e()}),f=i({type:t("PiecewiseBezier"),functions:n(i({function:u,start:e()}))}),r=c("type",[b,h,f]).describe("Numeric value: constant, random interval, or bezier curve"),l=i({r:e(),g:e(),b:e(),a:e()}),v=i({r:e(),g:e(),b:e()}),S=i({type:t("CLinearFunction"),subType:t("Color"),keys:n(i({value:v,pos:e()}))}),y=i({type:t("CLinearFunction"),subType:t("Number"),keys:n(i({value:e(),pos:e()}))}),g=i({type:t("ConstantColor"),color:l}),C=i({type:t("ColorRange"),a:l,b:l}),d=i({type:t("Gradient"),color:S,alpha:y}),w=i({type:t("RandomColorBetweenGradient"),gradient1:d,gradient2:d}),m=c("type",[g,C,d,w]).describe("Color generator: constant, range, gradient, or random between gradients"),B=i({type:t("point")}),L=i({type:t("sphere"),radius:e().optional().describe("Sphere radius"),arc:e().optional().describe("Arc angle in radians (2π = full sphere)"),thickness:e().optional().describe("Shell thickness 0–1 (1 = solid, 0 = surface only)")}),O=i({type:t("hemisphere"),radius:e().optional().describe("Hemisphere radius"),arc:e().optional().describe("Arc angle in radians"),thickness:e().optional().describe("Shell thickness 0–1")}),x=i({type:t("cone"),radius:e().optional().describe("Cone base radius"),arc:e().optional().describe("Arc angle in radians"),thickness:e().optional().describe("Shell thickness 0–1"),angle:e().optional().describe("Cone opening angle in radians")}),F=i({type:t("circle"),radius:e().optional().describe("Circle radius"),arc:e().optional().describe("Arc angle in radians"),thickness:e().optional().describe("Ring thickness 0–1")}),P=i({type:t("donut"),radius:e().optional().describe("Donut major radius"),arc:e().optional().describe("Arc angle in radians"),thickness:e().optional().describe("Ring thickness 0–1"),donutRadius:e().optional().describe("Donut tube (minor) radius")}),R=i({type:t("rectangle"),width:e().optional().describe("Rectangle width"),height:e().optional().describe("Rectangle height"),thickness:e().optional().describe("Extrusion depth 0–1")}),T=i({type:t("grid"),width:e().optional().describe("Grid total width"),height:e().optional().describe("Grid total height"),column:e().int().optional().describe("Number of columns"),row:e().int().optional().describe("Number of rows")}),G=c("type",[B,L,O,x,F,P,R,T]).describe("Particle emitter shape"),k=i({type:t("ApplyForce"),direction:a.describe("Force direction vector"),magnitude:r.describe("Force magnitude")}),E=i({type:t("ColorOverLife"),color:m.describe("Color curve over particle lifetime")}),z=i({type:t("SizeOverLife"),size:r.describe("Size curve over particle lifetime")}),A=i({type:t("SpeedOverLife"),speed:r.describe("Speed multiplier curve over lifetime")}),N=i({type:t("RotationOverLife"),angularVelocity:r.describe("Angular velocity in radians/sec")}),D=i({type:t("ForceOverLife"),x:r.describe("Force along X axis over lifetime"),y:r.describe("Force along Y axis over lifetime"),z:r.describe("Force along Z axis over lifetime")}),I=i({type:t("OrbitOverLife"),orbitSpeed:r.describe("Orbit speed over lifetime"),axis:a.optional().describe("Orbit axis. Defaults to [0, 1, 0]")}),V=i({type:t("Noise"),frequency:r.describe("Noise frequency"),power:r.describe("Noise amplitude"),positionAmount:r.optional().describe("Position displacement amount"),rotationAmount:r.optional().describe("Rotation displacement amount")}),H=i({type:t("TurbulenceField"),scale:a.describe("Turbulence field scale"),octaves:e().int().describe("Noise octave count"),velocityMultiplier:a.describe("Velocity multiplier per axis"),timeScale:a.describe("Time scale per axis")}),M=i({type:t("FrameOverLife"),frame:r.describe("Sprite sheet frame index over lifetime")}),W=i({type:t("LimitSpeedOverLife"),speed:r.describe("Maximum speed over lifetime"),dampen:e().describe("Damping factor when speed exceeds limit (0–1)")}),j=i({type:t("ChangeEmitDirection"),angle:r.describe("Angle deviation from original emit direction")}),q=i({type:t("GravityForce"),center:a.describe("Gravity center point"),magnitude:e().describe("Gravity force strength")}),U=i({type:t("WidthOverLength"),width:r.describe("Trail width over trail length")}),X=c("type",[k,E,z,A,N,D,I,V,H,M,W,j,q,U]).describe("Particle behavior applied over lifetime"),Y=s(["billboard","stretchedBillboard","mesh","trail","horizontalBillboard","verticalBillboard"]).describe("How particles are rendered"),Z=i({wrap:s(["clamp","repeat","mirror"]).optional().describe("How UVs outside [0,1] address the sprite image (three wrapS/wrapT)"),filter:s(["linear","nearest"]).optional().describe("Texel interpolation — nearest keeps a pixel-art sprite crisp"),mipmaps:o().optional().describe("Generate and sample a mip chain"),anisotropy:e().optional().describe("Anisotropic filtering samples, for sprites viewed at grazing angles")}).describe("Sprite texture sampler state"),_=i({type:s(["basic","standard"]).optional().describe("Particle material shading model"),color:p().optional().describe("Particle color as CSS hex string"),map:p().optional().describe("Path to particle sprite texture"),mapSampler:Z.optional().describe("Sampler state applied to the sprite texture named by `map`"),blending:s(["normal","additive"]).optional().describe("Blending mode (additive for glowing/fire effects)"),transparent:o().optional().describe("Enable transparency"),depthWrite:o().optional().describe("Write to depth buffer (disable for additive effects)"),side:s(["front","back","double"]).optional().describe("Which face sides to render")}).describe("Particle material settings"),J=i({time:e().describe("Time offset in seconds within the emission cycle"),count:r.describe("Number of particles to emit"),cycle:e().optional().describe("Burst repeat interval in seconds"),interval:e().optional().describe("Delay between burst repetitions"),probability:e().optional().describe("Chance of burst firing (0–1)")}).describe("Timed particle burst"),ce=i({autoDestroy:o().optional().describe("Destroy the particle system when all particles have died"),looping:o().optional().describe("Continuously emit particles"),prewarm:o().optional().describe("Simulate one full cycle on start so particles appear immediately"),duration:e().optional().describe("Total emission duration in seconds"),shape:G.optional().describe("Emitter shape that defines where particles spawn"),startLife:r.optional().describe("Initial particle lifetime in seconds"),startSpeed:r.optional().describe("Initial particle speed"),startSize:r.optional().describe("Initial particle size"),startRotation:r.optional().describe("Initial particle rotation in radians"),startColor:m.optional().describe("Initial particle color"),startLength:r.optional().describe("Initial trail length (trail render mode only)"),startTileIndex:r.optional().describe("Initial sprite sheet tile index"),emissionOverTime:r.optional().describe("Particles emitted per second"),emissionOverDistance:r.optional().describe("Particles emitted per unit of emitter movement"),emissionBursts:n(J).optional().describe("Timed burst emissions"),behaviors:n(X).optional().describe("Behaviors applied to particles over their lifetime"),renderMode:Y.optional().describe("How particles are rendered (billboard, trail, mesh, etc.)"),worldSpace:o().optional().describe("Simulate particles in world space instead of local space"),renderOrder:e().optional().describe("Render order for sorting (higher = rendered later)"),uTileCount:e().int().optional().describe("Horizontal tile count in sprite sheet"),vTileCount:e().int().optional().describe("Vertical tile count in sprite sheet"),blendTiles:o().optional().describe("Blend between sprite sheet tiles for smooth animation"),softParticles:o().optional().describe("Enable soft particle depth fading"),softFarFade:e().optional().describe("Far fade distance for soft particles"),softNearFade:e().optional().describe("Near fade distance for soft particles"),material:_.describe("Particle material settings")}).describe("Particle system configuration");export{X as BehaviorSchema,m as ColorGeneratorSchema,G as EmitterShapeSchema,ce as ParticlesDescriptorSchema,Y as RenderModeSchema,r as ValueGeneratorSchema};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{R as l,P as w,G as g,a as O,D as L,C as y,b as T,H as C,S as F,c as b,V as M,d as B,W as D,e as P,f as c,g as R,L as k,F as E,T as x,N as z,O as N,h as G,i as I,j as A,k as W,l as V,A as _}from"./three.quarks.esm-B1C61jGo.js";import{armSoftParticleDepth as $,disarmSoftParticleDepth as H}from"./soft-particle-depth-DGvfQDi1.js";import{textureLoader as J}from"./loader-CaF_I7Yt.js";import{bM as q,b7 as K,ao as Q,ap as U,aq as X,F as Y,z as Z,a1 as j,j as ee,bB as ie,a2 as re,am as te,k as d,a5 as h,by as ne,av as ae}from"./three.module-D396a9Mn.js";import"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const oe={billboard:l.BillBoard,stretchedBillboard:l.StretchedBillBoard,mesh:l.Mesh,trail:l.Trail,horizontalBillboard:l.HorizontalBillBoard,verticalBillboard:l.VerticalBillBoard},f={clamp:te,repeat:re,mirror:ie},se={"linear/mips":ae,"linear/no-mips":d,"nearest/mips":ne,"nearest/no-mips":h},m=new Map;function le(e,i){const n=i===void 0?e:`${e}\0${JSON.stringify(i)}`,r=m.get(n);if(r)return r;const a=J.load(e);return a.colorSpace=ee,i!==void 0&&ce(a,i),m.set(n,a),a}function ce(e,i){if(i.wrap!==void 0&&(e.wrapS=f[i.wrap],e.wrapT=f[i.wrap]),i.filter!==void 0||i.mipmaps!==void 0){const n=i.filter??"linear",r=i.mipmaps===!1?"no-mips":"mips";i.filter!==void 0&&(e.magFilter=n==="linear"?d:h),e.minFilter=se[`${n}/${r}`]}i.mipmaps!==void 0&&(e.generateMipmaps=i.mipmaps),i.anisotropy!==void 0&&(e.anisotropy=i.anisotropy)}function s(e){const i={};for(const[n,r]of Object.entries(e))r!==void 0&&(i[n]=r);return i}function v(e){switch(e.type){case"point":return new b;case"sphere":return new F(s({radius:e.radius,arc:e.arc,thickness:e.thickness}));case"hemisphere":return new C(s({radius:e.radius,arc:e.arc,thickness:e.thickness}));case"cone":return new T(s({radius:e.radius,arc:e.arc,thickness:e.thickness,angle:e.angle}));case"circle":return new y(s({radius:e.radius,arc:e.arc,thickness:e.thickness}));case"donut":return new L(s({radius:e.radius,arc:e.arc,thickness:e.thickness,donutRadius:e.donutRadius}));case"rectangle":return new O(s({width:e.width,height:e.height,thickness:e.thickness}));case"grid":return new g(s({width:e.width,height:e.height,column:e.column,row:e.row}))}}function t(e){return M(e)}function u(e){return B(e)}function S(e){switch(e.type){case"ApplyForce":return new _(new c(e.direction[0],e.direction[1],e.direction[2]),t(e.magnitude));case"ColorOverLife":return new V(u(e.color));case"SizeOverLife":return new W(t(e.size));case"SpeedOverLife":return new A(t(e.speed));case"RotationOverLife":return new I(t(e.angularVelocity));case"ForceOverLife":return new G(t(e.x),t(e.y),t(e.z));case"OrbitOverLife":return new N(t(e.orbitSpeed),e.axis?new c(e.axis[0],e.axis[1],e.axis[2]):void 0);case"Noise":return new z(t(e.frequency),t(e.power),e.positionAmount?t(e.positionAmount):void 0,e.rotationAmount?t(e.rotationAmount):void 0);case"TurbulenceField":return new x(new c(e.scale[0],e.scale[1],e.scale[2]),e.octaves,new c(e.velocityMultiplier[0],e.velocityMultiplier[1],e.velocityMultiplier[2]),new c(e.timeScale[0],e.timeScale[1],e.timeScale[2]));case"FrameOverLife":return new E(t(e.frame));case"LimitSpeedOverLife":return new k(t(e.speed),e.dampen);case"ChangeEmitDirection":return new R(t(e.angle));case"GravityForce":return new P(new c(e.center[0],e.center[1],e.center[2]),e.magnitude);case"WidthOverLength":return new D(t(e.width))}}function pe(e){const i={};e.map&&(i.map=le(e.map,e.mapSampler));const n=e.blending==="normal"?q:K,r=e.transparent!==!1,a=e.depthWrite??!1,o=e.side==="back"?Q:e.side==="double"?U:X;return e.type==="standard"?new Y({color:e.color??"#ffffff",...i,blending:n,transparent:r,depthWrite:a,side:o}):new Z({color:e.color??"#ffffff",...i,blending:n,transparent:r,depthWrite:a,side:o})}let p=null;function ue(){if(p)return p;const e=document.createElement("canvas");e.width=16,e.height=16;const i=e.getContext("2d"),n=i.createRadialGradient(8,8,0,8,8,8);return n.addColorStop(0,"rgba(255,255,255,1)"),n.addColorStop(1,"rgba(255,255,255,0)"),i.fillStyle=n,i.fillRect(0,0,16,16),p=new j(e),p}function Fe(e,i){const n=pe(e.material);(i?.defaultSprite??!0)&&!e.material.map&&"map"in n&&(n.map=ue());const r={material:n};e.autoDestroy!=null&&(r.autoDestroy=e.autoDestroy),e.looping!=null&&(r.looping=e.looping),e.prewarm!=null&&(r.prewarm=e.prewarm),e.duration!=null&&(r.duration=e.duration),i?.shape?r.shape=i.shape:e.shape&&(r.shape=v(e.shape)),i?.instancingGeometry&&(r.instancingGeometry=i.instancingGeometry),e.startLife&&(r.startLife=t(e.startLife)),e.startSpeed&&(r.startSpeed=t(e.startSpeed)),e.startSize&&(r.startSize=t(e.startSize)),e.startRotation&&(r.startRotation=t(e.startRotation)),i?.startColor?r.startColor=i.startColor:e.startColor&&(r.startColor=u(e.startColor)),e.startTileIndex&&(r.startTileIndex=t(e.startTileIndex)),e.renderMode==="trail"&&e.startLength&&(r.rendererEmitterSettings={startLength:t(e.startLength)}),e.emissionOverTime&&(r.emissionOverTime=t(e.emissionOverTime)),e.emissionOverDistance&&(r.emissionOverDistance=t(e.emissionOverDistance)),e.emissionBursts&&(r.emissionBursts=e.emissionBursts.map(o=>({time:o.time,count:t(o.count),cycle:o.cycle??1,interval:o.interval??0,probability:o.probability??1}))),e.behaviors&&(r.behaviors=e.behaviors.map(S)),e.renderMode!=null&&(r.renderMode=oe[e.renderMode]),e.worldSpace!=null&&(r.worldSpace=e.worldSpace),e.renderOrder!=null&&(r.renderOrder=e.renderOrder),e.uTileCount!=null&&(r.uTileCount=e.uTileCount),e.vTileCount!=null&&(r.vTileCount=e.vTileCount),e.blendTiles!=null&&(r.blendTiles=e.blendTiles),e.softParticles!=null&&(r.softParticles=e.softParticles),e.softFarFade!=null&&(r.softFarFade=e.softFarFade),e.softNearFade!=null&&(r.softNearFade=e.softNearFade);const a=new w(r);return{emitter:a.emitter,system:a}}function be(e,i){i.duration!=null&&(e.duration=i.duration),i.looping!=null&&(e.looping=i.looping),i.prewarm!=null&&(e.prewarm=i.prewarm),i.shape&&(e.emitterShape=v(i.shape)),i.startLife&&(e.startLife=t(i.startLife)),i.startSpeed&&(e.startSpeed=t(i.startSpeed)),i.startSize&&(e.startSize=t(i.startSize)),i.startRotation&&(e.startRotation=t(i.startRotation)),i.startColor&&(e.startColor=u(i.startColor)),i.startTileIndex&&(e.startTileIndex=t(i.startTileIndex)),i.emissionOverTime&&(e.emissionOverTime=t(i.emissionOverTime)),i.emissionOverDistance&&(e.emissionOverDistance=t(i.emissionOverDistance)),e.emissionBursts=(i.emissionBursts??[]).map(n=>({time:n.time,count:t(n.count),cycle:n.cycle??1,interval:n.interval??0,probability:n.probability??1})),e.behaviors=(i.behaviors??[]).map(S)}function Me(e,i,n=1/60){e.restart();const r=Math.max(0,i);let a=0;for(;a<r;){const o=Math.min(n,r-a);e.update(o),a+=o}e.pause()}function Be(e,i){e.addSystem(i),i.softParticles&&$(e)}function De(e,i){e.deleteSystem(i),i.softParticles&&H(e)}function Pe(){return{looping:!0,duration:2,shape:{type:"cone",radius:.1,angle:.3},startLife:{type:"IntervalValue",a:.5,b:1.5},startSpeed:{type:"IntervalValue",a:1,b:3},startSize:{type:"IntervalValue",a:.05,b:.15},startColor:{type:"ConstantColor",color:{r:1,g:.8,b:.2,a:1}},emissionOverTime:{type:"ConstantValue",value:30},behaviors:[{type:"SizeOverLife",size:{type:"PiecewiseBezier",functions:[{function:{p0:1,p1:.67,p2:.33,p3:0},start:0}]}}],material:{type:"basic",blending:"additive",transparent:!0,depthWrite:!1}}}export{be as applyParticlesDataLive,Fe as createParticleSystemFromData,Pe as defaultParticlesData,Be as registerParticleSystem,Me as scrubParticleSystemTo,De as unregisterParticleSystem};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import{B as P,dk as A,bG as M,cG as S,dl as j}from"./index-GIL7oGEO.js";import{c as v}from"./react-story-board-BDDwiE2H.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";const u="src/lib/pasteboard/pasteboard.tsx",p="src/design/pasteboard.tsx";function T(r){return r.replace(/\.stories(?=\.[^.]+$)/,"")}function k(r){return`../${r.replace(/\.[cm]?[jt]sx?$/,"").replace(/^src\//,"")}`}function O(r,i){const t=r.filter(o=>o.path===i&&(o.exported||o.defaultExport));return t.find(o=>o.defaultExport)??(t.length===1?t[0]:null)}async function G(){if(!(await fetch("/__ui-source/read",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file:u})})).ok)throw new Error(`Materialize pasteboard needs the pasteboard helpers at ${u} — run ${P("add pasteboard")} first.`);const i=document.querySelector('[data-vgai-react-story-board="true"]'),t=v(i);if(!t||t.length===0)throw new Error("Materialize pasteboard reads the live UI board and it has no frames — open the UI document (a project with dom stories) first.");const o=A(M()),m=await S(),b=m.ok?m.entries:[],a=[],s=[],l=new Map;for(const e of t){const d=o.find(E=>E.id===e.storyId);if(!d)continue;const g=T(d.modulePath),n=O(b,g);if(!n){s.push(d.label??d.id);continue}const c=k(n.path),f=n.defaultExport?`import ${n.name} from '${c}';`:`import { ${n.name} } from '${c}';`;l.set(c,f),a.push({importLine:f,name:n.name,x:e.x,y:e.y})}if(a.length===0)throw new Error(`Materialize pasteboard resolved no importable owner component for any board frame (skipped: ${s.join(", ")||"none"}). A story's owner module must export the component its frames render.`);const w=Math.max(...a.map(e=>e.x))+960,y=Math.max(...a.map(e=>e.y))+720,x=a.map(e=>` <At x={${e.x}} y={${e.y}}>
|
|
2
|
+
<${e.name} />
|
|
3
|
+
</At>`).join(`
|
|
4
|
+
`),$=`${[...l.values()].sort().join(`
|
|
5
|
+
`)}
|
|
6
|
+
import { At, Pasteboard } from '../lib/pasteboard/pasteboard';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Materialized from the UI board's derived auto-grid — this file is now the
|
|
10
|
+
* AUTHORED canvas: edit freely, and a drag in the editor writes each At's
|
|
11
|
+
* x/y literals right here.
|
|
12
|
+
*/
|
|
13
|
+
export default function DesignPasteboard() {
|
|
14
|
+
return (
|
|
15
|
+
<Pasteboard width={${w}} height={${y}}>
|
|
16
|
+
${x}
|
|
17
|
+
</Pasteboard>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
`,h=await j(p,$);if(!h.created)throw new Error(h.error??`${p} already exists — the pasteboard is already authored; edit it directly (there is deliberately no regeneration).`);return window.dispatchEvent(new CustomEvent("editor:open-project-asset",{detail:{path:p,kind:"source"}})),`Materialized ${a.length} frame(s) into ${p}`+(s.length>0?` (skipped, no importable owner component: ${s.join(", ")})`:"")}export{p as MATERIALIZED_PASTEBOARD_PATH,u as PASTEBOARD_HELPERS_PATH,G as materializePasteboard};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pasteboard-materialize-BqSS4QzV.js","assets/index-GIL7oGEO.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/three.module-D396a9Mn.js","assets/index-D2fNXpHa.css","assets/react-story-board-BDDwiE2H.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{_ as o,V as t}from"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";const b="workspace.action",u=[{id:"pasteboard.materialize",label:"Materialize Pasteboard from UI Board",execute:async()=>{const{materializePasteboard:a}=await o(async()=>{const{materializePasteboard:r}=await import("./pasteboard-materialize-BqSS4QzV.js");return{materializePasteboard:r}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]));try{t.log(`[pasteboard] ${await a()}`,"authoring")}catch(r){t.error(`[pasteboard] materialize refused: ${r instanceof Error?r.message:String(r)}`,"authoring")}}}];export{u as actions,b as point};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const u=()=>globalThis.performance?.now()??Date.now();function O(f,h){return f.length===0?0:f[Math.min(f.length-1,Math.floor((f.length-1)*h))]??0}function $(f=!1){const h=new Set,i=[],M=new Map,S=new Map,b=new Map;let P=[],C=[],s=f,m=!1,c=!1,I=0,p=0,g=0;const v=[];let w=0,y=0,l={gpuMs:null,drawCalls:0,triangles:0,geometries:0,textures:0,renderPasses:null},x={enabled:s,recording:c,fps:0,cpuMs:0,p95Ms:0,p99Ms:0,frames:[],phases:[],systems:[],components:[],render:l};function d(){const e=i.at(-1),r=i.slice();let a;const o=t=>(a??=r.map(n=>n.intervalMs).filter(n=>n>0).sort((n,F)=>n-F),O(a,t));x={enabled:s,recording:c,fps:e?.intervalMs?1e3/e.intervalMs:0,cpuMs:e?.cpuMs??0,get p95Ms(){return o(.95)},get p99Ms(){return o(.99)},frames:r,phases:e?.phases??[],systems:[...S].map(([t,n])=>({name:t,ms:n})).sort((t,n)=>n.ms-t.ms),components:[...b].map(([t,n])=>({name:t,ms:n})).sort((t,n)=>n.ms-t.ms),render:l};for(const t of h)t()}return{get enabled(){return s},set enabled(e){s!==e&&(s=e,e&&!m&&(g=0),d())},get telemetryEnabled(){return m},set telemetryEnabled(e){if(m===e)return;const r=!s&&!m;m=e,e&&r&&(g=0),d()},get recording(){return c},startRecording(){const e=!s&&!m;s=!0,e&&(g=0),c=!0,i.length=0,d()},stopRecording(){c=!1,d()},clear(){i.length=0,d()},beginFrame(){!s&&!m||(M.clear(),S.clear(),b.clear(),P=[],C=[],v.length=0,l={gpuMs:null,drawCalls:0,triangles:0,geometries:0,textures:0,renderPasses:null},p=u())},beginPhase(){s&&v.push(u())},endPhase(e){if(!s)return;const r=v.pop()??p,a=u()-r,o=M.get(e);M.set(e,{ms:(o?.ms??0)+a,startMs:o?.startMs??r-p}),c&&performance.measure(`vgai.phase.${e}`,{start:r,duration:a})},systemObserver:{beginSystem(){s&&(w=u())},endSystem(e,r,a){if(!s)return;const o=u(),t=`${e} / ${r} / ${a}`;S.set(t,(S.get(t)??0)+o-w),P.push({name:t,phase:r,startMs:w-p,ms:o-w})}},beginComponent(){c&&(y=u())},endComponent(e,r=""){if(!c)return;const a=u();b.set(e,(b.get(e)??0)+a-y),C.push({name:e,phase:r,startMs:y-p,ms:a-y})},reportRender(e){s&&(l={gpuMs:e.gpuMs??l.gpuMs,drawCalls:l.drawCalls+e.drawCalls,triangles:l.triangles+e.triangles,geometries:l.geometries+e.geometries,textures:l.textures+e.textures,renderPasses:e.renderPasses===void 0?l.renderPasses:(l.renderPasses??0)+e.renderPasses})},endFrame(){if(!s&&!m)return;const e=u(),r=g===0?0:p-g;g=p;const a={id:++I,timestamp:e,intervalMs:r,cpuMs:e-p,phases:[...M].map(([o,{ms:t,startMs:n}])=>({name:o,ms:t,startMs:n})).sort((o,t)=>t.ms-o.ms),systems:P.slice(),components:C.slice(),render:{...l}};i.push(a),i.length>600&&i.splice(0,i.length-600),c&&performance.measure("vgai.frame",{start:p,duration:a.cpuMs}),d()},subscribe(e){return h.add(e),()=>{h.delete(e)}},getSnapshot(){return x},exportJSON(){return JSON.stringify({version:2,capturedAt:new Date().toISOString(),frames:i},null,2)}}}export{$ as createPerformanceProfiler};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function s(){const t=new Map,r=new Map;return{add(e,n,l){t.set(e,{body:n,collider:l}),r.set(l.handle,e)},get(e){return t.get(e)},getByColliderHandle(e){return r.get(e)},remove(e){const n=t.get(e);n&&r.delete(n.collider.handle),t.delete(e)},entries(){return t.entries()},get size(){return t.size},clear(){t.clear(),r.clear()}}}export{s as createPhysics2DRegistry};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function i(){const r=new Map,n=new Map,l=[];return{add(e,t,s){r.set(e,{body:t,collider:s}),n.set(s.handle,e)},get(e){return r.get(e)},getByColliderHandle(e){return n.get(e)},onRemove(e){l.push(e)},remove(e){const t=r.get(e);if(t){for(const s of l)s(e,t);n.delete(t.collider.handle)}r.delete(e)},entries(){return r.entries()},get size(){return r.size},clear(){r.clear(),n.clear()}}}export{i as createPhysicsRegistry};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{AuthoringAdapter2D as O}from"./authoring-CgcOFhGS.js";import{V as g,c9 as j,fE as T,bT as m,bU as v}from"./index-GIL7oGEO.js";import{c as A}from"./source-persistence-backend-C-aR-B_Y.js";import{J as N}from"./json-history-resource-BbxllWfV.js";import{f as F,a as L}from"./pixi-transform-channels-VjdohT11.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./ingest-source-persistence-C_6Hiyra.js";const H={count:0,sprites:0};class _{constructor(t,e,r,i=n=>queueMicrotask(n)){this.root=t,this.index=e,this.mapping=r,this.scheduleWindowClose=i,this.refresh()}current={nodes:new Map,rootIds:[],stats:H};projectionFresh=!1;refresh(){const t=this.index.refresh();return this.current=this.readProjection(t),this.openProjectionWindow(),t}project(){return this.projectionFresh?this.current:this.reproject()}reproject(){const t=this.index.reindex();return this.current=this.readProjection(t),this.openProjectionWindow(),this.current}invalidate(){this.projectionFresh=!1}openProjectionWindow(){this.projectionFresh||(this.projectionFresh=!0,this.scheduleWindowClose(()=>{this.projectionFresh=!1}))}projection(){return this.current}object(t){const e=this.current.nodes.get(t)?.object??null;return e===null||e.destroyed?null:e}node(t){const e=this.current.nodes.get(t);if(!e)return null;const r=this.index.node(t);return r?{...r,parentId:e.parentId,childIds:[...e.childIds]}:null}roots(){return this.current.rootIds.map(t=>this.node(t)).filter(t=>t!==null)}pick(t,e,r){return this.candidates(t,e,r)[0]??null}candidates(t,e,r){const i=this.pointFromClient(t,e);return i?(this.project(),this.hitIds(i,r)):[]}pointFromClient(t,e){const r=this.mapping?.surface()??null;if(!r)return null;const i=r.getBoundingClientRect();if(i.width<=0||i.height<=0)return null;const n=this.mapping?.pointFromClient?.(t,e,i)??null;if(this.mapping?.pointFromClient)return n;const c=Number(r.dataset?.vgaiStageWidth??i.width),a=Number(r.dataset?.vgaiStageHeight??i.height);return!(c>0)||!(a>0)?null:{x:(t-i.left)*(c/i.width),y:(e-i.top)*(a/i.height)}}hitIds(t,e){const r=[],i=[];this.collectHits(this.root,t,"visual",r),this.collectHits(this.root,t,"hitArea",i);const n=[],c=new Set;for(const a of[...r,...i]){const s=a.__authId;s&&!e(s)&&!c.has(s)&&(c.add(s),n.push(s))}return n}rect(t){const e=this.object(t);if(!e||typeof e.getBounds!="function")return null;const r=e.getBounds();return!(r.width>0)||!(r.height>0)?null:{x:r.x,y:r.y,width:r.width,height:r.height}}contextRects(t){const e=this.node(t);if(!e)return{siblings:[]};const r=e.parentId?this.node(e.parentId)?.childIds??[]:this.current.rootIds,i=e.parentId?this.rect(e.parentId):null;return{...i?{parent:i}:{},siblings:r.filter(n=>n!==t).map(n=>this.rect(n)).filter(n=>n!==null)}}readProjection(t){const e=new Map,r=[],i=n=>{const c=this.index.displayObject(n.id);if(!c)return;const a={object:c,id:n.id,parentId:n.parentId,childIds:[...n.childIds]};e.set(n.id,a);for(const s of n.childIds){const u=this.index.node(s);u&&i(u)}};for(const n of this.index.roots())r.push(n.id),i(n);return{nodes:e,rootIds:r,stats:t}}collectHits(t,e,r,i){const n=t.children??[];for(let c=n.length-1;c>=0;c--){const a=n[c];if(!a.visible||!a.renderable)continue;a.updateLocalTransform();const s={x:0,y:0};a.localTransform.applyInverse(e,s),this.collectHits(a,s,r,i),this.contains(a,s,r)&&i.push(a)}}contains(t,e,r){if(!t.__authId)return!1;const i=t;return r==="hitArea"?i.hitArea?i.hitArea.contains(e.x,e.y):!1:typeof i.containsPoint=="function"?i.containsPoint(e):!1}}const $="data-authoring-instance",M="data-authoring-label",R="data-authoring-component";function y(o,t){if(!o||typeof o!="object")return;const e=o[t];return typeof e=="string"&&e.length>0?e:void 0}function x(o){return y(o,$)}function P(o){return y(o,M)}function D(o){return y(o,R)}function U(o){const t=x(o);return t?x(o.parent)!==t:!1}const w="#root";function Y(o){if(!(!o.position||!o.scale||!o.pivot||!o.skew))return{x:o.position.x,y:o.position.y,rotation:o.rotation,scaleX:o.scale.x,scaleY:o.scale.y,pivotX:o.pivot.x,pivotY:o.pivot.y,skewX:o.skew.x,skewY:o.skew.y}}function B(o,t){!o.position||!o.scale||!o.pivot||!o.skew||(o.position.set(t.x,t.y),o.scale.set(t.scaleX,t.scaleY),o.pivot.set(t.pivotX,t.pivotY),o.skew.set(t.skewX,t.skewY),o.rotation=t.rotation)}class W{constructor(t,e,r,i){this.root=t,this.onRestored=i;const n=e.projectHistory;this.resource=n?new N({history:n,kind:"session-state",scope:"session",subject:{...r,id:`${r.id}/world-2d-structure`},displayName:"World 2D structure",capture:()=>this.capture(),conflictIdentity:c=>Object.fromEntries(Object.entries(c.placements).map(([a,s])=>[a,s.parent])),restore:async c=>{this.restore(c)}}):null}byUid=new Map;resource;track(t){return this.uidOf(t)}run(t,e){this.resource?.assertCanMutate();const r=this.capture(),i=e();return this.resource&&this.resource.record(t,r,this.capture()).catch(n=>{g.error(`[canvas] failed to journal "${t}" into project history — the structural edit is applied but has no history entry (it cannot be undone): ${n instanceof Error?n.message:String(n)}`,"authoring")}),i}dispose(){this.resource?.dispose(),this.byUid.clear()}uidOf(t){if(t===this.root)return w;const e=t,r=e.__vgaiStructUid;if(r&&this.byUid.get(r)===t)return r;const i=r??`s${crypto.randomUUID()}`;return e.__vgaiStructUid=i,this.byUid.set(i,t),i}capture(){const t={};for(const[e,r]of this.byUid){const i=r.parent??null,n=Y(r);t[e]={parent:i?this.uidOf(i):null,index:i?i.children?.indexOf(r)??-1:-1,...n?{pose:n}:{}}}return{placements:t}}restore(t){const e=Object.entries(t.placements);for(const[r,i]of e){if(i.parent!==null)continue;const n=this.byUid.get(r);n?.parent?.removeChild(n)}for(const[r,i]of e.filter(([,n])=>n.parent!==null).sort((n,c)=>n[1].index-c[1].index)){const n=this.byUid.get(r);if(!n)continue;const c=i.parent===w?this.root:this.byUid.get(i.parent);if(!c||typeof c.addChildAt!="function")continue;const a=c.children.length-(n.parent===c?1:0);c.addChildAt(n,Math.max(0,Math.min(i.index,a))),i.pose&&B(n,i.pose)}this.onRestored()}}const k=[{kind:"container",label:"Container"},{kind:"sprite",label:"Sprite"},{kind:"text",label:"Text"},{kind:"graphics",label:"Graphics"}],b=/\.(png|jpe?g|webp|gif|svg)(\?.*)?$/i,X="a canvas structural edit would have to add, delete or move a construction statement in the world's own source, and this lane plans property writes only — an editor-created node has no construction site there at all",S="origin",z="#ff2d92",G="this world's write target has no origin write, so the pivot/anchor can be seen here but not dragged";function I(o){const t=o,e=t.anchor,r=t.texture;return e&&r?.orig?{anchor:e,texture:r}:null}function Q(o){const t=I(o);if(!t)return null;const e=o.bounds;return typeof e?.width=="number"&&typeof e.height=="number"?{x:e.width,y:e.height}:{x:t.texture.orig.width,y:t.texture.orig.height}}function V(o){return k.find(e=>e.kind===o)?.label??o}function q(o,t){switch(t){case"container":return new o.Container;case"sprite":{const e=new o.Sprite(o.Texture.WHITE);return e.setSize(64,64),e}case"text":return new o.Text({text:"Text",style:{fill:16777215,fontSize:24}});case"graphics":return new o.Graphics().rect(0,0,100,100).fill(16777215);default:return null}}function C(o,t){const e=K(o,t);Z(t,e);for(const r of t.children??[])e.addChild(C(o,r));return e}function K(o,t){if(t.constructor===o.Container)return new o.Container;if(t.constructor===o.Sprite){const e=t,r=new o.Sprite(e.texture);return r.anchor.set(e.anchor.x,e.anchor.y),r}if(t.constructor===o.Text){const e=t,r=new o.Text({text:e.text,style:e.style.clone()});return r.anchor.set(e.anchor.x,e.anchor.y),r}if(t.constructor===o.Graphics)return t.clone(!0);throw new Error(`"${t.label??t.constructor?.name??"this node"}" cannot be duplicated: a ${t.constructor?.name??"custom"} is constructed by the game's own code, and copying only its display half would put a lookalike with no behaviour into the world.`)}function Z(o,t){t.label=o.label,t.position.set(o.position.x,o.position.y),t.scale.set(o.scale.x,o.scale.y),t.pivot.set(o.pivot.x,o.pivot.y),t.skew.set(o.skew.x,o.skew.y),t.rotation=o.rotation,t.alpha=o.alpha,t.visible=o.visible,"tint"in o&&"tint"in t&&(t.tint=o.tint)}function J(o){const t=new Set;return(o.x!==void 0||o.y!==void 0||o.originX!==void 0||o.originY!==void 0)&&t.add("position"),(o.width!==void 0||o.height!==void 0||o.scaleXFactor!==void 0||o.scaleYFactor!==void 0)&&(t.add("scale"),(o.width!==void 0||o.height!==void 0)&&t.add("position")),o.rotate!==void 0&&t.add("rotation"),[...t]}function tt(o,t){const e=t*Math.PI/180/2,r=Math.sin(e),i=Math.cos(e),[n,c,a,s]=o.rotation;return[n*i+c*r,c*i-n*r,a*i+s*r,s*i-a*r]}function et(o,t){const e={position:[...o.transform.position],rotation:[...o.transform.rotation],scale:[...o.transform.scale]},r=t.rotate;r!==void 0&&(e.rotation=tt(o.transform,r));const i=t.width;i!==void 0&&o.rect.width>0&&(e.scale[0]=o.transform.scale[0]*Math.max(1e-4,i/o.rect.width));const n=t.height;n!==void 0&&o.rect.height>0&&(e.scale[1]=o.transform.scale[1]*Math.max(1e-4,n/o.rect.height));const c=t.scaleStep,a=h=>c!==void 0&&c>0?Math.round(h/c)*c:h,s=h=>Math.abs(h)>=1e-4?h:h<0?-1e-4:1e-4,u=t.scaleXFactor;u!==void 0&&(e.scale[0]=s(a(o.transform.scale[0]*u)));const l=t.scaleYFactor;return l!==void 0&&(e.scale[1]=s(a(o.transform.scale[1]*l))),e}function rt(o,t,e,r){return r.originX!==void 0||r.originY!==void 0?{dx:r.originX!==void 0&&o?r.originX-o.x:0,dy:r.originY!==void 0&&o?r.originY-o.y:0}:{dx:t?(r.x??e.x)-t.x:0,dy:t?(r.y??e.y)-t.y:0}}class vt{constructor(t,e,r){this.root=t,this.store=e,this.target=r.target,this.pixi=r.pixi??j,this.transforms={dimensions:()=>"2d",get:s=>{const u=this.a2d.getTransform(s);return u?L(u):{position:[0,0,0],rotation:[0,0,0,1],scale:[1,1,1]}},editability:(s,u)=>this.target.transformEditability(s,u),beginEdit:s=>this.target.beginTransformEdit(s),apply:(s,u)=>{this.target.writeTransform(s,F(u)),this.notify()},endEdit:s=>this.target.endTransformEdit(s),...this.target.removeTransform?{remove:(s,u)=>this.target.removeTransform?.(s,u)}:{}},this.loadTexture=r.loadTexture??(s=>this.pixi.Assets.load(s)),this.capturePreview=r.capturePreview,this.structureHistory=new W(t,e,r.journal,()=>this.afterStructuralChange()),this.a2d=new O(t,{...r.identity?{identity:r.identity}:{}}),this.projector=new _(t,this.a2d,{surface:r.surface??(()=>null),...r.pointFromClient?{pointFromClient:r.pointFromClient}:{}}),this.provenance=this.target.provenance,r.surface&&(this.pickable={pick:(s,u)=>this.projector.pick(s,u,l=>this.isPickLocked(l)),candidates:(s,u)=>this.projector.candidates(s,u,l=>this.isPickLocked(l))},this.rects={rect:s=>this.projector.rect(s),contextRects:s=>this.projector.contextRects(s)}),r.stories&&(this.stories=r.stories),this.watchStructure(t),this.capabilities={transform:!0,inspectorFields:!0,persist:this.target.provenance.source==="source-code"&&this.target.persistence!==void 0},this.target.bind({a2d:this.a2d,store:e,journal:r.journal,notify:()=>this.notify()}),this.structure=this.target.structure??this.liveStructure,this.assetDrop=this.target.assetDrop??{accepts:(s,u)=>b.test(u)&&this.containerFor(s||null)!==null,drop:(s,u,l)=>this.dropAsset(s,u,l)};const n=this.target.persistence;n&&(this.persistence=n);const c=this.target.truth?.bind(this.target);c&&(this.truth={resolve:(s,u)=>c(s,u)},this.related=A(s=>c(s,"position").site)),!r.stories&&this.target.componentIdentity&&(this.stories=T("canvas",e,s=>this.target.componentIdentity?.(s)??null));const a=this.target.instances?.();a&&(this.instances={describe:s=>a.describe(s),...a.openComponent?{openComponent:s=>a.openComponent?.(s)}:{},revert:(s,u)=>a.revert(s,u),applyToComponent:(s,u)=>a.applyToComponent(s,u)})}capabilities;provenance;pickable;rects;persistence;truth;related;structure;stories;instances;transforms;a2d;projector;target;pixi;structureHistory;loadTexture;capturePreview;listeners=new Set;boxEditSessions=new Map;lockedIds=new Set;refresh(){return this.projector.refresh()}previewImage(t,e,r){const i=this.projector.object(t);return i&&this.capturePreview?this.capturePreview(i,{width:e,height:r}):Promise.resolve(null)}notify(){for(const t of this.listeners)t()}watchedForStructure=[];structureNotifyQueued=!1;onStructureChanged=()=>{this.projector.invalidate(),!this.structureNotifyQueued&&(this.structureNotifyQueued=!0,queueMicrotask(()=>{this.structureNotifyQueued=!1,this.projector.reproject(),this.watchStructure(this.root),this.target.onReindex(),this.notify(),this.store.notifyIngestEdit()}))};watchStructure(t){for(const r of this.watchedForStructure)r.off("childAdded",this.onStructureChanged),r.off("childRemoved",this.onStructureChanged);this.watchedForStructure=[];const e=r=>{typeof r.on=="function"&&typeof r.off=="function"&&(r.on("childAdded",this.onStructureChanged),r.on("childRemoved",this.onStructureChanged),this.watchedForStructure.push(r));for(const i of r.children??[])e(i)};e(t)}hierarchy={roots:()=>(this.projector.project(),this.projector.roots().map(t=>this.toEditorNode(t.id)).filter(t=>t!==null)),node:t=>this.toEditorNode(t)};toEditorNode(t){const e=this.projector.node(t);if(!e)return null;const r=this.projector.object(t),i=r?U(r):!1,n=i?D(r):void 0;return{id:e.id,label:(i&&r?P(r):void 0)??e.label,role:i?"component":"entity",kind:e.kind,...n?{typeLabel:n}:{},parentId:e.parentId,childIds:e.childIds}}selection={get:()=>[...this.store.selectedEntityIds],set:t=>{this.store.selectMultiple(t),this.notify()}};liveStructure={create:(t,e)=>this.createStructuralNode(t,e??null),remove:t=>this.removeStructuralNodes([t]),removeMany:t=>this.removeStructuralNodes(t),duplicate:t=>this.duplicateStructuralNode(t),reparent:(t,e)=>this.reparentStructuralNode(t,e),reorder:(t,e)=>this.reorderStructuralNode(t,e),creatableKinds:()=>k.map(t=>({...t}))};containerFor(t){if(!t)return this.root;const e=this.projector.object(t);return!e||typeof e.addChild!="function"?null:e}refuseStructure(t){return m({resolve:()=>v(t),record:()=>{},report:e=>g.warn(`[canvas] structural edit refused — ${e}`,"authoring")})}reportStructureLiveOnly(t){return m({resolve:()=>v(X),record:()=>{},report:e=>{if(this.target.reportStructureLiveOnly){this.target.reportStructureLiveOnly(t,e);return}g.log(`[canvas] ${t} is live-only — ${e}.`,"authoring")}})}afterStructuralChange(){this.projector.reproject(),this.watchStructure(this.root),this.target.onReindex(),this.notify(),this.store.notifyIngestEdit()}idOf(t){return t.__authId??""}createStructuralNode(t,e){const r=this.containerFor(e);if(!r)return{id:"",ack:this.refuseStructure(`no node with id "${e}" can hold children.`)};const i=q(this.pixi,t);if(!i)return{id:"",ack:this.refuseStructure(`"${t}" is not a kind this canvas surface can construct.`)};i.label=V(t);const n=`Create ${i.label}`;return this.structureHistory.track(r),this.structureHistory.track(i),this.structureHistory.run(n,()=>{r.addChild(i)}),this.afterStructuralChange(),{id:this.idOf(i),ack:this.reportStructureLiveOnly(n)}}removeStructuralNodes(t){const e=[];let r=null;for(const n of t){const c=this.projector.object(n);if(!c?.parent){r=this.refuseStructure(`"${n}" is not a removable node in this tree.`);continue}e.push(c)}if(e.length===0)return r??this.refuseStructure("the selection held no removable node.");const i=e.length===1?`Delete ${e[0].label??"node"}`:`Delete ${e.length} nodes`;for(const n of e)this.structureHistory.track(n),n.parent&&this.structureHistory.track(n.parent);return this.structureHistory.run(i,()=>{for(const n of e)n.parent?.removeChild(n)}),this.afterStructuralChange(),this.reportStructureLiveOnly(i)}duplicateStructuralNode(t){const e=this.projector.object(t),r=e?.parent??null;if(!e||!r)throw new Error(`"${t}" is not a duplicable node in this tree.`);const i=C(this.pixi,e);i.label=`${e.label||"node"} copy`;const n=`Duplicate ${e.label??"node"}`,c=r.children.indexOf(e);return this.structureHistory.track(r),this.structureHistory.track(i),this.structureHistory.run(n,()=>{r.addChildAt(i,c+1)}),this.afterStructuralChange(),{id:this.idOf(i),ack:this.reportStructureLiveOnly(n)}}reparentStructuralNode(t,e){const r=this.projector.object(t);if(!r)return this.refuseStructure(`"${t}" is not a node in this tree.`);const i=this.containerFor(e);if(!i)return this.refuseStructure(`no node with id "${e}" can hold children.`);if(i===r||this.isAncestorOf(r,i))return this.refuseStructure("a node cannot be reparented into itself or its own descendant.");const n=this.localToRootMatrix(r),c=this.localToRootMatrix(i),a=`Move ${r.label??"node"}`;return this.structureHistory.track(r),r.parent&&this.structureHistory.track(r.parent),this.structureHistory.track(i),this.structureHistory.run(a,()=>{i.addChild(r),r.setFromMatrix(c.clone().invert().append(n))}),this.afterStructuralChange(),this.reportStructureLiveOnly(a)}reorderStructuralNode(t,e){const r=this.projector.object(t),i=r?.parent??null;if(!r||!i)return this.refuseStructure(`"${t}" is not a reorderable node in this tree.`);const n=e?this.projector.object(e):null;if(e&&(!n||n.parent!==i))return this.refuseStructure(`"${e}" is not a sibling of "${t}".`);const c=`Reorder ${r.label??"node"}`;return this.structureHistory.track(i),this.structureHistory.track(r),this.structureHistory.run(c,()=>{const a=i.children.indexOf(r),s=n?i.children.indexOf(n):i.children.length;i.addChildAt(r,Math.max(0,a<s?s-1:s))}),this.afterStructuralChange(),this.reportStructureLiveOnly(c)}isAncestorOf(t,e){let r=e.parent;for(;r;){if(r===t)return!0;r=r.parent}return!1}localToRootMatrix(t){const e=[];let r=t;for(;r&&r!==this.root;)e.push(r),r=r.parent;const i=new this.pixi.Matrix;for(let n=e.length-1;n>=0;n--){const c=e[n];c.updateLocalTransform(),i.append(c.localTransform)}return i}assetDrop;async dropAsset(t,e,r){if(!b.test(e))return this.refuseStructure(`${e} is not an image. A canvas world mounts an image as a Sprite; a model or an audio file has no display object to become here.`);const i=this.containerFor(t||null);if(!i)return this.refuseStructure(`no node with id "${t}" can hold a dropped asset.`);let n;try{n=await this.loadTexture(e)}catch(u){return this.refuseStructure(`${e} could not be loaded as a texture: ${u instanceof Error?u.message:String(u)}`)}const c=new this.pixi.Sprite(n);c.anchor.set(.5,.5),c.label=e.split("/").pop()??"Sprite";const a=r?.position;if(a){const u=this.localToRootMatrix(i).clone().invert().apply({x:a[0],y:a[1]});c.position.set(u.x,u.y)}const s=`Add ${c.label}`;return this.structureHistory.track(i),this.structureHistory.track(c),this.structureHistory.run(s,()=>{i.addChild(c)}),this.afterStructuralChange(),this.reportStructureLiveOnly(s)}boxEdit={begin:t=>{const e=this.projector.rect(t);if(!e){this.boxEditSessions.delete(t);return}this.boxEditSessions.set(t,{id:t,rect:e,transform:this.transforms.get(t)}),this.transforms.beginEdit?.(t)},apply:(t,e)=>this.applyBoxEdit(t,e),end:t=>{const e=this.boxEditSessions.get(t);this.boxEditSessions.delete(t),e&&this.transforms.endEdit?.(t)},gizmoOrigin:t=>this.gizmoOriginOf(t)};gizmoOriginOf(t){const e=this.projector.object(t);if(!e||typeof e.getGlobalPosition!="function")return null;const r=e.getGlobalPosition();return{x:r.x,y:r.y}}applyBoxEdit(t,e){const r=this.boxEditSessions.get(t);if(!r||J(e).some(n=>this.transforms.editability?.(t,n).writable===!1))return;const i=et(r,e);this.transforms.apply(t,i),!(e.x===void 0&&e.y===void 0&&e.originX===void 0&&e.originY===void 0&&e.width===void 0&&e.height===void 0)&&this.repositionBoxEditBounds(t,r,e,i)}repositionBoxEditBounds(t,e,r,i){const n=this.projector.object(t);if(!n)return;const c=this.gizmoOriginOf(t),a=this.projector.rect(t),{dx:s,dy:u}=rt(c,a,e.rect,r),l=n.parent;if(l&&typeof l.toLocal=="function"){const h=l.toLocal({x:0,y:0}),d=l.toLocal({x:s,y:u});i.position[0]+=d.x-h.x,i.position[1]+=d.y-h.y}else i.position[0]+=s,i.position[1]+=u;this.transforms.apply(t,i)}spatialHandles={layers:t=>{const e=this.originOf(t);if(!e)return[];const r=this.target.transformEditability(t,"position"),i=!!this.target.writeOrigin&&r.writable;return[{id:`origin:${t}`,category:"origin",guides:[],handles:[{id:S,label:e.kind==="anchor"?"Sprite anchor":"Pivot",position:[e.world.x,e.world.y,0],color:z,writable:i,...i?{}:{reason:this.target.writeOrigin&&r.reason?r.reason:G}}]}]},preview:(t,e,r)=>{this.moveOrigin(t,e,r,"preview")},commit:(t,e,r)=>this.moveOrigin(t,e,r,"commit")};originEditId=null;originOf(t){const e=this.projector.object(t);if(!e||typeof e.updateLocalTransform!="function")return null;const r=I(e),i=r?"anchor":"pivot",n=r?{x:r.anchor.x,y:r.anchor.y}:{x:e.pivot.x,y:e.pivot.y},c=r?{x:0,y:0}:n,a=this.localToRootMatrix(e).apply({x:c.x,y:c.y});return{kind:i,value:n,world:{x:a.x,y:a.y}}}moveOrigin(t,e,r,i){if(e!==S)return;const n=this.originOf(t),c=this.projector.object(t),a=this.target.writeOrigin;if(!n||!c||!a||!this.target.transformEditability(t,"position").writable)return;this.originEditId!==t&&(this.target.beginTransformEdit(t),this.originEditId=t),c.updateLocalTransform();const s=this.localToRootMatrix(c).clone().invert().apply({x:r[0],y:r[1]}),u=n.kind==="anchor"?{x:0,y:0}:n.value,l={x:s.x-u.x,y:s.y-u.y},h=n.kind==="anchor"?Q(c):null;if(n.kind==="anchor"&&(!h||h.x===0||h.y===0))return;const d=h?[n.value.x+l.x/h.x,n.value.y+l.y/h.y]:[s.x,s.y],f=c.localTransform,p=this.a2d.getTransform(t);if(a(t,n.kind,d),p&&this.target.writeTransform(t,{...p,position:[p.position[0]+f.a*l.x+f.c*l.y,p.position[1]+f.b*l.x+f.d*l.y]}),this.notify(),i==="commit"){const E=this.target.endTransformEdit(t);return this.originEditId=null,E}}inspector={properties:t=>[...this.target.properties(t),{path:"locked",label:"Locked",type:"boolean",group:"Visibility"}],get:(t,e)=>e==="locked"?this.lockedIds.has(t):this.target.get(t,e),set:(t,e,r)=>{if(e==="locked"){r===!0?this.lockedIds.add(t):this.lockedIds.delete(t),this.notify();return}return this.target.set(t,e,r)},remove:(t,e)=>this.target.remove?.(t,e)};isPickLocked(t){let e=t;for(;e;){if(this.lockedIds.has(e))return!0;e=this.projector.node(e)?.parentId??null}return!1}subscribe(t){return this.listeners.add(t),()=>this.listeners.delete(t)}dispose(){this.boxEditSessions.clear(),this.lockedIds.clear();for(const t of this.watchedForStructure)t.off("childAdded",this.onStructureChanged),t.off("childRemoved",this.onStructureChanged);this.watchedForStructure=[],this.structureHistory.dispose(),this.target.dispose(),this.listeners.clear()}}export{vt as PixiAuthoringAdapter};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{V as N,bT as G,bU as Q,aB as X,bV as Z,bR as ee,bS as te}from"./index-GIL7oGEO.js";import{J as ne,c as D}from"./json-history-resource-BbxllWfV.js";import{m as re,p as ie}from"./source-persistence-backend-C-aR-B_Y.js";import{t as oe}from"./pixi-transform-channels-VjdohT11.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./ingest-source-persistence-C_6Hiyra.js";function $(u){if(!u||typeof u!="object")return;const c=u;return typeof c.x=="number"&&typeof c.y=="number"?[c.x,c.y]:void 0}function V(u,c,l){const s=u;!l||!$(s[c])||(s[c]={x:l[0],y:l[1]})}function se(u){return`#${(u&16777215).toString(16).padStart(6,"0")}`}function ae(u){return Number.parseInt(u.replace("#",""),16)}const le=["position","rotation","scale"];function $e(u){const{physics:c}=u,l=u.persistence??null;let s,p=()=>{},h=null,S,T,w=!1,L=!1;const m=()=>{const t={},n=e=>{const r=s.node(e),i=s.displayObject(e);if(!r||!i)return;let o=null;try{o=s.getTransform(e)}catch{}const a=$(i.pivot),f=$(i.anchor);t[e]={label:i.label??"",alpha:i.alpha,visible:i.visible,..."tint"in i?{tint:i.tint}:{},...o?{transform:o}:{},...a?{pivot:a}:{},...f?{anchor:f}:{}};for(const d of r.childIds)n(d)};for(const e of s.roots())n(e.id);return{overlay:structuredClone(s.serializeOverlay()),nodes:t}},F=t=>{for(const[n,e]of Object.entries(t.nodes)){const r=s.displayObject(n);r&&(r.label=e.label,r.alpha=e.alpha,r.visible=e.visible,e.tint!==void 0&&"tint"in r&&(r.tint=e.tint),V(r,"pivot",e.pivot),V(r,"anchor",e.anchor),e.transform&&s.setTransform(n,e.transform))}s.replaceOverlay(t.overlay),p()},v=(t,n)=>{h&&n&&h.record(t,n,m()).catch(e=>{N.error(`[canvas] failed to journal "${t}" into project history — the edit is applied but has no history entry (it cannot be undone): ${e instanceof Error?e.message:String(e)}`,"authoring")})},A=(t,n,e)=>{const r=s.displayObject(t);r&&(n==="name"?s.set(t,"label",e):n==="tint"?s.set(t,"tint",ae(e)):n==="visible"?s.set(t,"visible",e):n==="alpha"?s.set(t,"alpha",e):r[n]=e,p())},x=(t,n)=>{const e=s.displayObject(t);if(e)return n==="name"?e.label:n==="tint"?se(e.tint??16777215):e[n]},b=(t,n)=>{const e=s.getTransform(t);return n==="position"?e?[...e.position]:void 0:n==="rotation"?e?e.rotation:void 0:n==="scale"?e?[...e.scale]:void 0:x(t,n)},P=(t,n,e)=>{if(n==="position"&&Array.isArray(e))s.setTransform(t,{position:[e[0]??0,e[1]??0]});else if(n==="rotation"&&typeof e=="number")s.setTransform(t,{rotation:e});else if(n==="scale"&&Array.isArray(e))s.setTransform(t,{scale:[e[0]??1,e[1]??1]});else{A(t,n,e);return}p()},y=(t,n)=>{const e=ee(s.displayObject(t)??null);return{entityId:t,property:n,surface:"pixi",anchor:e,anchorKind:e.anchored?"construction-literal":"live-only",instances:e.anchored&&e.kind==="source"?te(e):0}},g=t=>s.node(t)?.label??"2D Object",R=(t,n,e,r,i,o)=>{if(l){if(r===null||i===void 0||o===void 0){v(n,e);return}return ie({backend:l,subject:()=>y(t,r),baseline:i,next:o,label:n,journal:()=>v(n,e)})}},I=t=>{const n=[{path:"name",label:"Name",type:"string"},{path:"visible",label:"Visible",type:"boolean"},{path:"alpha",label:"Alpha",type:"number"}],e=s.displayObject(t);return e&&"tint"in e&&n.push({path:"tint",label:"Tint",type:"color"}),n},O=new Map,K=new Map,j=t=>t.anchored&&t.kind==="source"?`${t.file}:${t.line}:${t.col}`:null,E=t=>[{path:"position",label:"Position"},{path:"rotation",label:"Rotation"},{path:"scale",label:"Scale"},...I(t).map(n=>({path:n.path,label:n.label}))],C=(t,n,e,r)=>{const i=K.get(n);if(i)return i;const o=l?.readSiteLiterals,a=E(t).map(d=>({property:d.path,live:b(t,d.path)})).filter(d=>d.live!==void 0);if(!o||a.length===0)return Promise.resolve({});const f=o({anchor:e,instances:r,writeScope:"creation-site",surface:"pixi",properties:a}).then(d=>(O.set(n,d),p(),d));return K.set(n,f),f},W=(t,n,e,r)=>{const i=O.get(n);return i||(C(t,n,e,r),null)},z=1e-6,M=(t,n)=>Array.isArray(t)&&Array.isArray(n)?t.length===n.length&&t.every((e,r)=>M(e,n[r])):typeof t=="number"&&typeof n=="number"?Math.abs(t-n)<=z:t===n,k=t=>s.displayObject(t)?.constructor?.name||(s.node(t)?.kind??"2D Object"),H=t=>`${t} ${t===1?"instance":"instances"}`,B=(t,n,e,r)=>{const i=b(t,n.path);if(!e||e.literal===null||i===void 0||M(e.literal,i))return null;const o=l?.gate({...r,property:n.path,writeScope:"creation-site"}),a=e.writable?o?.ok?void 0:o?.reason:e.reason;return{path:n.path,label:n.label,value:i,...e.text?{defaultText:e.text}:{},canApplyToComponent:a===void 0,...a===void 0?{}:{applyUnavailableReason:a},affectedInstanceCount:r.instances}},q=(t,n,e,r)=>{if(!l||!e||e.literal===null||r===void 0)return{ok:!1,message:e?.reason??`The construction site names no ${n} for this object, so there is no default to change.`};if(!e.writable)return{ok:!1,message:e.reason??`The construction site's ${n} cannot be rewritten.`};const i=l.gate({...t,writeScope:"creation-site"});return i.ok?{ok:!0,backend:l,baseline:e.literal,next:r}:{ok:!1,message:i.reason}},J=async t=>{const n=y(t,"position"),e=j(n.anchor);return e?O.get(e)??await C(t,e,n.anchor,n.instances):null},U={describe:t=>{const n=y(t,"position"),e=j(n.anchor);if(!e||!s.displayObject(t))return null;const r=W(t,e,n.anchor,n.instances);if(!r||Object.keys(r).length===0)return null;const i=E(t).map(o=>B(t,o,r[o.path],n)).filter(o=>o!==null);return{componentName:k(t),...n.anchor.anchored?{sourcePath:n.anchor.display}:{},overrides:i}},revert:async(t,n)=>{const e=await J(t);if(!e)return;const r=m(),i=[];for(const o of n){const a=e[o]?.literal;a!=null&&(P(t,o,a),i.push(o))}if(i.length!==0)return v(i.length===1?`Revert ${g(t)} ${i[0]}`:`Revert ${i.length} ${g(t)} overrides`,r),p(),Z},applyToComponent:async(t,n)=>{const e={...y(t,n),writeScope:"creation-site"},r=j(e.anchor),i=(await J(t))?.[n],o=b(t,n),a=q(e,n,i,o);if(!a.ok)return{changed:!1,message:a.message};const f=`Apply ${n} to ${k(t)} default (${H(e.instances)})`;return await a.backend.write({...e,baseline:a.baseline,next:a.next,label:f})?(r&&O.delete(r),p(),{changed:!0,message:`${n} now reads ${JSON.stringify(o)} for all ${H(e.instances)} at ${e.anchor.anchored?e.anchor.display:"its creation site"}.`,write:{destination:e.anchor.anchored?e.anchor.display:"creation site",persisted:!0}}):{changed:!1,message:`${f} did not land — the editor console names why.`}}};return{provenance:l?{source:"foreign",label:"creation-site",detail:"Live 2D (PixiJS) tree projected directly — an edit is written into the game’s own source at the line that constructed the object, and says why whenever it cannot be."}:{source:"foreign",label:"live-only",detail:"Live 2D (PixiJS) tree projected directly — edits apply for this session only and are never saved."},get persistence(){const t=l;return t?{...D(),get destination(){return t.destination()}}:{...D(),destination:X}},truth:(t,n)=>{const e=y(t,n);if(e.anchorKind==="live-only")return{site:e.anchor,writeAnchorKind:"live-only"};const r=j(e.anchor);if(!r)return{site:e.anchor,writeAnchorKind:"live-only"};const i=O.get(r);if(!i)return C(t,r,e.anchor,e.instances),{site:e.anchor,writeAnchorKind:void 0};const o=i[n];return{site:e.anchor,writeAnchorKind:o?.writable?"construction-literal":"live-only"}},componentIdentity:t=>s.displayObject(t)?{name:k(t)}:null,...l?.readSiteLiterals?{instances:()=>U}:{},writeOrigin(t,n,e){h?.assertCanMutate();const r=s.displayObject(t);!r||!$(r[n])||(r[n]={x:e[0],y:e[1]},w=!0,p())},bind(t){s=t.a2d,p=t.notify;const n=t.store.projectHistory;h=n?new ne({history:n,kind:"session-state",scope:"session",subject:{...t.journal,id:`${t.journal.id}/world-2d-edits`},displayName:"World 2D edits",capture:m,conflictIdentity:e=>e.overlay,restore:async e=>{F(e)}}):null,l?.attach({read:b,apply:P})},onReindex(){},transformEditability(t,n){if(!l)return{writable:!0};const e=y(t,n),r=e.anchorKind!=="live-only"&&l.removal?.available(e)?{removable:!0}:{};return{writable:!0,reason:l.describe(e),...r}},beginTransformEdit(t){h?.assertCanMutate();const n=s.displayObject(t);n&&c.ownerOf(n)==="physics"&&c.freeze(n),S=m(),T=l?s.getTransform(t)??void 0:void 0,w=!1},writeTransform(t,n){h?.assertCanMutate();const e=s.displayObject(t);e&&c.ownerOf(e)==="physics"&&c.commit(e,n.position,n.rotation),s.setTransform(t,n),p()},endTransformEdit(t){const n=s.displayObject(t);n&&c.ownerOf(n)==="physics"&&c.unfreeze(n);const e=`Transform ${g(t)}`,r=S,i=T,o=w;if(S=void 0,T=void 0,w=!1,!l){v(e,r);return}const a=s.getTransform(t)??void 0,f=o?["origin"]:[];i&&a&&f.push(...le.filter(Y=>oe(Y,i,a))),f.length>1&&l.report(e,re(f));const d=f.length===1&&f[0]!=="origin"?f[0]:null;return R(t,e,r,d,d?_(i,d):void 0,d?_(a,d):void 0)},removeTransform(t,n){const e=l,r=e?.removal;if(!e||!r)return;const i=`Remove ${g(t)} ${n}`;return G({resolve:()=>{const o=y(t,n);return o.anchorKind==="live-only"||!r.available(o)?Q(e.describe(o)):{reaches:"writer",anchorKind:o.anchorKind,destination:e.destination(),write:()=>r.perform({...o,label:i})}},record:()=>{},report:o=>{e.armed()&&e.report(i,o)}})},reportStructureLiveOnly(t,n){if(l?.armed()){l.report(t,n);return}if(!L){L=!0,N.warn(`[canvas] structural edits in this world are live-only — ${n}. First one: ${t}.`,"authoring");return}N.log(`[canvas] ${t} is live-only — ${n}.`,"authoring")},properties:I,get(t,n){return x(t,n)},set(t,n,e){h?.assertCanMutate();const r=m(),i=`Set ${g(t)} ${n}`;if(!l){A(t,n,e),v(i,r);return}const o=b(t,n);A(t,n,e);const a=b(t,n),f=o!==void 0&&a!==void 0&&JSON.stringify(o)!==JSON.stringify(a);return R(t,i,r,f?n:null,o,a)},dispose(){h?.dispose(),h=null,l?.dispose()}}}function _(u,c){if(u){if(c==="position")return[...u.position];if(c==="rotation")return u.rotation;if(c==="scale")return[...u.scale]}}export{$e as createLiveCanvasWriteTarget};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as m}from"./extend-B-eOccUm.js";import"./jsx-runtime-DPjLkJKQ.js";import{c8 as p}from"./index-GIL7oGEO.js";import{r as a}from"./index-nmcBqr7Y.js";import"./index-bQE2NA0D.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";const s="object";class u{constructor(e){const t=e[s];if(!(t instanceof p))throw new Error(`PixiPrimitive: \`object\` must be a PIXI.Container (got ${t===null?"null":typeof t}). This element adopts an object the game already owns; it does not create one.`);return Object.defineProperty(t,s,{configurable:!0,enumerable:!1,get:()=>t,set:()=>{}}),t}}m({VgaiAdopted:u});const f="pixiVgaiAdopted";function T(r){const{object:e,children:t,...o}=r;if(a.useRef(e).current!==e)throw new Error("PixiPrimitive: `object` changed on a mounted element. The adopted container IS this element's instance, so it cannot be swapped; give the element a `key` derived from the object instead, so React remounts it.");a.useLayoutEffect(()=>()=>l(e),[e]);const n={[s]:e};for(const[d,c]of Object.entries(o))c!==void 0&&(n[d]=c);return a.createElement(f,n,t)}function l(r){const e=r,t=Object.getOwnPropertyDescriptor(r,"destroy");let o=!0;const i=()=>{o&&(o=!1,t===void 0?delete e.destroy:Object.defineProperty(r,"destroy",t))};Object.defineProperty(r,"destroy",{configurable:!0,enumerable:!1,writable:!0,value:function(){i(),this.removeFromParent()}}),queueMicrotask(i)}function A(r,e){e.parent!==r&&r.addChild(e)}export{T as PixiPrimitive,A as adoptNow};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as L,c as O}from"./extend-B-eOccUm.js";import{c9 as W}from"./index-GIL7oGEO.js";import{r as a}from"./index-nmcBqr7Y.js";import{WorldProvider as z}from"./world-state-BWG-IcOd.js";import{g as N}from"./debug-registry-Dgvitx8M.js";import{wireGameInputSeams as B,DEFAULT_INPUT_MAP_PATH as H}from"./game-input-seams-CIQdetRw.js";import"./jsx-runtime-DPjLkJKQ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-bQE2NA0D.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./frame-selector-cache-cCeUbcjG.js";import"./seeded-random-i3mtgBKZ.js";import"./render-seed-DF4JHy7P.js";const x=1e4,M=new WeakSet;function j(t){if(t===null||typeof t!="object")return!1;const o=t;return typeof o.id=="string"&&o.id.length>0&&typeof o.mount=="function"}function G(t,o){const n=a.createElement(o);return{id:t,async mount(r){const l=r.game?N(r.game):null;l&&await B(r,l,{id:t,inputMapPath:H,optionalInputMap:!0});const c=r.canvas;if(M.has(c))throw new Error(`canvas world "${t}": this lane has already mounted this canvas. @pixi/react keys its reconciler roots off the canvas element, so re-using one would resurrect a root whose Application is destroyed. Hand each mount a fresh canvas (every vgai host already does).`);M.add(c),L(W);let p;const b=new Promise(e=>{p=e});let f;const k=new Promise(e=>{f=e});let v;const $=new Promise(e=>{v=e});let w;const F=new Promise(e=>{w=e});function S(){return a.useLayoutEffect(()=>(p(),v),[]),a.useEffect(()=>(f(),w),[]),null}const y=r.game,h=a.createElement(a.Fragment,null,n,a.createElement(S)),U=y?a.createElement(z,{game:y},h):h,g=O(c),E={antialias:!0,width:r.width,height:r.height,resolution:r.dpr??globalThis.devicePixelRatio??1,autoDensity:!0,backgroundAlpha:r.transparent?0:1,preserveDrawingBuffer:r.preserveDrawingBuffer??!1,autoStart:!1,sharedTicker:!1};let P;const _=new Promise(e=>{P=e}),T=e=>{P(`the Pixi tree crashed before its first commit — ${e.message} (mount() fails loudly instead of hanging)`)};globalThis.addEventListener?.("error",T);let u,m;try{u=await g.render(U,E);const d=new Promise(I=>{m=setTimeout(()=>I(`no first commit within ${x/1e3}s (mount() fails loudly instead of hanging)`),x)}),R=await Promise.race([Promise.all([b,k]).then(()=>null),_,d]);if(R!==null)throw new Error(`canvas world "${t}": ${R}`)}catch(e){try{u?.destroy(!1,{children:!0})}catch{}throw e}finally{m!==void 0&&clearTimeout(m),globalThis.removeEventListener?.("error",T)}if(u===void 0)throw new Error(`canvas world "${t}": initialized without an Application`);const i=u;i.ticker.lastTime=0;let A=0,s=!1;const C=l?{debug:l.adapter}:{},D=Promise.all([$,F]).then(()=>{s=!0,i.destroy(!1,{children:!0})});return{kind:"canvas",canvas:c,substrate:{name:"pixi",root:i.stage},drivesOwnLoop:!1,systems:C,disposeComplete:D,update(e){s||(A+=e*1e3,i.ticker.update(A))},resize(e,d){s||i.renderer.resize(e,d)},dispose(){s||(s=!0,i.renderer.events.setTargetElement(null),g.render(null,E))}}}}}function V(t,o){const n=t;return j(n?.adapter)?n.adapter:typeof n?.default=="function"?G(o,n.default):null}const me=(t,o)=>{const n=V(o.entryModule,t.id);if(n)return{kind:"canvas",adapter:n};throw new Error(`pixiReactRootFactory: entry module "${t.entry??"(none)"}" for root "${t.id}" must default-export a React component (\`export default function World() { … }\`).`)};export{me as pixiReactRootFactory,V as resolveCanvasEntryAdapter};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(n){if(n.children.length===0)return!1;const t=n.getBounds();return t.width>1&&t.height>1}export{e as m};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function i(o){return[0,0,Math.sin(o/2),Math.cos(o/2)]}function s(o){return 2*Math.atan2(o[2],o[3])}function r(o){return{position:[o.position[0],o.position[1],0],rotation:i(o.rotation),scale:[o.scale[0],o.scale[1],1]}}function c(o){return{position:[o.position[0],o.position[1]],rotation:s(o.rotation),scale:[o.scale[0],o.scale[1]]}}const a=1e-6;function u(o,t,n){return o==="position"?Math.abs(t.position[0]-n.position[0])>=a||Math.abs(t.position[1]-n.position[1])>=a:o==="rotation"?Math.abs(t.rotation-n.rotation)>=a:Math.abs(t.scale[0]-n.scale[0])>=a||Math.abs(t.scale[1]-n.scale[1])>=a}export{r as a,c as f,u as t};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/babylon-authoring-adapter-CL02gWDn.js","assets/index-GIL7oGEO.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/three.module-D396a9Mn.js","assets/index-D2fNXpHa.css","assets/json-history-resource-BbxllWfV.js","assets/source-persistence-backend-C-aR-B_Y.js","assets/ingest-source-persistence-C_6Hiyra.js","assets/pixi-authoring-adapter-CjibysC3.js","assets/authoring-CgcOFhGS.js","assets/pixi-transform-channels-VjdohT11.js","assets/pixi-live-write-target-DuWydlWb.js","assets/canvas-entry-runtime-SfBxaR9M.js","assets/mount-ingest-root-glv2SSWf.js","assets/active-ingest-CT6jSGhr.js","assets/game-contract-seams-a5YXejOu.js","assets/capability-coverage-Czas4C18.js","assets/playtest-BXIL1JEF.js","assets/module-mode-DVBLT9d-.js","assets/binding-resolver-Dsh-6Vor.js","assets/native-debug-module-CWicoSGD.js","assets/native-entry-surface-BE8LJNdu.js","assets/debug-registry-Dgvitx8M.js","assets/adapter-surface-Y37Nzcyw.js","assets/entry-adjudication-Cq8Yeb74.js","assets/r3f-root-factory-z9llD1OU.js","assets/register-render-vitals-BiZk29b2.js","assets/render-census-BrQX_CXv.js","assets/structural-signature-0w-i_ats.js","assets/render-vitals-BZ5HtvMi.js","assets/static-batch-advisor-B13QEH7d.js","assets/webgl-frame-capture-FlF9zQmW.js","assets/world-state-BWG-IcOd.js","assets/frame-selector-cache-cCeUbcjG.js","assets/dev-build-gDYrq68M.js","assets/game-input-seams-CIQdetRw.js","assets/seeded-random-i3mtgBKZ.js","assets/render-seed-DF4JHy7P.js","assets/frame-delta-D2nsw_Ht.js","assets/events-156d8d12.esm-ErOhDXXB.js","assets/index-bQE2NA0D.js","assets/realm-services-CobQsq_X.js","assets/three-ingest-runtime-QzDYk6tU.js","assets/EffectComposer-DQxfsXBZ.js","assets/CopyShader-BzTUYzf6.js","assets/ShaderPass-QYRpPuFJ.js","assets/CSS3DRenderer-CL7ABLVK.js","assets/relative-path-guard-GiM7Lsz8.js","assets/react-root-CEz5NTck.js","assets/mount-manifest-CGVxhmAw.js","assets/create-runtime-CVCc1BDx.js","assets/binding-Bmxqznjk.js","assets/assets-BuSoGjBX.js","assets/loader-CaF_I7Yt.js","assets/setup-renderer-DVXaSGin.js","assets/index-BcCBqgM_.js","assets/defaults-DKiBJCPN.js","assets/render-settings-Bw4W9SYF.js","assets/render-features-CPQ_e568.js","assets/game-loop-CZvXlY00.js","assets/frame-pacing-D5acoOzO.js","assets/game-DHOZVb-7.js","assets/loop-gate-report-N52EWFGD.js","assets/system-slot-E2mEdiih.js","assets/user-data-BB2Of6Ht.js","assets/object-marks-DwvIEBOK.js","assets/sim-clock-CLflx7kg.js","assets/system-runner-DkOjxEBt.js","assets/performance-profiler-D_Jey87L.js","assets/input-manager-DH_hGW6d.js","assets/asset-parse-error-BHMwBRU3.js","assets/binding-identity-DcTpbvyg.js","assets/prompt-labels-DSMdM2_B.js","assets/schema-kl9-2B_J.js","assets/gameplay-rng-trap-CTNhm-UW.js","assets/state-bridge-DLP1jLRW.js","assets/input-router-BNQvtIqw.js","assets/render-control-Df3yTiyr.js","assets/debug-bridge-CCohG-d-.js","assets/run-ticks-settled-C4ksViyA.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{Z as Ke,a3 as kt,a2 as hn,kL as gn,kM as yn,kN as wn,kO as vn,kP as bn,cg as En,ch as Sn,a1 as _t,kQ as Mt,ca as Pn,cb as An,cd as Dt,kR as Rn,a0 as In,kS as Tn,cc as kn,V as b,q as E,j4 as Ot,kT as _n,kU as Mn,kV as Dn,kW as q,as as On,kX as xt,aq as xn,bY as ae,kY as Ln,ju as Cn,x as Fn,kZ as jn,aC as Lt,k_ as Nn,aF as Ae,y as Ct,aj as le,jU as dt,k$ as Ft,_ as C,l0 as jt,l1 as Nt,kg as $t,jx as Ut,p as $n,j_ as Un,l2 as Vn,l3 as qn,l4 as Wn,l5 as Bn,l6 as Gn,g2 as zn,fv as Hn,eh as Kn,bX as Vt,l7 as Yn,l8 as qt,gx as Xn,bT as Jn,bU as Zn,dt as Qn,l9 as er,fZ as tr,la as nr,fD as rr,eU as or}from"./index-GIL7oGEO.js";import{installNativeDebugBindings as sr,installNativeSystemsBindings as ar}from"./native-debug-module-CWicoSGD.js";import{publishDevInstruments as ir}from"./instruments-CKR02Y8I.js";import{g as Ye,D as K}from"./debug-registry-Dgvitx8M.js";import{B as ut}from"./edit-mode-authoring-B47TfLqu.js";import{p as Wt,c as cr}from"./json-history-resource-BbxllWfV.js";import{a as Bt}from"./binding-resolver-Dsh-6Vor.js";import{i as lr,s as dr}from"./editor-presentation-activity-C7SNSmTd.js";import{E as Gt,U as ur,V as pr,G as zt,B as Ue,l as Xe,W as fr,g as mr}from"./active-ingest-CT6jSGhr.js";import{m as hr}from"./pixi-story-model-DNkfnWUV.js";import{t as gr,d as yr}from"./surface-content-Dg9Kkazf.js";import{l as wr}from"./viewport-root-presentation-CWsE56K6.js";import{getSeededRandom as vr}from"./seeded-random-i3mtgBKZ.js";import{_engineLogActive as br}from"./logger-Dqis-7W1.js";import{runTicksWhenSettled as Er}from"./run-ticks-settled-C4ksViyA.js";import{assertNever as Sr}from"./adapter-surface-Y37Nzcyw.js";import{r as Pr,o as Ar,s as Rr}from"./three-authoring-adapter-CmSQ3Vui.js";import{mountDeferredIngestForPlay as Ir,exitDeferredIngestPlay as Tr}from"./deferred-ingest-play-DCJi_Pgu.js";import{r as H}from"./rrweb-Cd2ifIRP.js";import{R as kr,w as _r}from"./react-world-authoring-adapter-DmrwM3py.js";async function Mr(e){try{const t=await fetch(`${Ke}/log-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"start",...e?{name:e}:{}})});return(await hn(t,"Could not start a play log session")).file}catch{return null}}async function Dr(){try{const e=await fetch(`${Ke}/log-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"end"})});kt(e,"Could not end the play log session")}catch{}}async function Ht(e){if(e.length===0)return!0;try{const t=await fetch(`${Ke}/log-entries`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({entries:e})});return kt(t,"Could not flush play log entries"),!0}catch{return!1}}const Or="__adapter__",pt=new WeakSet;function ft(e,t){const n=[];for(const o of e.roots){const r=o.binding?.observation[t];r&&n.push(r)}return n}function xr(e,t,n){const o=t.forRoot(Or);for(const r of n){if(r.kind==="state"){o.registerStateProvider(r.id,()=>{if(!r.answer)throw new K("OBSERVATION_UNANSWERED",`Observation "${r.id}" (state) is declared by this game's adapter with no answer.`);return r.answer(e)},{tier:"assisted"});continue}o.registerCommand(r.id,{...r.description?{description:r.description}:{},locus:r.locus??"client"},(...s)=>{if(!r.answer)throw new K("OBSERVATION_UNANSWERED",`Observation "${r.id}" (command) is declared by this game's adapter with no answer.`);return r.answer(e,...s)})}}function De(e,t){const n=e.actions(t);if(!Array.isArray(n))throw new Error("vgai.adapter.ts input.actions must return an array.");const o=new Map;for(const r of n){if(typeof r?.name!="string"||r.name.length===0||!yn.includes(r.valueType))throw new Error("vgai.adapter.ts input.actions returned an invalid action; each action needs a non-empty `name` and a supported `valueType`.");if(o.has(r.name))throw new Error(`vgai.adapter.ts input.actions returned duplicate action "${r.name}".`);o.set(r.name,r.valueType)}return o}function Lr(e,t){return e==="digital"?typeof t=="boolean":e==="scalar"?typeof t=="number"&&Number.isFinite(t):typeof t=="object"&&t!==null&&typeof t.x=="number"&&Number.isFinite(t.x)&&typeof t.y=="number"&&Number.isFinite(t.y)}function Cr(e,t,n){if(!e.world(n.root))throw new Error(`vgai.adapter.ts input.root names "${n.root}", which is not a mounted manifest root.`);const o=[],r=[];let s=!1;const i=(u,c)=>{const a=De(n,e).get(u);if(!a)throw new K("INPUT_ACTION_NOT_FOUND",`Adapter input has no action named "${u}".`,{registered:[...De(n,e).keys()]});if(!Lr(a,c))throw new K("INPUT_ACTION_VALUE_TYPE",`Adapter input action "${u}" expects ${a}, not ${typeof c}.`,{action:u,expected:a});return a},p=(u,c,a)=>{i(u,c),n.set(e,u,c),s&&r.push({tick:a,action:u,value:c})},f=()=>{const u=t.getGameTick(),c=o.filter(a=>a.tick===u);if(c.length!==0){for(let a=o.length-1;a>=0;a--)o[a].tick===u&&o.splice(a,1);for(const a of c)p(a.action,a.value,u)}};e.systems.add("input",f,{name:"adapter.input"});const h=u=>{throw new K("ADAPTER_INPUT_SOURCE_UNSUPPORTED",`${u} addresses an engine test source, but this game declares an app-owned action store. Drive it by action name instead.`)},d={setVirtualAction(u,c){return p(u,c,t.getGameTick()),{delivered:!0}},tapVirtualAction(u){const c=t.getGameTick();return p(u,!0,c),o.push({tick:c+1,action:u,value:!1}),{delivered:!0}},clearVirtualActions(){o.length=0,n.clear(e)},scheduleActionAtTick(u,c,a){const m=t.getGameTick();if(!Number.isInteger(u)||u<m)throw new K("TICK_ALREADY_PASSED",`Cannot schedule adapter input for tick ${u}; current tick is ${m}.`,{tick:u,currentTick:m});i(c,a),o.push({tick:u,action:c,value:a})},startInputRecording(){r.length=0,s=!0},stopInputRecording(){s=!1},isInputRecording(){return s},injectAxis(){h("injectAxis")},injectVector2(){h("injectVector2")},injectPointerDelta(){h("injectPointerDelta")},injectPointerPosition(){h("injectPointerPosition")}};t.setInputActionsSource(n.root,()=>[...De(n,e)].map(([u,c])=>({name:u,valueType:c}))),t.setInputTraceSource(n.root,()=>({version:1,seed:null,fixedDt:e.loop.fixedDt,ticks:[...r]})),t.setVirtualInputTarget(n.root,d)}function Kt(e){if(pt.has(e))return;sr(e,ft(e,"entryDebug")),ar(e,ft(e,"entrySystems")),ir(e);const t=Ye(e);if(!t)throw new Error("Cannot install adapter runtime bindings: mounted Game has no debug registry.");e.roots.some(r=>r.mounted.systems?.debug!==void 0&&r.mounted.systems.debug!==t.adapter)||xr(e,t,wn());const o=gn();o&&Cr(e,t,o),pt.add(e)}const Fr="fit",Yt=[{id:Fr,label:"Fit panel",kind:"fit",width:null,height:null,dpr:null,safeArea:null},{id:"iphone-portrait",label:"iPhone 14 — 390×844 @3x",kind:"phone",width:390,height:844,dpr:3,safeArea:{top:47,right:0,bottom:34,left:0}},{id:"iphone-landscape",label:"iPhone 14 landscape — 844×390 @3x",kind:"phone",width:844,height:390,dpr:3,safeArea:{top:0,right:47,bottom:21,left:47}},{id:"android-portrait",label:"Android — 412×915 @2.6x",kind:"phone",width:412,height:915,dpr:2.6,safeArea:{top:24,right:0,bottom:24,left:0}},{id:"ipad-portrait",label:"iPad — 820×1180 @2x",kind:"tablet",width:820,height:1180,dpr:2,safeArea:{top:24,right:0,bottom:20,left:0}},{id:"desktop-1080p",label:"Desktop — 1920×1080 @1x",kind:"desktop",width:1920,height:1080,dpr:1,safeArea:null}],Je=Yt[0];function Xt(e){return Yt.find(t=>t.id===e)??Je}let I=Je,B=null,Jt=0;const Ve=new Set;function Ze(){Jt++;for(const e of Ve)e()}function ys(e){return Ve.add(e),()=>{Ve.delete(e)}}const ws=()=>Jt;function vs(){return I}function Zt(){return B??(I.kind==="phone"||I.kind==="tablet")}function bs(e){const t=Xt(e);t!==I&&(I=t,B=null,Qt(),Ze())}function Es(e){e!==B&&(B=e,Qt(),Ze())}function jr(){return I.dpr}function Ss(){return Math.min(typeof window<"u"&&window.devicePixelRatio||1,2)}function Qt(){vn({devicePreview:{preset:I.id,touch:B}})}function Ps(){const e=bn().devicePreview;return e?.preset?(I=Xt(e.preset),B=typeof e.touch=="boolean"?e.touch:null):(I=Je,B=null),Ze(),I}const mt=["pointerdown","pointermove","pointerup","pointercancel"],ht=new WeakSet;let qe=null,Oe=null;function gt(e){if(!Zt()||ht.has(e)||!(e instanceof PointerEvent)||e.pointerType!=="mouse")return;const t=e.target;if(!t)return;e.stopImmediatePropagation();const n=new PointerEvent(e.type,{bubbles:!0,cancelable:e.cancelable,composed:!0,view:e.view,detail:e.detail,clientX:e.clientX,clientY:e.clientY,screenX:e.screenX,screenY:e.screenY,button:e.button,buttons:e.buttons,ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,altKey:e.altKey,metaKey:e.metaKey,pointerId:e.pointerId,pointerType:"touch",isPrimary:!0,pressure:e.type==="pointerup"||e.type==="pointercancel"?0:Math.max(e.pressure,.5),width:20,height:20});ht.add(n),t.dispatchEvent(n),n.defaultPrevented&&e.preventDefault()}function Nr(e){if(e!==qe&&(Oe?.(),Oe=null,qe=e,!!e)){for(const t of mt)e.addEventListener(t,gt,{capture:!0});Oe=()=>{for(const t of mt)e.removeEventListener(t,gt,{capture:!0})}}}function As(e){qe===e&&Nr(null)}function $r(){return{presetId:I.id,presetLabel:I.label,dpr:I.dpr,safeArea:I.safeArea,touchActive:Zt()}}typeof window<"u"&&(window.__vgaiDevicePreview=$r);const Ur=15e3;function Vr(e,t,n){const o=n?` (open ${n})`:"";return`Play start stalled at "${e}" for ${Math.round(t/1e3)}s and the editor tab is HIDDEN — a backgrounded tab has its network requests deprioritized by the browser, so this step is queued rather than broken. Bring the editor tab to the foreground${o} and run play again; the engine loop itself is hidden-safe, only the boot's fetches are starved.`}function qr(e,t,n){const o=n.stallMs??Ur,r=n.setTimer??((i,p)=>setTimeout(i,p)),s=n.clearTimer??(i=>clearTimeout(i));return new Promise((i,p)=>{let f=!1;const h=r(()=>{f||n.isHidden()&&(f=!0,p(new Error(Vr(e,o,n.editorUrl))))},o);t.then(d=>{f||(f=!0,s(h),i(d))},d=>{f||(f=!0,s(h),p(d instanceof Error?d:new Error(String(d))))})})}function Wr(e,t,n=Date.now()){const o=e.filter(r=>r.seq>t).sort((r,s)=>r.seq-s.seq);return{entries:o.map(r=>({t:n,level:"info",source:"game-event",msg:r.event,tick:r.tick,simT:r.simT,meta:{seq:r.seq,...r.detail!==void 0?{detail:r.detail}:{}}})),lastSeq:o.at(-1)?.seq??t}}const fe="data-vgai-replay-block",Q="data-vgai-replay-video",yt="https://replay-assets.invalid/",Br=1e3,Gr=256*1024,zr=/data:image\/(?:png|jpeg|webp|gif|svg\+xml);base64,[a-zA-Z0-9+/=]+/g;function xe(e){const t=e.getBoundingClientRect();return{left:t.left,top:t.top,width:t.width,height:t.height}}function Hr(e){switch(e.toLowerCase()){case"image/png":return"png";case"image/jpeg":return"jpg";case"image/webp":return"webp";case"image/gif":return"gif";case"image/svg+xml":return"svg";default:return null}}function Kr(e){const t=/^data:([^;,]+);base64,([\s\S]+)$/i.exec(e);if(!t)throw new Error("image data URL is not base64 encoded");const n=atob(t[2]),o=new Uint8Array(n.length);for(let r=0;r<n.length;r+=1)o[r]=n.charCodeAt(r);return new Blob([o],{type:t[1].toLowerCase()})}function Yr(e){const t=[];for(let n=e;n&&n!==document.body;n=n.parentElement){const o=n.parentElement;if(!o)break;for(const r of Array.from(o.children))r!==n&&!["STYLE","LINK","SCRIPT"].includes(r.tagName)&&!r.hasAttribute(fe)&&(r.setAttribute(fe,""),t.push(r))}return()=>{for(const n of t)n.removeAttribute(fe)}}function Xr(e,t,n){if(n.format!=="canvas-dom"||n.replayPath===null)throw new Error("gameplay DOM recording requires a canvas-dom sink");const o=Yr(e),r=t.getAttribute(Q);t.setAttribute(Q,"");const s=()=>{o(),r===null?t.removeAttribute(Q):t.setAttribute(Q,r)},i=[],p=new Map,f=[];let h=0,d=0,u=0,c=0,a=0,m=null,P=Date.now(),y=null,D=Promise.resolve(),v=!1;const T=(g,L)=>{D=D.then(async()=>{if(!y)try{await L()}catch(z){const $=z instanceof Error?z.message:String(z);y=new Error(`${g}: ${$}`)}})},j=g=>{const L=p.get(g);if(L)return`${yt}${L}`;const z=/^data:([^;,]+)/i.exec(g)?.[1]??"",$=Hr(z);if(!$)return g;const ce=`${String(a).padStart(6,"0")}.${$}`;return a+=1,p.set(g,ce),T(`replay asset ${ce}`,async()=>{const lt=Kr(g);u+=lt.size,await En(n,ce,lt)}),`${yt}${ce}`},O=g=>g.includes("data:image/")?g.replace(zr,j):g,N=()=>{if(i.length===0)return;const g=new Blob([`[${i.join(",")}]`],{type:"application/json"});i.length=0,h=0;const L=c;c+=1,T(`DOM event batch ${L}`,()=>Sn(n,L,g))};let x;try{x=H({emit(g){m??=g.timestamp;const L=JSON.stringify(g,(z,$)=>typeof $=="string"?O($):$);i.push(L),h+=L.length,d+=1,h>=Gr&&N()},blockSelector:`[${fe}], [${Q}]`,recordCanvas:!0,inlineStylesheet:!0,inlineImages:!1,collectFonts:!0,sampling:{mousemove:!1,mouseInteraction:!1,scroll:100,canvas:15},errorHandler(g){return f.push(g instanceof Error?g.message:String(g)),!0}})}catch(g){throw s(),g}if(!x)throw s(),new Error("rrweb could not start the DOM recording");const k=e.ownerDocument.defaultView??window,w={width:k.innerWidth,height:k.innerHeight,dpr:k.devicePixelRatio},_=xe(e),Z=xe(t),Me=H.mirror.getId(e),fn=H.mirror.getId(t),it=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>{H.addCustomEvent("vgai-canvas-layout",{rect:xe(t),drawingWidth:t.width,drawingHeight:t.height,dpr:k.devicePixelRatio})});it?.observe(t),H.addCustomEvent("vgai-canvas-layout",{rect:Z,drawingWidth:t.width,drawingHeight:t.height,dpr:k.devicePixelRatio});const mn=k.setInterval(N,Br),ct=()=>{k.clearInterval(mn),it?.disconnect(),s()};return{markVideoStarted(g){P=g},async stop(g){if(v)throw new Error("gameplay DOM recording is already stopped");if(v=!0,H.addCustomEvent("vgai-recording-stop",{}),x(),ct(),N(),await D,y)throw y;return{version:1,recorder:"rrweb@2.1.6",events:"events.json",assets:"assets/",video:g,videoStartEpochMs:P,firstEventEpochMs:m,viewport:w,surface:_,surfaceNodeId:Me,canvas:{...Z,nodeId:fn,drawingWidth:t.width,drawingHeight:t.height},eventCount:d,assetCount:p.size,assetBytes:u,rrwebErrors:f}},async abort(){v||(v=!0,x(),ct(),i.length=0,await D)}}}function Jr(){let e=null,t=!1,n=null;const o=`
|
|
3
|
+
let canvas;
|
|
4
|
+
onmessage = async ({data}) => {
|
|
5
|
+
const {bitmap, width, height, type, quality} = data;
|
|
6
|
+
try {
|
|
7
|
+
if (!canvas) canvas = new OffscreenCanvas(width, height);
|
|
8
|
+
if (canvas.width !== width) canvas.width = width;
|
|
9
|
+
if (canvas.height !== height) canvas.height = height;
|
|
10
|
+
const context = canvas.getContext('2d');
|
|
11
|
+
if (!context) throw new Error('No worker canvas context');
|
|
12
|
+
context.globalCompositeOperation = 'copy';
|
|
13
|
+
context.drawImage(bitmap, 0, 0, width, height);
|
|
14
|
+
bitmap.close();
|
|
15
|
+
const blob = await canvas.convertToBlob({type, quality});
|
|
16
|
+
postMessage({blob});
|
|
17
|
+
} catch (error) {
|
|
18
|
+
bitmap.close();
|
|
19
|
+
postMessage({error: error instanceof Error ? error.message : String(error)});
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
`;function r(s){const i=n;n=null,e?.terminate(),e=null,i?.reject(s)}return{encode(s,i,p,f,h){return t?Promise.reject(new Error("Recording preview encoder stopped")):n?Promise.reject(new Error("Recording preview already in flight")):new Promise((d,u)=>{const c={resolve:d,reject:u};n=c;try{if(!e){const a=URL.createObjectURL(new Blob([o],{type:"text/javascript"}));try{e=new Worker(a)}finally{URL.revokeObjectURL(a)}e.onmessage=({data:m})=>{if(m.error||!m.blob){r(new Error(m.error??"No recording preview image"));return}const P=n;n=null,P?.resolve(m.blob)},e.onerror=m=>{m.preventDefault(),r(new Error(m.message||"Recording preview worker failed"))},e.onmessageerror=()=>r(new Error("Recording preview worker message failed"))}createImageBitmap(s).then(a=>{if(t||n!==c||!e){a.close();return}try{e.postMessage({bitmap:a,width:i,height:p,type:f,quality:h},[a])}catch(m){a.close(),r(m instanceof Error?m:new Error(String(m)))}},a=>{n===c&&r(a instanceof Error?a:new Error(String(a)))})}catch(a){r(a instanceof Error?a:new Error(String(a)))}})},dispose(){t=!0,r(new Error("Recording preview encoder stopped"))}}}let F=null;const wt=1,vt=60,Zr=30,Re=2,Qr=1e3/Re,Ie=12e4,eo=Ie/1e3*Re,to=256,no="image/webp",ro=.72;function oo(e,t){const n="'use strict';var t=null;onmessage=function(e){clearInterval(t);t=null;if(e.data&&e.data.ms>0){t=setInterval(function(){postMessage(0)},e.data.ms)}};";try{const o=URL.createObjectURL(new Blob([n],{type:"text/javascript"})),r=new Worker(o);URL.revokeObjectURL(o);let s=null;return r.addEventListener("error",i=>{i.preventDefault(),s===null&&(s=window.setInterval(t,e))}),r.addEventListener("message",()=>t()),r.postMessage({ms:e}),{stop(){r.postMessage({ms:0}),r.terminate(),s!==null&&window.clearInterval(s)}}}catch{const o=window.setInterval(t,e);return{stop(){window.clearInterval(o)}}}}function so(e){const t=e??Zr;if(!Number.isFinite(t)||!Number.isInteger(t)||t<wt||t>vt)throw new Error(`gameplay recording fps must be an integer from ${wt} to ${vt}`);return t}function ao(e){const n=(e?["video/webm;codecs=vp9,opus","video/webm;codecs=vp8,opus","video/webm"]:["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"]).find(o=>MediaRecorder.isTypeSupported(o));if(!n)throw new Error("this browser exposes MediaRecorder but no WebM video codec");return n}function Qe(){Tn(F?.previewSnapshot??null)}function Le(e,t){e.previewSnapshot={startedAt:e.started.startedAt,width:e.started.width,height:e.started.height,liveEdgeMs:t,sampleFps:Re,retentionMs:Ie,frames:[...e.previewFrames],previewError:e.previewError},F===e&&Qe()}function io(e){for(const t of e.previewFrames)URL.revokeObjectURL(t.src);e.previewFrames.length=0}function en(e,t){if(e.stopping||e.previewEncoding||e.previewError||t<e.nextPreviewAt)return;e.nextPreviewAt=t+Qr;const n=Math.min(1,to/Math.max(1,e.output.width)),o=Math.max(1,Math.round(e.output.width*n)),r=Math.max(1,Math.round(e.output.height*n));e.previewEncoding=!0;const s=new Date().toISOString(),i=e.nextPreviewSequence;e.nextPreviewSequence+=1;const p=e.previewEncoder.encode(e.output,o,r,no,ro).then(f=>{if(e.stopping)return;if(!f){e.previewError="The browser could not encode recording previews.",Le(e,t);return}const h={sequence:i,mediaTimeMs:Math.max(0,Math.round(t)),capturedAt:s,src:URL.createObjectURL(f),width:o,height:r};for(e.previewFrames.push(h);e.previewFrames.length>eo||(e.previewFrames[0]?.mediaTimeMs??h.mediaTimeMs)<h.mediaTimeMs-Ie;){const d=e.previewFrames.shift();d&&URL.revokeObjectURL(d.src)}Le(e,h.mediaTimeMs)}).catch(f=>{e.stopping||(e.previewError=f instanceof Error?f.message:"The browser could not encode recording previews.",Le(e,t))}).finally(()=>{e.previewEncoding=!1});e.previewTask=p}function co(){if(F)throw new Error("a gameplay recording is already active; stop it before starting one");if(typeof MediaRecorder>"u")throw new Error("this browser does not support MediaRecorder gameplay capture")}function lo(e){e.stopping||e.drawing||performance.now()<e.nextFrameAt||(typeof document<"u"&&document.hidden&&(e.hidden=!0),e.drawing=!0,e.frameTask=(async()=>{const t=performance.now();try{if(e.options.refreshFrame?.(),e.started.format==="composite-webm"){const n=e.staging,o=e.overlayCache;if(!n||!o)throw new Error("gameplay recording: composite buffers unavailable");await _t(e.container,n,{canvasFrame:e.options.canvasFrame,snapshots:e.snapshots,overlayCache:o});const{output:r}=e,s=r.getContext("2d");if(!s)throw new Error("gameplay recording: output context unavailable");r.width!==n.width&&(r.width=n.width),r.height!==n.height&&(r.height=n.height),s.globalCompositeOperation="copy",s.drawImage(n,0,0),s.globalCompositeOperation="source-over",en(e,performance.now()-e.startedWallMs)}e.frames+=1}catch{e.frameErrors+=1}finally{e.drawing=!1;const n=performance.now()-t;e.nextFrameAt=t+Math.max(e.intervalMs/2,2*n)}})())}async function tn(e,t={}){co();const n=so(t.fps),o=t.format??"composite-webm",r=e.ownerDocument.createElement("canvas"),s=t.audio??null;let i=null,p=null,f=null;const h=In(),d=Rn();try{const u=await _t(e,r,{canvasFrame:t.canvasFrame,snapshots:h,overlayCache:d});if(u.canvases===0&&u.domOverlays===0)throw new Error("gameplay recording: no game layers are mounted");const c=Array.from(e.querySelectorAll("canvas")).filter(Mt);if(o==="canvas-dom"&&c.length!==1)throw new Error(`canvas-dom recording requires exactly one root canvas; this game has ${c.length}`);const a=o==="canvas-dom"?c[0]:r;if(typeof a.captureStream!="function")throw new Error("this browser cannot capture a canvas as a media stream");if(i=a.captureStream(n),s)for(const T of s.stream.getAudioTracks())i.addTrack(T);const m=ao(i.getAudioTracks().length>0),P=new MediaRecorder(i,{mimeType:m}),y=new Date().toISOString();p=await Pn({startedAt:y,mimeType:m,name:t.name??null,format:o}),o==="canvas-dom"&&(f=Xr(e,a,p),d.dispose());const D={format:o,startedAt:y,mimeType:m,width:a.width,height:a.height,fps:n,audio:i.getAudioTracks().length>0,layers:u,path:p.path,replayPath:p.replayPath,rotates:p.rotates,logFile:p.logFile},v={started:D,recorder:P,output:a,staging:o==="composite-webm"?e.ownerDocument.createElement("canvas"):null,stream:i,audio:s,sink:p,startedWallMs:performance.now(),intervalMs:1e3/n,container:e,options:{canvasFrame:t.canvasFrame,refreshFrame:t.refreshFrame},clock:null,frameTask:null,drawing:!1,nextFrameAt:0,snapshots:h,overlayCache:o==="composite-webm"?d:null,domRecording:f,previewEncoder:Jr(),previewFrames:[],previewSnapshot:{startedAt:y,width:a.width,height:a.height,liveEdgeMs:0,sampleFps:Re,retentionMs:Ie,frames:[],previewError:null},previewTask:null,previewEncoding:!1,previewError:null,nextPreviewAt:0,nextPreviewSequence:0,frames:1,frameErrors:0,hidden:typeof document<"u"&&document.hidden,recorderError:null,uploadError:null,uploads:Promise.resolve(),nextSequence:0,stopping:!1};return P.addEventListener("dataavailable",T=>{if(T.data.size===0||v.uploadError)return;const j=v.nextSequence;v.nextSequence+=1,v.uploads=v.uploads.then(async()=>{if(!v.uploadError)try{await An(v.sink,j,T.data)}catch(O){v.uploadError=O instanceof Error?O:new Error(String(O))}})}),P.addEventListener("error",T=>{v.recorderError=T.error??new Error("gameplay recording failed")}),P.addEventListener("start",()=>{v.domRecording?.markVideoStarted(Date.now())}),P.start(1e3),F=v,Qe(),o==="composite-webm"&&en(v,0),v.clock=oo(v.intervalMs,()=>lo(v)),D}catch(u){await f?.abort(),d.dispose(),p&&await Dt(p);for(const c of i?.getTracks()??[])c.stop();throw s?.dispose(),u}}async function nn(e){const t=F;if(!t)throw new Error("no gameplay recording is active");t.stopping=!0,t.clock?.stop(),t.clock=null,await t.frameTask,t.previewEncoder.dispose(),await t.previewTask;let n=!1;try{if(t.recorder.state!=="inactive"){const f=new Promise(h=>{t.recorder.addEventListener("stop",()=>h(),{once:!0})});t.recorder.stop(),await f}if(t.recorderError)throw t.recorderError;if(await t.uploads,t.uploadError)throw t.uploadError;const o=Math.max(0,Math.round(performance.now()-t.startedWallMs)),r=Math.round(o/1e3*t.started.fps),s={...t.started,durationMs:o,droppedFrames:Math.max(0,r-t.frames),frameErrors:t.frameErrors,effectiveFps:o>0?Math.round(t.frames/(o/1e3)*10)/10:0,hidden:t.hidden},i=t.sink.path.split(/[\\/]/).at(-1)??"video.webm",p=await t.domRecording?.stop(i);return await kn(t.sink,e??null,void 0,p?{...p,capture:{durationMs:s.durationMs,droppedFrames:s.droppedFrames,frameErrors:s.frameErrors,effectiveFps:s.effectiveFps,hidden:s.hidden,fps:s.fps,width:s.width,height:s.height,mimeType:s.mimeType,audio:s.audio}}:null),n=!0,s}finally{n||(await t.domRecording?.abort(),await Dt(t.sink)),F=null,Qe(),io(t),t.overlayCache?.dispose();for(const o of t.stream.getTracks())o.stop();t.audio?.dispose()}}function et(){return F!==null}function uo(){return F?.started??null}function rn(e,t){return Math.max(0,Math.floor(t-e))}function po(){const e=F;return e===null?null:{startedAt:e.started.startedAt,elapsedMs:rn(e.startedWallMs,performance.now())}}const Rs=Object.freeze(Object.defineProperty({__proto__:null,activeGameplayRecording:uo,activeGameplayRecordingTimeline:po,gameplayRecordingActive:et,recordingTimelineElapsedMs:rn,startGameplayRecording:tn,stopGameplayRecording:nn},Symbol.toStringTag,{value:"Module"})),tt=12e4,fo=5e3,bt=["keydown","keyup","pointerdown","pointermove","wheel","touchstart","touchmove"];let A=null,me=null,Et=0,mo=null,on=null;function ho(e){on=e}function go(){return!A||!et()?null:{path:A.started.path,format:A.started.format,replayPath:A.started.replayPath,startedAt:A.started.startedAt,rotates:A.started.rotates,logFile:A.started.logFile,idleAutoStopMs:tt}}function sn(){A&&(A.lastActivityMs=Date.now())}function yo(){if(typeof window>"u")return()=>{};const e=()=>sn();for(const t of bt)window.addEventListener(t,e,{capture:!0,passive:!0});return()=>{for(const t of bt)window.removeEventListener(t,e,{capture:!0})}}async function Is(e,t={}){if(A&&await nt("restart"),await me,!e)return b.warn("Play started, but gameplay recording did not: no game surface is mounted to record.","play-recording"),null;try{return A={started:await tn(e,{format:Array.from(e.querySelectorAll("canvas")).filter(Mt).length===1?"canvas-dom":"composite-webm",...t.name?{name:t.name}:{},...t.audio?{audio:t.audio}:{},...t.refreshFrame?{refreshFrame:t.refreshFrame}:{},...t.canvasFrame?{canvasFrame:t.canvasFrame}:{}}),lastActivityMs:Date.now(),poll:null,releaseInput:yo(),ending:!1},A.poll=window.setInterval(()=>{const o=A;!o||o.ending||Date.now()-o.lastActivityMs<tt||vo()},fo),go()}catch(n){return b.warn(`Play started, but gameplay recording did not: ${n instanceof Error?n.message:String(n)}`,"play-recording"),null}}async function nt(e){const t=A;if(!t||t.ending)return me;if(t.ending=!0,t.poll!==null&&window.clearInterval(t.poll),t.releaseInput?.(),A=null,!et())return null;const n=++Et,o=(async()=>{try{const r=await nn(e);return mo=r,r}catch(r){return b.warn(`Gameplay recording could not be finalized: ${r instanceof Error?r.message:String(r)}`,"play-recording"),null}finally{Et===n&&(me=null)}})();return me=o,o}function wo(e){const t=Math.round(e.durationMs/100)/10;return`${e.path} — ${t}s at ${e.effectiveFps} fps${e.hidden?" (tab hidden; that is the cadence actually captured, not the requested one)":""}`}async function vo(){const e=Math.round(tt/1e3),t=await nt("idle-autostop");b.log(t===null?`Play auto-stopped after ${e}s with no session command and no player input.`:`Play auto-stopped after ${e}s with no session command and no player input. Recording finalized: ${wo(t)}`,"play-recording"),on?.()}E().session.onCommandDispatched(()=>sn());const bo={source:"live",label:"live",detail:"Running DOM adopted from the playing game. Edits apply to this session only and are discarded when play stops."},St="structure is owned by the running React tree — play edits are live-DOM only and are discarded on stop; stop play to change structure in source";function Ce(e,t){const n=[];for(const o of _r(e).nodes.values())o.oid===t&&n.push(o.el);return n}function Pt(e){return e.style?e.style:null}function Eo(e){return{writeStyle:async(t,n,o)=>{const r=Ce(e,t);if(r.length===0)return{changed:!1,error:`no live element carries oid "${t}"`};for(const s of r){const i=Pt(s);i&&(i[n]=o)}return{changed:!0,route:"live-dom"}},removeStyle:async(t,n)=>{const o=Ce(e,t);if(o.length===0)return{changed:!1,error:`no live element carries oid "${t}"`};let r=!1;for(const s of o){const i=Pt(s),p=i?.[n];i&&p!==void 0&&p!==null&&p!==""&&(delete i[n],r=!0)}return{changed:r,route:"live-dom"}},writeText:async(t,n)=>{const o=Ce(e,t).filter(s=>s.children.length===0);if(o.length===0)return{changed:!1,error:`no live leaf element carries oid "${t}"`};const r=o[0]?.textContent??null;for(const s of o)s.textContent=n;return{changed:!0,prevText:r}},writeProp:async(t,n)=>({changed:!1,error:`prop "${n}" is owned by the running React element (its value lives at the parent call site, not in the DOM) — play edits are live-DOM only and are discarded on stop; stop play to change it in source`}),writeStruct:async()=>({changed:!1,error:St}),writeStructMany:async()=>({changed:!1,error:St})}}function So(e,t){return new kr(e,t,{writeBackend:Eo(e),provenance:bo})}function an(){return{id:"",journalSession:"",name:"",container:null,session:null,presentation:null,unregisterPerformanceSource:null,unsubscribeSystemAdapters:null,determinismDeclared:!1,resizeObserver:null,rootResources:[]}}const l=an(),M=[];let ee=[],U=null;const We=new Set;function cn(){return U&&(U===l.id||M.some(e=>e.id===U))?U:l.id}function Ts(){return l.id}function ks(e){return We.add(e),()=>We.delete(e)}function rt(){for(const e of We)e()}function _s(e){xt(e),cn()!==e&&(U=e,J(),rt())}function ve(e){if(!S)return!1;const{store:t}=S;return t.playState==="playing"&&t.activeViewportTab==="play"&&cn()===e&&er()}function At(e){try{return e.session?.game?.input}catch{return}}function J(){l.id&&At(l)?.setEnabled(ve(l.id));for(const e of M)At(e)?.setEnabled(ve(e.id))}Ln(J);let S=null;const he=new Set;function Po(){return S?Promise.resolve():new Promise((e,t)=>{const n=()=>{clearTimeout(o),he.delete(n),e()},o=setTimeout(()=>{he.delete(n),t(new Error("Play mode failed to start: the editor shell did not bind within 15 seconds."))},15e3);he.add(n)})}const Be=new Set,be=new Set;let Ee=null;function ln(){return Ee}function Ms(e){return be.add(e),()=>be.delete(e)}function Ao(e){Ee=e;for(const t of be)t();E().live.notifyChanged()}const Fe=new Set;function Ro(){if(Fe.size>0){const e=[...Fe].map(t=>({severity:"warn",message:t}));Fe.clear(),Gn("console-resolved",{conditions:e,by:"play-mode"})}if(Ee!==null){Ee=null;for(const e of be)e();E().live.notifyChanged()}}function Te(){un();for(const e of Be)e()}function Ds(e){return Be.add(e),()=>Be.delete(e)}let R=0,ot=null,Se=null;pr();let Ge=null,ge;function de(e){const t={...e.capabilities,persist:!1},n=cr(),o=()=>Jn({resolve:()=>Zn("play edits are session-local by architecture",Qn),record:()=>{}}),r=e.transforms,s=r&&{...r,get:f=>r.get(f),beginEdit:f=>r.beginEdit(f),apply:(f,h)=>r.apply(f,h),endEdit:f=>(r.endEdit(f),o()),...r.remove?{remove:()=>o()}:{}},i=e.inspector,p=i&&{...i,properties:f=>i.properties(f),get:(f,h)=>i.get(f,h),set:(f,h,d)=>(i.set(f,h,d),o()),...i.remove?{remove:()=>o()}:{}};return new Proxy(e,{get(f,h){if(h==="capabilities")return t;if(h==="persistence")return n;if(h==="transforms"&&s)return s;if(h==="inspector"&&p)return p;const d=Reflect.get(f,h,f);return typeof d=="function"?d.bind(f):d}})}function Io(){ge!==void 0&&(Vt(ge),ge=void 0)}async function To(e,t,n,o,r){ge=rr();const s=[],i=[],p=()=>{for(const d of i)"dispose"in d&&typeof d.dispose=="function"&&d.dispose()};for(const d of t){const u=n?zn(n,d.id):void 0,c=u?{zOrder:u.zOrder,pausable:u.pausable,...u.entry?{content:`Entry · ${u.entry}`}:{}}:{};if(u?.adapter.identity==="ingest-react"){s.push({worldId:d.id,kind:d.kind,adapter:new ut(e,{id:d.id,kind:d.kind,adapter:u.adapter.identity,entryOrScenePath:u.entry,zOrder:u.zOrder,pausable:u.pausable}),...c});continue}const a=d.mounted;if(a.kind==="three"){const m=d.id===o&&a.scene===e.scene,P=m?await Pr():void 0;if(!r()){p();return}const y=m?Ar(e,a.scene,wr(d.id),je(d.id),{explicitSourceCommit:!0,sourceAnchor:P}):Rr(e,a.scene,{frameControl:"host",journal:je(d.id)});i.push(y),s.push({worldId:d.id,kind:d.kind,adapter:de(y),...c})}else if(a.kind==="canvas"){if(a.substrate.name==="babylon"){const{BabylonAuthoringAdapter:_}=await C(async()=>{const{BabylonAuthoringAdapter:Me}=await import("./babylon-authoring-adapter-CL02gWDn.js");return{BabylonAuthoringAdapter:Me}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]));if(!r()){p();return}const Z=new _(a.substrate.root,e,{canvas:a.canvas,api:a.substrate.api,provenance:{source:"live",label:"live",detail:"Native Babylon.js play scene; ordinary Play edits are ephemeral."}});i.push(Z),s.push({worldId:d.id,kind:d.kind,adapter:de(Z),...c});continue}if(a.substrate.name!=="pixi"){const _=new ut(e,{id:d.id,kind:d.kind,adapter:a.substrate.name,entryOrScenePath:u?.entry,zOrder:u?.zOrder??0,pausable:u?.pausable??!0},`No authoring adapter is registered for canvas substrate "${a.substrate.name}".`);i.push(_),s.push({worldId:d.id,kind:d.kind,adapter:_,...c});continue}const m=a.substrate.root,[P,y,D,v,T]=await Promise.all([C(()=>import("./physics-registry-B2Jkp8e6.js"),[]),C(()=>import("./system-adapters-rIC8FSGP.js"),[]),C(()=>import("./pixi-authoring-adapter-CjibysC3.js"),__vite__mapDeps([15,16,1,2,3,4,5,6,7,8,9,10,11,13,14,12,17])),C(()=>import("./pixi-live-write-target-DuWydlWb.js"),__vite__mapDeps([18,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17])),C(()=>import("./canvas-entry-runtime-SfBxaR9M.js"),__vite__mapDeps([19,1,2,3,4,5,6,7,8,9,10,11]))]);if(!r()){p();return}const{createPhysics2DRegistry:j}=P,{createPhysicsAdapter2D:O}=y,{PixiAuthoringAdapter:N}=D,{createLiveCanvasWriteTarget:x}=v,k=O(d.physics2d??j()),w=new N(m,e,{pixi:await T.resolveCanvasPixiForEditor(),target:x({physics:k}),journal:je(d.id),surface:Mo});i.push(w),s.push({worldId:d.id,kind:d.kind,adapter:de(w),...c})}else if(a.kind==="dom"){const m=So(a.container,e);i.push(m),s.push({worldId:d.id,kind:d.kind,adapter:de(m),...c})}else Sr(a,"installPlayRootAuthoring")}if(!r()){p();return}l.rootResources=i;const f=Hn(Ae()?.config),h=new Kn(s,void 0,f);Vt(h),e.notifyIngestEdit()}function je(e){return Wt(l.id,e)}function ko(e){for(const t of l.rootResources)"dispose"in t&&typeof t.dispose=="function"&&t.dispose();l.rootResources=[],l.journalSession&&(e.projectHistory?.expireSession(l.journalSession),l.journalSession="")}function _o(e){return!(e.defaultPrevented||nr(e.target))}let te=null,ne=null,re=null,oe=null,se=null,V=Promise.resolve(),ye=null,W=[],we=0;function dn(){const e=l.session?.game;if(!e)return{};const t=e.roots,n=l.presentation?.worldId??(t.length===1?t[0]?.id:void 0),o=e.loop.timeScale;return{...n!==void 0?{world:n}:{},...typeof o=="number"?{simSpeed:o}:{}}}function ze(){const e=l.session?.game?.systemAdapters?.debug;if(e)try{const t=Wr(e.events(we),we);we=t.lastSeq;const n=dn();for(const o of t.entries)W.push({...o,...n})}catch{}}Cn(()=>{l.session&&Ao("Project assets changed — restart play to load the revised models or textures.")});function Mo(){return E().workspace.liveDocument.container()}function Do(){const e=()=>{const t=E().workspace.liveDocument.container();if(!t)return;const n=typeof document<"u"?document.activeElement:null;n instanceof HTMLElement&&n!==t&&n.tagName==="BUTTON"&&n.blur(),t.hasAttribute("tabindex")||(t.tabIndex=-1);try{t.focus({preventScroll:!0})}catch{}Xn("viewport")};e(),setTimeout(e,150),setTimeout(e,600)}Fn(e=>Oo(e));function Oo(e){S={store:e,gameContainer:null},ho(Y);for(const t of he)t()}function Ne(){return l.session!==null}function ue(){const e=l.session?.game;if(!e)return null;const t=Ye(e),n=t?.getRunTicksTarget()??null;return{getInputTarget:o=>t?.getVirtualInputTarget(o)??null,loop:e.loop,runTicks:n?n.runTicks.bind(n):null,runTicksSettled:t&&n?(o,r)=>Er(t,o,r):null,random:vr(e),determinismDeclared:l.determinismDeclared}}function Os(){const e=l.session?.game.defaultRoot.mounted;return e?.kind==="three"?e.scene:null}function xs(){const e=l.session?.game?.roots;return e?e.map(t=>{const n=t.mounted;let o=!1;if(n.kind==="three")o=gr(n.scene);else if(n.kind==="canvas")try{o=n.substrate.name==="pixi"?hr(n.substrate.root):n.substrate.name==="babylon"?(n.substrate.root.scenes??[]).some(r=>(r.rootNodes?.length??0)>0):!1}catch{o=!1}else o=yr(n.container);return{rootId:t.id,kind:n.kind,hasRenderableContent:o}}):[]}function xo(){return l.session?Ot(E().workspace.liveDocument.container()).canvas:null}function Lo(e){return!e||e===l.id?E().workspace.liveDocument.container():M.find(t=>t.id===e)?.container??null}function Ls(e){if(!e||e===l.id)return xo();const t=M.find(n=>n.id===e);return t?.session?Ot(t.container).canvas:null}function Co(){return ot}function Fo(){return Se}function G(){return[l,...M].filter(e=>e.session)}const pe=new Set;function un(){const e=new Set(G().map(t=>t.session.game.loop));for(const t of pe)e.has(t)||pe.delete(t);for(const t of e)lr()?pe.delete(t)&&t.start():t.liveness!=="stopped"&&(pe.add(t),t.stop())}dr(un);function Rt(){const e=G(),t=tr();return e.find(n=>n.id===t)??e[0]??null}let Pe=null;function jo(){Pe?.(),Pe=Yn(()=>({projectName:Ae()?.config.name??null,instanceName:G().length>1?Rt()?.name??null:null})),qt(()=>{const e=Rt();return e?.session?{game:e.session.game,instanceId:e.id,recording:or}:null})}function No(){Pe?.(),Pe=null,qt(null)}function Cs(e,t,n){for(const o of G())o.session?.resize(e,t,n)}let It=Promise.resolve(),ke=null,st=null;function Fs(){return ke}function $o(){const e=globalThis.crypto?.randomUUID?.()??`private-${Date.now()}`;return{mode:"private",id:e,roomKey:`private:${e}`,revision:null,participantId:On}}function Tt(e,t=$o(),n,o){const r=o??null,s=It.then(()=>(Mn(),Vo(e,t,n??null,r).finally(()=>{Dn()})));return It=s.then(()=>{},()=>{}),s}async function Uo(e){const{autoLaunchIngest:t}=await C(async()=>{const{autoLaunchIngest:r}=await import("./mount-ingest-root-glv2SSWf.js").then(s=>s.m);return{autoLaunchIngest:r}},__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10,11,21,22,23,14,24]));await t(e);const n=mr();if(n)return n.play(),!0;const{isModuleModeActive:o}=await C(async()=>{const{isModuleModeActive:r}=await import("./module-mode-DVBLT9d-.js");return{isModuleModeActive:r}},__vite__mapDeps([25,1,2,3,4,5,6,7,8,9,10,11,23,22,26,27,28,29,24,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,19,49,50,51,52,53,54,55]));return o()}function $e(e,t){return q(e),qr(e,t,{isHidden:()=>typeof document<"u"&&document.hidden,editorUrl:typeof window<"u"?window.location.href:void 0})}async function Vo(e,t,n,o){if(!S){const c=R;if(q("waiting for the editor to bind Play"),await Po(),R!==c)throw new Error("Play start cancelled while waiting for the editor to bind.")}if(!S)throw new Error("Play mode failed to start: the editor shell is not bound.");if(q("waiting for the project bootstrap to settle"),await jn(),l.session&&Y(),st=o,await Uo(S.store)||await Ir(S.store))return;const r=++R;ke=t,ot=Date.now(),Se=null;const{store:s}=S;Yo();const i=V.then(()=>Mr(n));if(V=i,await $e("starting the play log session",i),r!==R||(W=[],we=0,b.setSink(c=>{let a;try{const m=l.session?.game?.systemAdapters.debug?.state("time");typeof m?.tick=="number"&&typeof m.simSeconds=="number"&&(a={tick:m.tick,simT:m.simSeconds})}catch{}W.push({t:c.timestamp,level:c.level,msg:c.message,...c.source?{source:c.source}:{},...c.subsystem?{sub:c.subsystem}:{},...c.metadata?{meta:c.metadata}:{},...a??{},...dn()})}),ye=setInterval(()=>{if(ze(),W.length>0){const c=W.splice(0);V=V.then(()=>Ht(c))}},200),te=c=>{c.key==="Escape"&&_o(c)&&Y()},window.addEventListener("keydown",te),q("opening the Game document"),await E().workspace.liveDocument.acquire(),r!==R))return;const p=E().workspace.liveDocument.container();if(!p){const c="Play mode failed to start: the game container is not mounted in the workspace.";throw b.error(c,"play-mode"),Y(),new Error(c)}const f=p.clientWidth,h=p.clientHeight;p.style.contain||(p.style.cssText+=zt),Lt(p),Ue(p),E().viewport.transition.begin(),s.setPlayState("playing"),Do(),b.log("Play mode started","play-mode"),E().viewport.transition.onSettled(()=>{r===R&&s.playState==="playing"&&Nn()});let d=null,u=null;try{const c=Ae();if(!c)throw new Error("No project open — open or create a project first");const a=await $e("fetching the project manifest",Ct());ee=le(a).map(w=>w.id);for(const w of ee)dt({rootId:w,mechanism:"host-mount",source:"declared",state:"waiting"});let m;Ft();const{entries:P,mountId:y}=await $e("resolving the project's root entries",Bt(a,c.rootPath,{selectionOverride:o??void 0}));if(b.log(`Resolved manifest composition (${le(a).length} world${le(a).length===1?"":"s"}): `+le(a).map(w=>`${w.id} (${w.surface})`).join(", "),"play-mode"),r!==R)return;const D=p.clientWidth||f,v=p.clientHeight||h;Ue(p,y),d=y,q("mounting the runtime roots");const{mountManifestRoots:T}=await C(async()=>{const{mountManifestRoots:w}=await import("./mount-manifest-CGVxhmAw.js");return{mountManifestRoots:w}},__vite__mapDeps([56,30,1,2,3,4,5,6,7,8,9,10,11,57,58,59,60,61,62,63,64,65,66,67,29,68,69,70,71,72,43,44,73,74,75,76,77,78,79,80,81,82,83,84,85,86]));if(m=await T({manifest:a,container:p,entries:P,width:D,height:v,seed:e,playtest:t}),u=m,r!==R){m.stop(),ie(m,y,"Cancelled instance");return}for(const w of jt(c.rootPath))b.error(Nt(w),"play-mode");for(const w of ee)dt({rootId:w,mechanism:"host-mount",source:"declared",state:"ready"});if(Kt(m.game),l.session=m,l.id=y,l.journalSession=Wt(y,"").session,l.name=pn(0),l.unregisterPerformanceSource?.(),l.unregisterPerformanceSource=$t({id:"workspace:game",label:"Game runtime",kind:"game",instanceId:y,profiler:m.game.profiler}),Ro(),l.determinismDeclared=a.determinism?.seededRandom===!0,a.configurations.some(w=>w.kind==="process")&&Ye(m.game)?.setRoomDeclared(!0),Te(),s.setPlayEditRegime("ephemeral"),l.presentation=E().viewport.presentRoots(m.game.roots),q("installing play authoring for each root"),await To(s,m.game.roots,a,l.presentation?.worldId??null,()=>r===R),r!==R)return;q("binding the editor to the running game");const j=m.game.systemAdapters;ae(j,y),xt(y),jo(),l.unsubscribeSystemAdapters?.(),l.unsubscribeSystemAdapters=m.game.subscribeSystemAdapters?.(()=>{Ut(m.game.systemAdapters,y)})??null,Xe(()=>ve(y),y),J(),Ge=s.subscribe(J);const O=$n(j.physics);s.setEcsSyncTransform((w,_)=>{!O||O.ownerOf(w)==="unresolved"||O.commit(w,{position:_.position.toArray(),rotation:_.quaternion.toArray(),scale:_.scale.toArray()})});const N=jr(),x=p.clientWidth,k=p.clientHeight;x>0&&k>0&&(x!==f||k!==h||N!==null)&&m.resize(x,k,N??void 0),E().viewport.transition.ready(()=>{const w=l.session?.game;if(!w)return null;for(const _ of w.roots)if(_.mounted.kind==="three")return _.mounted.camera;return null})}catch(c){const a=`Play mode failed to start: ${c}`;if(b.error(a,"play-mode"),d!==null&&l.id!==d)if(u){try{u.stop()}catch(m){b.error(`Error stopping the failed play session: ${m}`,"play-mode")}ie(u,d,"Failed instance")}else _e(d,"Failed instance");throw r===R&&Y(),new Error(a)}}async function js(e,t){if(!S)throw new Error("Cannot mount an additional instance: play mode is not bound.");if(!l.session)throw new Error("Cannot mount an additional instance: no primary play session is running.");const n=R,o=Ae();if(!o)throw new Error("Cannot mount an additional instance: no project is open.");const r=await Ct();Ft();const{entries:s,mountId:i}=await Bt(r,o.rootPath,{selectionOverride:st??void 0});e.style.contain||(e.style.cssText+=zt),Lt(e),Ue(e,i);const{mountManifestRoots:p}=await C(async()=>{const{mountManifestRoots:c}=await import("./mount-manifest-CGVxhmAw.js");return{mountManifestRoots:c}},__vite__mapDeps([56,30,1,2,3,4,5,6,7,8,9,10,11,57,58,59,60,61,62,63,64,65,66,67,29,68,69,70,71,72,43,44,73,74,75,76,77,78,79,80,81,82,83,84,85,86])),f=await p({manifest:r,container:e,entries:s,width:e.clientWidth,height:e.clientHeight,playtest:ke});for(const c of jt(o.rootPath))b.error(Nt(c),"play-mode");if(n!==R||!l.session){try{f.stop()}catch{}return ie(f,i,t?.trim()||"Cancelled instance"),i}Kt(f.game);const h=an();h.id=i,h.name=t?.trim()||pn(M.length+1),h.container=e,h.session=f,h.unregisterPerformanceSource=$t({id:`workspace:game:${i}`,label:`Game runtime (instance ${i})`,kind:"game",instanceId:i,profiler:f.game.profiler});const d=f.game.systemAdapters;ae(d,i),h.unsubscribeSystemAdapters=f.game.subscribeSystemAdapters?.(()=>{Ut(f.game.systemAdapters,i)})??null,Xe(()=>ve(i),i),M.push(h),J();const u=l.session.game.systemAdapters;return ae(u,l.id),Te(),i}function qo(){return M.map(e=>e.id)}function Ns(){const e=[];l.id&&e.push({id:l.id,name:l.name});for(const t of M)t.id&&e.push({id:t.id,name:t.name});return e}function Wo(e){return l.id===e?l.name:M.find(t=>t.id===e)?.name}function _e(e,t){e&&(Gt(e),ur(e,t))}function ie(e,t,n){e.stopComplete.then(()=>_e(t,n))}function Bo(e){const t=M.findIndex(r=>r.id===e);if(t<0)return;const[n]=M.splice(t,1);if(!n)return;n.unsubscribeSystemAdapters?.(),n.unsubscribeSystemAdapters=null;const o=n.session;try{o?.stop()}catch(r){b.error(`Error stopping additional instance ${n.id}: ${r}`,"play-mode")}n.unregisterPerformanceSource?.(),ae(null,n.id),o?ie(o,n.id,n.name):_e(n.id,n.name),n.container=null,n.session=null,U===e&&(U=null,J(),rt()),Te()}function Go(){for(const e of qo())Bo(e)}let X=[];const He=new Set;function at(e){if(e===0){const t=xn()?.getPlayerIdentity?.()?.name?.trim();if(t)return t}return`Instance ${e+1}`}function $s(){return X.length===0?0:X.length-1}function pn(e){return X[e]??at(e)}function Us(e){return He.add(e),()=>He.delete(e)}function zo(){for(const e of He)e()}function Ho(e){const t=Math.max(0,Math.floor(e));Ko(t===0?[]:Array.from({length:t+1},(n,o)=>at(o)))}function Ko(e){const t=e.length<=1?[]:e.map((n,o)=>n?.trim()?n.trim():at(o));t.length===X.length&&t.every((n,o)=>n===X[o])||(X=t,zo())}function Y(){if(R++,_n(),!S||(nt("teardown"),No(),st=null,Tr(S.store)))return;ke=null,U=null,rt();const{store:e}=S;ze(),Ho(0),Go(),E().viewport.transition.end(),e.setEcsSyncTransform(null);const t=l.id,n=l.name||"Game instance";l.id="",l.unsubscribeSystemAdapters?.(),l.unsubscribeSystemAdapters=null,ae(null,t),l.presentation?.dispose(),l.presentation=null,ko(e),Io(),e.setPlayEditRegime(null);const o=l.session;if(o)try{o.stop()}catch(r){b.error(`Error stopping play session: ${r}`,"play-mode")}finally{l.unregisterPerformanceSource?.(),l.unregisterPerformanceSource=null,l.session=null,l.determinismDeclared=!1,Te()}o?ie(o,t,n):_e(t,n);for(const r of ee)Un(r);if(ee=[],Ge?.(),Ge=null,Xe(()=>!0),Gt(),l.resizeObserver?.disconnect(),l.resizeObserver=null,te&&(window.removeEventListener("keydown",te),te=null),b.log("Play mode stopped","play-mode"),Vn(),ye&&(clearInterval(ye),ye=null),ze(),b.setSink(null),W.length>0){const r=W.splice(0);V=V.then(()=>Ht(r))}V=V.then(()=>Dr()),Xo(),e.setPlayState("stopped"),E().workspace.liveDocument.release(),ot!==null&&Se===null&&(Se=Date.now())}function Vs(){if(!(!l.session||!S)){for(const e of G())e.session?.pause();S.store.setPlayState("paused"),b.log("Play mode paused","play-mode")}}function qs(){if(!(!l.session||!S)){for(const e of G())e.session?.resume();S.store.setPlayState("playing"),b.log("Play mode resumed","play-mode")}}function Ws(){if(l.session)for(const e of G())e.session?.step()}function Yo(){qn(),ne=console.log,re=console.info,oe=console.warn,se=console.error;const e=(t,n)=>{if(br)return;const o=fr();b.logStructured(t,Bn(n),"game",void 0,o?{instanceId:o,instanceName:Wo(o)??`Instance ${o}`}:void 0)};console.log=(...t)=>{ne?.apply(console,t),e("info",t)},console.info=(...t)=>{re?.apply(console,t),e("info",t)},console.warn=(...t)=>{oe?.apply(console,t),e("warn",t)},console.error=(...t)=>{se?.apply(console,t),e("error",t)}}function Xo(){Wn(),ne&&(console.log=ne),re&&(console.info=re),oe&&(console.warn=oe),se&&(console.error=se),ne=null,re=null,oe=null,se=null}E().live.register({id:"play",priority:0,mounted:Ne,playing:Ne,stop:Y,instanceContainer:e=>Lo(e),startedAt:Co,endedAt:Fo,restartRequired:ln,restart:()=>void Tt(),remount:async e=>{try{return await Tt(void 0,void 0,void 0,e),Ne()?{ok:!0}:{ok:!1,error:"Play did not start: the remount was superseded before it finished booting."}}catch(t){return{ok:!1,error:t instanceof Error?t.message:String(t)}}}});E().session.reportFacet(()=>({timeScale:ue()?.loop.timeScale??null,loopLiveness:ue()?.loop.liveness??null,restartRequired:ln(),seed:ue()?.random?.seed??null,deterministic:ue()?.determinismDeclared??!1}));export{go as A,tn as B,po as C,Os as D,Yt as E,Zt as F,Es as G,vs as H,bs as I,ys as J,ws as K,ks as L,Ps as M,Nr as N,As as O,Cs as P,_s as Q,Ts as R,pn as S,xs as T,Ds as U,js as V,Bo as W,Ss as X,Fr as Y,Rs as Z,Ns as a,Ho as b,nn as c,Ws as d,Tt as e,nt as f,ue as g,Y as h,Ne as i,Is as j,Fs as k,Dr as l,Ht as m,sn as n,Mr as o,Vs as p,Mo as q,qs as r,Ko as s,cn as t,Us as u,$s as v,Ms as w,ln as x,Lo as y,Ls as z};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-GIL7oGEO.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/three.module-D396a9Mn.js","assets/index-D2fNXpHa.css","assets/gameplay-export-BoKXm51x.js","assets/wav-encode-D31zWF6O.js","assets/output-DK8waum9.js","assets/play-mode-BFU2PCkG.js","assets/native-debug-module-CWicoSGD.js","assets/native-entry-surface-BE8LJNdu.js","assets/debug-registry-Dgvitx8M.js","assets/playtest-BXIL1JEF.js","assets/game-contract-seams-a5YXejOu.js","assets/instruments-CKR02Y8I.js","assets/frame-pacing-D5acoOzO.js","assets/edit-mode-authoring-B47TfLqu.js","assets/json-history-resource-BbxllWfV.js","assets/binding-resolver-Dsh-6Vor.js","assets/adapter-surface-Y37Nzcyw.js","assets/entry-adjudication-Cq8Yeb74.js","assets/r3f-root-factory-z9llD1OU.js","assets/register-render-vitals-BiZk29b2.js","assets/render-census-BrQX_CXv.js","assets/structural-signature-0w-i_ats.js","assets/render-vitals-BZ5HtvMi.js","assets/static-batch-advisor-B13QEH7d.js","assets/webgl-frame-capture-FlF9zQmW.js","assets/world-state-BWG-IcOd.js","assets/frame-selector-cache-cCeUbcjG.js","assets/dev-build-gDYrq68M.js","assets/game-input-seams-CIQdetRw.js","assets/seeded-random-i3mtgBKZ.js","assets/render-seed-DF4JHy7P.js","assets/frame-delta-D2nsw_Ht.js","assets/events-156d8d12.esm-ErOhDXXB.js","assets/index-bQE2NA0D.js","assets/realm-services-CobQsq_X.js","assets/canvas-entry-runtime-SfBxaR9M.js","assets/three-ingest-runtime-QzDYk6tU.js","assets/EffectComposer-DQxfsXBZ.js","assets/CopyShader-BzTUYzf6.js","assets/ShaderPass-QYRpPuFJ.js","assets/CSS3DRenderer-CL7ABLVK.js","assets/relative-path-guard-GiM7Lsz8.js","assets/capability-coverage-Czas4C18.js","assets/react-root-CEz5NTck.js","assets/editor-presentation-activity-C7SNSmTd.js","assets/active-ingest-CT6jSGhr.js","assets/ingest-source-persistence-C_6Hiyra.js","assets/pixi-story-model-DNkfnWUV.js","assets/surface-content-Dg9Kkazf.js","assets/viewport-root-presentation-CWsE56K6.js","assets/mounted-authoring-Dmg5xmhP.js","assets/three-CDSueJyJ.js","assets/viewport-pick-context-DkawXbEi.js","assets/logger-Dqis-7W1.js","assets/run-ticks-settled-C4ksViyA.js","assets/three-authoring-adapter-CmSQ3Vui.js","assets/source-persistence-backend-C-aR-B_Y.js","assets/three-projection-core-BmKMZ-nf.js","assets/body-marks-h_xDxiDE.js","assets/user-data-BB2Of6Ht.js","assets/object-marks-DwvIEBOK.js","assets/structural-ids-Dc-7rEwi.js","assets/object3d-authoring-subject-CH5sI2oP.js","assets/rapier-physics-adapter-CaZqWLu0.js","assets/r3f-physics-binding-BBo8oma9.js","assets/deferred-ingest-play-DCJi_Pgu.js","assets/rrweb-Cd2ifIRP.js","assets/react-world-authoring-adapter-DmrwM3py.js","assets/board-guides-DziKSTss.js","assets/writer-B-KovzkA.js","assets/story-arg-descriptors-Ek86ExX7.js","assets/inspect-BZfi3mmo.js","assets/inference-diagnostics-Dhmtfbq_.js","assets/editor-api-BoJIcyZG.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{q as y,al as f,_ as c,am as b,ad as g}from"./index-GIL7oGEO.js";import{c as F,n as M,d as A,f as O,h as T,e as C,j as L,g as N,r as $,p as q}from"./play-mode-BFU2PCkG.js";import{r as W}from"./index-CtzuWnCS.js";import{n as z,s as R}from"./command-results-CUQD49AB.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-CinJrH5C.js";import"./three.module-D396a9Mn.js";import"./native-debug-module-CWicoSGD.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-Dgvitx8M.js";import"./playtest-BXIL1JEF.js";import"./game-contract-seams-a5YXejOu.js";import"./instruments-CKR02Y8I.js";import"./frame-pacing-D5acoOzO.js";import"./edit-mode-authoring-B47TfLqu.js";import"./json-history-resource-BbxllWfV.js";import"./binding-resolver-Dsh-6Vor.js";import"./adapter-surface-Y37Nzcyw.js";import"./entry-adjudication-Cq8Yeb74.js";import"./r3f-root-factory-z9llD1OU.js";import"./register-render-vitals-BiZk29b2.js";import"./render-census-BrQX_CXv.js";import"./structural-signature-0w-i_ats.js";import"./render-vitals-BZ5HtvMi.js";import"./static-batch-advisor-B13QEH7d.js";import"./webgl-frame-capture-FlF9zQmW.js";import"./world-state-BWG-IcOd.js";import"./frame-selector-cache-cCeUbcjG.js";import"./dev-build-gDYrq68M.js";import"./game-input-seams-CIQdetRw.js";import"./seeded-random-i3mtgBKZ.js";import"./render-seed-DF4JHy7P.js";import"./frame-delta-D2nsw_Ht.js";import"./events-156d8d12.esm-ErOhDXXB.js";import"./index-bQE2NA0D.js";import"./realm-services-CobQsq_X.js";import"./canvas-entry-runtime-SfBxaR9M.js";import"./three-ingest-runtime-QzDYk6tU.js";import"./EffectComposer-DQxfsXBZ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-QYRpPuFJ.js";import"./CSS3DRenderer-CL7ABLVK.js";import"./relative-path-guard-GiM7Lsz8.js";import"./capability-coverage-Czas4C18.js";import"./react-root-CEz5NTck.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./active-ingest-CT6jSGhr.js";import"./ingest-source-persistence-C_6Hiyra.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-CWsE56K6.js";import"./mounted-authoring-Dmg5xmhP.js";import"./three-CDSueJyJ.js";import"./viewport-pick-context-DkawXbEi.js";import"./logger-Dqis-7W1.js";import"./run-ticks-settled-C4ksViyA.js";import"./three-authoring-adapter-CmSQ3Vui.js";import"./source-persistence-backend-C-aR-B_Y.js";import"./three-projection-core-BmKMZ-nf.js";import"./body-marks-h_xDxiDE.js";import"./user-data-BB2Of6Ht.js";import"./object-marks-DwvIEBOK.js";import"./structural-ids-Dc-7rEwi.js";import"./object3d-authoring-subject-CH5sI2oP.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./r3f-physics-binding-BBo8oma9.js";import"./deferred-ingest-play-DCJi_Pgu.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-DmrwM3py.js";import"./board-guides-DziKSTss.js";import"./writer-B-KovzkA.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-BZfi3mmo.js";import"./inference-diagnostics-Dhmtfbq_.js";const hr="workspace.command";async function x(e){const{liveCanvasFrame:r}=await c(async()=>{const{liveCanvasFrame:t}=await import("./index-GIL7oGEO.js").then(o=>o.tY);return{liveCanvasFrame:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]));return r(e)}function H(){const e=N();e?.loop.liveness==="loop-starved"&&e.runTicks?.(1,{render:"last"})}function j(){const e=g().audio,r=e?.renderOffline;if(!e||!r)return;let t=null;try{const o=g().debug?.state("time");typeof o?.simSeconds=="number"&&Number.isFinite(o.simSeconds)&&(t=o.simSeconds)}catch{t=null}if(t!==null)return{startSeconds:t,render:r.bind(e)}}let m=null;const vr={play:{timeoutMs:12e4,derivedRefresh:"always",handle:async e=>{try{const o=e.seed,d=e.name;await C(typeof o=="number"?o:void 0,void 0,typeof d=="string"?d:null)}catch(o){return{ok:!1,error:o instanceof Error?o.message:String(o)}}if(!y().live.playing())return{ok:!1,error:"Play did not start: the run was superseded before it finished booting (a stop, or a newer play, landed during startup). Nothing is running."};const r=e.record,t=await L(f()??y().workspace.liveDocument.container(),{name:typeof r=="string"?r:null,audio:g().audio?.acquireRecordingStream?.()??null,canvasFrame:x,refreshFrame:H});return{ok:!0,...t?{data:{recording:t}}:{}}}},stop:{timeoutMs:3e4,derivedRefresh:"always",handle:async()=>{m?.abort(new Error("Video export cancelled by Stop."));const e=await O("stop");return T(),{ok:!0,...e?{data:{recording:e}}:{}}}},pause:{derivedRefresh:"always",handle:()=>(q(),{ok:!0})},resume:{derivedRefresh:"always",handle:()=>($(),{ok:!0})},step:{derivedRefresh:"always",handle:()=>(A(),{ok:!0})},"bridge-recording-export":{timeoutMs:6e5,derivedRefresh:"none",handle:async e=>{const r=y();if(r.session.playState()!=="paused")return{ok:!1,error:"Pause the game before exporting video."};const t=f();if(!t)return z();if(m)return{ok:!1,error:"A video export is already active."};const{exportGameplayVideo:o,validateGameplayExport:d,assertGameplayVideoSupport:S}=await c(async()=>{const{exportGameplayVideo:n,validateGameplayExport:l,assertGameplayVideoSupport:s}=await import("./gameplay-export-BoKXm51x.js");return{exportGameplayVideo:n,validateGameplayExport:l,assertGameplayVideoSupport:s}},__vite__mapDeps([11,12,0,1,2,3,4,5,6,7,8,9,10,13])),h={frames:Number(e.frames),fps:e.fps===void 0?30:Number(e.fps)};try{d(h)}catch(n){return R(n)}if(m)return{ok:!1,error:"A video export is already active."};const i=new AbortController;m=i,b(!0);const k=setTimeout(()=>i.abort(new Error("Video export exceeded its ten-minute deadline.")),59e4),v=r.live.runWindow()?.startedAt??null,_=r.session.subscribe(()=>{(r.session.playState()!=="paused"||(r.live.runWindow()?.startedAt??null)!==v)&&i.abort(new Error("Video export cancelled: the Play session changed."))}),w=j();try{await S(t),i.signal.throwIfAborted();const{gameplayRecordingActive:n}=await c(async()=>{const{gameplayRecordingActive:a}=await import("./play-mode-BFU2PCkG.js").then(p=>p.Z);return{gameplayRecordingActive:a}},__vite__mapDeps([14,0,1,2,3,4,5,6,7,8,9,10,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81]));n()&&await F();const{blob:l,...s}=await o(t,h,{step:()=>W.flushSync(()=>A()),assertActive:()=>{if(M(),r.session.playState()!=="paused"||f()!==t||(r.live.runWindow()?.startedAt??null)!==v)throw new Error("Video export interrupted: its game must remain paused and mounted.")},canvasFrame:x,signal:i.signal,...w?{audio:w}:{}}),{beginGameplayRecordingSink:E,appendGameplayRecordingChunk:P,finishGameplayRecordingSink:G,abortGameplayRecordingSink:V}=await c(async()=>{const{beginGameplayRecordingSink:a,appendGameplayRecordingChunk:p,finishGameplayRecordingSink:I,abortGameplayRecordingSink:D}=await import("./editor-api-BoJIcyZG.js");return{beginGameplayRecordingSink:a,appendGameplayRecordingChunk:p,finishGameplayRecordingSink:I,abortGameplayRecordingSink:D}},__vite__mapDeps([82,0,1,2,3,4,5,6,7,8,9,10,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81]));i.signal.throwIfAborted();const u=await E({startedAt:new Date().toISOString(),mimeType:"video/webm",purpose:"export",name:typeof e.name=="string"?e.name:`export-${Date.now()}`},i.signal);try{for(let a=0,p=0;a<l.size;a+=4*1024*1024,p++)i.signal.throwIfAborted(),await P(u,p,l.slice(a,a+4*1024*1024),i.signal);i.signal.throwIfAborted(),await G(u,s.audio?`fixed-step export with audio (${s.audio.codec}, ${s.audio.channels}ch @ ${s.audio.sampleRate} Hz)`:"fixed-step export, video only: this world has no AudioAdapter.renderOffline",i.signal),i.signal.throwIfAborted()}catch(a){throw await V(u),a}return{ok:!0,data:{...s,path:u.path}}}catch(n){return R(n)}finally{_(),clearTimeout(k),m=null,b(!1)}}}};export{vr as commands,hr as point};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{R as c,C as d,A as _,N as u,d as p,e as f,tk as b,tl as y,tm as m,tn as S,to as O,tp as g,tq as E,tr as T,ts as j,tt as P,tu as A,c1 as M,c2 as h}from"./index-GIL7oGEO.js";import{GAME_SYSTEM_ADAPTERS_SHAPE as I}from"./game-contract-seams-a5YXejOu.js";const Y=Object.freeze(Object.defineProperty({__proto__:null,EDITOR_VIEW_BUILT_IN_UTILITY_IDS:b,EDITOR_VIEW_DOCUMENT_KINDS:y,EDITOR_VIEW_KEYS:m,EDITOR_VIEW_TOOL_UTILITY_PREFIX:S,EDITOR_VIEW_WORKSPACE_DOCUMENT_IDS:O,EditorClient:g,EditorCommandError:E,editorViewFromUrl:T,editorViewUrl:j,isEditorViewDocumentKind:P,isEditorViewUtility:A},Symbol.toStringTag,{value:"Module"})),R={physics:f,networking:p,navigation:u,audio:_,camera:d,renderDebug:c},v={three:"node-id",canvas:"display",dom:null},i=Object.keys(I),D={bound:{},empty:[],malformed:[]};function k(r){return r.present===!1}function z(r,e){const t=[];for(const[o,n]of Object.entries(R[r]))n.optional||typeof e[o]!="function"&&t.push(o);return t}function C(r,e){const t=e?v[e]:null;if(t===null)return null;const o=r.keyedBy==="display"?"display":"node-id";return o===t?null:`declared a ${o}-keyed physics carrier on the ${e} surface, whose gizmo path addresses bodies by ${t} — the four members are all present but nothing on this lane can call them with values they accept (a ${e}-surface carrier declares \`keyedBy: '${t}'\`)`}function N(r,e,t){if(e==null)return{kind:"skip"};if(typeof e!="object")return{kind:"malformed",reason:`declared as ${typeof e}; expected an adapter object or { present: false, evidence }`};if(k(e)){const s=e.evidence;return typeof s!="string"||s.trim()===""?{kind:"malformed",reason:"declared `present: false` with no `evidence` string to back the absence"}:{kind:"empty",evidence:s}}const o=z(r,e);if(o.length>0)return{kind:"malformed",reason:`declared an adapter missing required member(s): ${o.join(", ")}`};const n=r==="physics"?C(e,t):null;return n!==null?{kind:"malformed",reason:n}:{kind:"bound"}}function w(r,e){const t=r?.systemAdapters;if(!t)return D;const o={},n=[],s=[];for(const a of i){const l=N(a,t[a],e);l.kind==="bound"?o[a]=t[a]:l.kind==="empty"?n.push({slot:a,evidence:l.evidence}):l.kind==="malformed"&&s.push({slot:a,reason:l.reason})}return{bound:o,empty:n,malformed:s}}const V=Object.freeze(Object.defineProperty({__proto__:null,CONTRACT_SYSTEM_SLOTS:i,projectContractSystemAdapters:w},Symbol.toStringTag,{value:"Module"})),$=Object.freeze(Object.defineProperty({__proto__:null,PHASE_ORDER:M,SystemPhase:h},Symbol.toStringTag,{value:"Module"})),K=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),W=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),L=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),x=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),B=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),G=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),q=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),F=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),J=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),X=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Q=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Z=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ee=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),te=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),oe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),re=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ne=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));export{i as C,K as a,B as b,V as c,W as d,L as e,x as f,q as g,G as h,Y as i,F as j,X as k,Q as l,Z as m,ee as n,oe as o,w as p,re as q,J as r,ne as s,$ as t,te as w};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{f as a,P as u,O as l}from"./three.module-D396a9Mn.js";const i=Symbol.for("vgai.audio-pose-guard");function c(t){return t.elements.every(Number.isFinite)}function d(t,e){const r=t[i];if(r){e&&(r.report=e);return}const o={dropped:0,...e?{report:e}:{}};Object.defineProperty(t,i,{value:o});const n=new WeakSet,p=t.updateMatrixWorld;t.updateMatrixWorld=function(s){if(l.prototype.updateMatrixWorld.call(this,s),this.context.state!=="running"){this._clock&&(this.timeDelta=0,n.add(this));return}if(c(this.matrixWorld)){n.delete(this)&&this._clock?.getDelta(),p.call(this,s);return}o.dropped++,o.report?.(this.type)}}function g(t){d(a.prototype,t),d(u.prototype,t)}function x(){return(a.prototype[i]?.dropped??0)+(u.prototype[i]?.dropped??0)}export{x as audioPoseUpdatesDropped,g as installAudioPoseGuard};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function h(t){return Number.isFinite(t)&&t>0?t:0}function g(t,i,c={}){const o=h(t.width),s=h(t.height),e=h(i.width),n=h(i.height);if(o===0||s===0||e===0||n===0)return{scale:1,width:e,height:n,offsetX:0,offsetY:0};const f=Math.min(o/e,s/n),r=c.allowUpscale===!0?f:Math.min(f,1),l=e*r,w=n*r;return{scale:r,width:l,height:w,offsetX:(o-l)/2,offsetY:(s-w)/2}}const u={kind:"fill"};function a(t,i){return t.width!==null&&t.height!==null?{kind:"logical",width:t.width,height:t.height,source:"device",allowUpscale:!1}:i!==void 0&&h(i.width)>0&&h(i.height)>0?{kind:"logical",width:i.width,height:i.height,source:"manifest",allowUpscale:!0}:u}export{u as PRESENTATION_FILL,g as fitPresentation,a as resolvePresentedSize};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{tv as s}from"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";export{s as mountVgai};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{p as o}from"./utility-view-state-BHypxA33.js";import"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";const s="workspace.action",w=[{id:"profiler",label:"Open Profiler",execute:()=>o.open("profiler")}];export{w as actions,s as point};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{p as r}from"./utility-view-state-BHypxA33.js";import"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";const c="workspace.menu",a={menu:"debug",items:[{id:"profiler",label:"Profiler",testId:"menu-profiler",execute:()=>r.open("profiler")}]};export{a as menu,c as point};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{p as S}from"./utility-view-state-BHypxA33.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a7 as L,q as M,ao as n,a4 as x,dR as p,dP as a,hK as _,eE as J,hN as I,hM as O,jr as Y,js as q}from"./index-GIL7oGEO.js";import{s as K,f as P,a as X,d as A,c as Q,b as Z,g as ee,l as te,i as ne,e as se,h as re,j as ae,u as oe,t as ie,k as le,m as de,n as w,o as F,p as ce}from"./frame-debugger-store-D1Mf_5up.js";import{buildChromeTrace as pe}from"./chrome-trace-YZHMz60-.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";const j={fontFamily:n.typography.mono,fontSize:11};function me({draw:t,selected:s,onSelect:r}){return e.jsxs(x,{type:"button",variant:"ghost","data-testid":"frame-draw-row","data-draw-index":t.index,"data-selected":s||void 0,className:"vgai-frame-draw-row",onClick:r,children:[e.jsxs("span",{style:{...j,color:n.content.dim,width:34,display:"inline-block"},children:["#",t.index]}),e.jsx("span",{style:{...j,color:n.content.primary},children:t.mode}),e.jsxs("span",{style:{...j,color:n.content.muted},children:[" ",t.count]}),t.instanceCount!==null&&e.jsxs("span",{style:{...j,color:n.content.muted},children:[" ×",t.instanceCount]}),e.jsxs("span",{style:{...j,color:t.annotation?n.content.primary:n.content.dim,fontStyle:t.annotation?"normal":"italic"},children:[" ",t.annotation?t.annotation.object.name||t.annotation.object.type:"unattributed"]})]})}function b({label:t,value:s}){return e.jsxs("div",{style:{display:"flex",gap:8,padding:"1px 0"},children:[e.jsx("span",{style:{fontSize:10,color:n.content.muted,width:92,flexShrink:0},children:t}),e.jsx("span",{style:{...j,color:n.content.primary},children:s})]})}const $=t=>t?"on":"off";function ue(t){if(t.kind==="canvas")return"canvas (default framebuffer)";const s=t.width!==null&&t.height!==null?`${t.width}×${t.height}`:"(size not queryable)";return`${t.label??"framebuffer"} ${s}`}function fe(t){return`blend ${$(t.blend)} · depth test ${$(t.depthTest)} · depth write ${$(t.depthWrite)} · cull ${t.cull} · scissor ${$(t.scissor)}`}function he(t){const s=t.instanceCount!==null?` · ${t.instanceCount} instances`:" · not instanced";return`${t.mode} · ${t.count}${s}`}function xe({draw:t}){return e.jsxs("div",{"data-testid":"frame-draw-detail",style:{padding:8},children:[e.jsx(b,{label:"entry point",value:t.entryPoint}),e.jsx(b,{label:"mode / count",value:he(t)}),e.jsx(b,{label:"program",value:t.programLabel??"none bound"}),e.jsx(b,{label:"target",value:ue(t.target)}),e.jsx(b,{label:"viewport",value:`[${t.viewport.join(", ")}]`}),e.jsx(b,{label:"state",value:fe(t.state)}),t.annotation?e.jsxs(e.Fragment,{children:[e.jsx(b,{label:"object",value:`${t.annotation.object.name||"(unnamed)"} · ${t.annotation.object.type}`}),e.jsx(b,{label:"geometry",value:`${t.annotation.geometry.name||t.annotation.geometry.type}${t.annotation.geometry.indexed?" · indexed":""}`}),e.jsx(b,{label:"attributes",value:t.annotation.geometry.attributes.join(", ")||"—"}),e.jsx(b,{label:"material",value:`${t.annotation.material.name||"(unnamed)"} · ${t.annotation.material.type}`})]}):e.jsx("div",{"data-testid":"frame-draw-unattributed",style:{marginTop:6,fontSize:11,fontStyle:"italic",color:n.content.muted},children:"Not attributable (shadow / post-processing pass — the instrument attributes only main-pass draws through each object's onBeforeRender, and reports the gap honestly rather than guessing)."})]})}function ge({capture:t,drawIndex:s,setDrawIndex:r}){const o=t.drawCalls.length,l=Math.min(s,Math.max(0,o-1)),i=t.drawCalls[l]??null,u=ae(t);return e.jsxs("div",{style:{flex:1,minHeight:0,display:"flex"},children:[e.jsxs("div",{style:{flex:1,minWidth:0,overflow:"auto",borderRight:`1px solid ${n.boundary.default}`},children:[e.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center",padding:4,borderBottom:`1px solid ${n.boundary.default}`},children:[e.jsx(x,{type:"button",size:"compact",variant:"ghost","data-testid":"frame-draw-prev",disabled:l<=0,onClick:()=>r(Math.max(0,l-1)),children:"◀ Prev"}),e.jsx(x,{type:"button",size:"compact",variant:"ghost","data-testid":"frame-draw-next",disabled:l>=o-1,onClick:()=>r(Math.min(o-1,l+1)),children:"Next ▶"}),e.jsxs("span",{style:{fontSize:10,color:n.content.muted},children:[o===0?"0":l+1,"/",o]})]}),u.map(c=>e.jsxs("div",{"data-testid":"frame-target-group","data-target":c.target,children:[e.jsxs("div",{style:{...j,padding:"2px 8px",color:n.content.muted,borderTop:`1px solid ${n.boundary.default}`,borderBottom:`1px solid ${n.boundary.default}`},children:[c.target," · ",c.draws.length," draws"]}),c.draws.map(m=>e.jsx(me,{draw:m,selected:m.index===l,onSelect:()=>r(m.index)},m.index))]},c.target))]}),e.jsxs("div",{style:{flex:1,minWidth:0,overflow:"auto"},children:[i?e.jsx(xe,{draw:i}):e.jsx("div",{style:{padding:12,color:n.content.muted,fontSize:12},children:"This capture recorded no draws."}),t.notes.length>0&&e.jsx("div",{style:{padding:"4px 8px",fontSize:10,color:n.content.dim},"data-testid":"frame-capture-notes",children:t.notes.join(" ")})]})]})}function ye({captures:t,selectedId:s}){return e.jsx("div",{"data-testid":"frame-capture-history",style:{display:"flex",gap:6,flexWrap:"wrap",padding:"4px 8px",borderBottom:`1px solid ${n.boundary.default}`},children:t.map(r=>{const o=se(r);return e.jsxs(x,{type:"button",size:"compact",variant:"ghost","data-testid":"frame-capture-item","data-capture-id":r.id,"data-selected":r.id===s||void 0,onClick:()=>re(r.id),children:["#",r.id," · ",o.drawCalls," draws",o.unattributed>0?` · ${o.unattributed} unattr`:"",o.truncated>0?` · +${o.truncated} capped`:""]},r.id)})})}function be(){h.useSyncExternalStore(K,P,P);const[t,s]=h.useState(0),r=L(()=>M().systems.inspected().renderDebug??null);h.useEffect(()=>{X(r)},[r]);const o=A(r),l=ee(),i=l.selected;if(h.useEffect(()=>{s(0)},[i?.id]),!r||!o)return e.jsxs("div",{"data-testid":"frame-debugger-empty",style:{padding:16,color:n.content.muted,fontSize:12,lineHeight:"18px"},children:[e.jsx("div",{style:{color:n.content.primary,marginBottom:4},children:"No render-debug adapter — no game session is running."}),"Frame capture exists only while a game session runs. Press Play: first-party worlds register a ",e.jsx("code",{style:j,children:"RenderDebugAdapter"})," automatically when they hold a real WebGL2 context; a custom world exposes its own via"," ",e.jsx("code",{style:j,children:"ctx.registerSystemAdapter?.('renderDebug', adapter)"}),". A headless mount registers none — there is nothing to capture."]});const u=te(),c=ne();return e.jsxs("div",{"data-testid":"frame-debugger",className:"vgai-content-frost",style:{flex:1,minHeight:0,display:"flex",flexDirection:"column",fontSize:12},children:[e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:10,alignItems:"center",padding:"4px 8px",borderBottom:`1px solid ${n.boundary.default}`},children:[e.jsx(x,{type:"button",size:"compact","data-testid":"frame-capture-button",disabled:c,onClick:()=>void Q(r),children:c?"Capturing…":"Capture frame"}),e.jsx("span",{style:{fontSize:10,color:n.content.dim},children:"Single-frame draw-call list with per-draw state — not a GPU replayer."}),l.all.length>0&&e.jsx(x,{type:"button",size:"compact",variant:"ghost","data-testid":"frame-capture-clear",onClick:()=>Z(),children:"Clear"})]}),u&&e.jsxs("div",{"data-testid":"frame-capture-error",style:{padding:"4px 8px",fontSize:11,color:n.semantic.danger,borderBottom:`1px solid ${n.boundary.default}`},children:["Capture failed: ",u]}),l.all.length>0&&e.jsx(ye,{captures:l.all,selectedId:i?.id??null}),i?e.jsx(ge,{capture:i,drawIndex:t,setDrawIndex:s},i.id):e.jsxs("div",{"data-testid":"frame-debugger-no-capture",style:{padding:12,color:n.content.muted,fontSize:12},children:["No frame captured yet. Press ",e.jsx("strong",{children:"Capture frame"})," while the game renders."]})]})}function je(t){if(t.length<4)return 0;let s=Number.POSITIVE_INFINITY;for(const o of t)s=Math.min(s,o);let r=0;for(const o of t)r+=Math.max(0,o-s);return r}const E=1200;function ve(){const t=[];let s=null,r=0;const o=()=>{const l=performance.now();t.push({t:l,gapMs:l-r}),t.length>E&&t.splice(0,t.length-E),r=l,s=setTimeout(o,0)};return{start(){s===null&&(t.length=0,r=performance.now(),s=setTimeout(o,0))},stop(){s!==null&&(clearTimeout(s),s=null)},busySince(l){const i=[];for(const u of t)u.t>=l&&i.push(u.gapMs);return{busyMs:je(i),sampleCount:i.length}}}}const k={enabled:!1,recording:!1,fps:0,cpuMs:0,p95Ms:0,p99Ms:0,frames:[],phases:[],systems:[],components:[],render:{gpuMs:null,drawCalls:0,triangles:0,geometries:0,textures:0,renderPasses:null}},Se=500;function we(t){const s=URL.createObjectURL(new Blob([t.exportJSON()],{type:"application/json"})),r=document.createElement("a");r.href=s,r.download=`vgai-performance-${new Date().toISOString().replaceAll(":","-")}.json`,r.click(),URL.revokeObjectURL(s)}function $e(t,s){const r=pe(t.getSnapshot().frames,{processName:s,threadName:"main"}),o=URL.createObjectURL(new Blob([JSON.stringify(r)],{type:"application/json"})),l=document.createElement("a");l.href=o,l.download=`vgai-trace-${new Date().toISOString().replaceAll(":","-")}.json`,l.click(),URL.revokeObjectURL(o)}const C=720,T=18,D=40,R=[n.accent.default,n.semantic.success,n.semantic.warning,n.content.muted];function Ce({snapshot:t}){const s=t.frames,[r,o]=h.useState(null),l=r!==null&&r<s.length?r:s.length-1,i=s[l],u=le(s,C,D),c=i?de(i,C):[],m=c.reduce((d,g)=>Math.max(d,g.depth),0);return s.length===0?e.jsxs("div",{"data-testid":"flamegraph-empty",style:{padding:a[6],color:n.content.muted},children:["No frames recorded yet. Frames accumulate while the profiler is enabled; use"," ",e.jsx("strong",{children:"Record capture"})," to also collect per-component spans."]}):e.jsxs("div",{"data-testid":"flamegraph-view",style:{padding:a[4]},children:[e.jsxs("div",{style:{marginBottom:a[4],color:n.content.muted},children:["Frame ",e.jsx("span",{style:{color:n.content.primary},children:i?i.id:"—"})," ·"," ",i?`${i.cpuMs.toFixed(2)} ms CPU`:""," · GPU"," ",e.jsx("span",{style:{color:n.content.primary},children:i&&i.render.gpuMs!==null?`${i.render.gpuMs.toFixed(2)} ms`:"n/a"})]}),e.jsx("div",{"data-testid":"flame-frame-strip",style:{position:"relative",width:C,height:D,boxShadow:`inset 0 0 0 1px ${n.boundary.default}`,marginBottom:a[5]},children:u.map(d=>e.jsx("div",{role:"button",tabIndex:0,"data-testid":"flame-frame-bar","data-frame-index":d.index,"data-selected":d.index===l||void 0,title:`frame ${d.frameId} · ${d.cpuMs.toFixed(2)} ms`,onClick:()=>o(d.index),onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&o(d.index)},style:{position:"absolute",left:d.x,bottom:0,width:Math.max(1,d.w-1),height:Math.max(1,d.h),cursor:"pointer",background:d.index===l?n.semantic.warning:n.accent.default}},d.frameId))}),e.jsx("div",{"data-testid":"flamegraph-rows",style:{position:"relative",width:C,height:(m+1)*T},children:c.map((d,g)=>e.jsx("div",{"data-testid":"flame-rect","data-depth":d.depth,"data-name":d.label,title:`${d.label} · ${d.ms.toFixed(3)} ms`,style:{position:"absolute",left:d.x,top:d.depth*T,width:Math.max(1,d.w),height:T-1,overflow:"hidden",whiteSpace:"nowrap",fontSize:p.sm,lineHeight:`${T-1}px`,paddingLeft:3,color:n.content.onAccent,background:R[Math.min(d.depth,R.length-1)],borderRight:`1px solid ${n.surface.inset}`},children:d.label},`${d.depth}-${g}-${d.label}`))}),e.jsxs("div",{style:{marginTop:a[3],fontSize:p.sm,color:n.content.dim},children:["Rows: frame · phase · system",t.recording?" · component (recording)":"",". Only measured CPU spans are drawn — GPU time is a whole-frame aggregate, never a fabricated lane."]})]})}function B({title:t,entries:s,estimated:r,testId:o}){return e.jsxs("div",{"data-testid":o,style:{marginTop:a[5],border:`1px solid ${n.boundary.default}`},children:[e.jsxs("div",{style:{padding:`${a[3]} ${a[5]}`,borderBottom:`1px solid ${n.boundary.default}`,color:n.content.muted},children:[t,r&&e.jsx("span",{style:{marginLeft:a[3],fontSize:p.xs,color:n.content.dim},children:"ESTIMATED"})]}),s.length===0?e.jsx("div",{style:{padding:`${a[2]} ${a[5]}`,color:n.content.dim,fontSize:p.base},children:"none"}):s.map(l=>e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:a[8],padding:"3px 10px"},children:[e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:l.name}),e.jsx("span",{style:{fontVariantNumeric:"tabular-nums"},children:w(l.bytes)})]},l.name))]})}function Te(){const t=L(()=>M().systems.inspected().renderDebug??null),s=A(t),[r,o]=h.useState(null);h.useEffect(()=>{if(!t?.memorySnapshot){o(null);return}const i=()=>o(t.memorySnapshot?.()??null);i();const u=setInterval(i,1e3);return()=>clearInterval(u)},[t]);const l=Y();return e.jsxs("div",{style:{padding:a[4]},children:[e.jsxs("div",{"data-testid":"memory-heap",style:{border:`1px solid ${n.boundary.default}`,padding:a[5],marginBottom:a[5]},children:[e.jsx("div",{style:{color:n.content.dim,textTransform:"uppercase",fontSize:p.sm},children:"JS heap (performance.memory)"}),q(l)?e.jsxs("div",{style:{fontSize:p.xl,color:n.content.primary,marginTop:3},children:[w(l.usedBytes)," ",e.jsxs("span",{style:{fontSize:p.base,color:n.content.muted},children:["used / ",w(l.totalBytes)," total"]})]}):e.jsx("div",{"data-testid":"memory-heap-unavailable",style:{fontSize:p.base,color:n.content.muted,marginTop:3,fontStyle:"italic"},children:l.unavailable})]}),s?.memory?r===null?e.jsx("div",{style:{padding:a[4],color:n.content.muted,fontSize:p.base},children:"Waiting for the first render-memory sample…"}):e.jsxs("div",{"data-testid":"memory-section",children:[e.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, minmax(80px, 1fr))",gap:a[4]},children:[["Geometries",String(r.counts.geometries)],["Textures",String(r.counts.textures)],["Programs",r.counts.programs===null?"n/a until first render":String(r.counts.programs)]].map(([i,u])=>e.jsxs("div",{style:{border:`1px solid ${n.boundary.default}`,padding:a[5]},children:[e.jsx("div",{style:{color:n.content.dim,textTransform:"uppercase",fontSize:p.sm},children:i}),e.jsx("div",{style:{fontSize:p["2xl"],color:n.content.primary,marginTop:3},children:u})]},i))}),e.jsxs("div",{"data-testid":"memory-vram-totals",style:{display:"flex",gap:18,marginTop:a[5],fontSize:p.base,color:n.content.muted},children:[e.jsxs("span",{children:["geometry buffers"," ",e.jsx("span",{style:{color:n.content.primary},children:w(r.estimatedGeometryBytes)})," ",e.jsx("span",{style:{fontSize:p.xs,color:n.content.dim},children:"EXACT"})]}),e.jsxs("span",{children:["texture VRAM"," ",e.jsx("span",{style:{color:n.content.primary},children:w(r.estimatedTextureBytes)})," ",e.jsx("span",{style:{fontSize:p.xs,color:n.content.dim},children:"ESTIMATED"})]})]}),e.jsx(B,{title:"Top geometries",entries:r.topGeometries,estimated:!1,testId:"memory-top-geometries"}),e.jsx(B,{title:"Top textures",entries:r.topTextures,estimated:!0,testId:"memory-top-textures"}),r.unestimated.length>0&&e.jsxs("div",{"data-testid":"memory-unestimated",style:{marginTop:a[5],border:`1px solid ${n.boundary.default}`},children:[e.jsxs("div",{style:{padding:`${a[3]} ${a[5]}`,borderBottom:`1px solid ${n.boundary.default}`,color:n.content.muted},children:["Unmeasured textures (",r.unestimated.length,") — excluded from the total, not zeroed"]}),r.unestimated.map(i=>e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:a[8],padding:"3px 10px",fontSize:p.base},children:[e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:i.name}),e.jsx("span",{style:{color:n.content.dim},children:i.reason})]},i.name))]})]}):e.jsxs("div",{"data-testid":"memory-absent",style:{padding:a[4],color:n.content.muted,fontSize:p.base,fontStyle:"italic"},children:["Render-memory introspection is not provided by this world's adapter — a headless mount has no ",e.jsx("code",{children:"renderer.info"}),", and a canvas (PixiJS) world's renderer publishes no managed geometry collection to measure at all. Enter Play with a first-party three world to inspect geometry/texture footprints."]})]})}function ze(t){const s=h.useRef([]),r=typeof PerformanceObserver<"u"&&(PerformanceObserver.supportedEntryTypes??[]).includes("long-animation-frame");return h.useEffect(()=>{if(!t||!r)return;s.current=[];const o=new PerformanceObserver(l=>{const i=s.current;for(const u of l.getEntries())i.push(u);i.length>40&&i.splice(0,i.length-40)});return o.observe({type:"long-animation-frame"}),()=>o.disconnect()},[t,r]),{entries:s.current,supported:r}}function Me(t,s,r){const o=h.useRef(null);o.current===null&&(o.current=ve()),h.useEffect(()=>{const i=o.current;if(!(!t||!i))return i.start(),()=>i.stop()},[t]);const l=performance.now()-1e3;return ie(s.frames,l,o.current.busySince(l),r)}function Pe({row:t,rootMs:s}){const r=t.ms!==null&&s>0?Math.min(1,t.ms/s):0,o=t.depth===0;return e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"260px 1fr 70px",gap:a[5],padding:`${a[2]} ${a[5]}`,paddingLeft:10+t.depth*16},children:[e.jsxs("span",{style:{color:o||t.depth===1?n.content.primary:n.content.muted,fontStyle:t.parallel?"italic":void 0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:t.note?`${t.label} — ${t.note}`:t.label,children:[t.label,t.note&&e.jsx("span",{style:{marginLeft:a[3],fontSize:p.sm,color:n.content.dim},children:t.note})]}),e.jsx("div",{style:{background:n.surface.raised,height:6,marginTop:5,opacity:t.parallel?.45:1},children:e.jsx("div",{style:{width:`${r*100}%`,height:"100%",background:!o&&t.ms!==null&&t.ms>8?n.semantic.warning:n.accent.default}})}),e.jsx("span",{style:{textAlign:"right",fontVariantNumeric:"tabular-nums",color:o?n.content.primary:void 0},children:t.ms===null?"—":`${t.ms.toFixed(1)} ms`})]})}function Fe({snapshot:t,timeSpent:s,entries:r,loafSupported:o}){const l=s?.budget??null,i=l?F(l.frameMs,l.loopMs):F(t.p95Ms,t.cpuMs),u=1e4,c=ce(r.filter(m=>(m.startTime??0)>=performance.now()-u));return s===null&&!i.dominated&&c.longFrameCount===0?null:e.jsxs("div",{"data-testid":"time-spent-section",style:{marginTop:a[6],border:`1px solid ${n.boundary.default}`},children:[e.jsx("div",{style:{padding:"7px 10px",borderBottom:`1px solid ${n.boundary.default}`,color:n.content.muted},children:"Where the frame goes"}),s!==null&&e.jsx("div",{"data-testid":"time-spent-tree",style:{paddingBottom:a[1]},children:s.rows.map(m=>e.jsx(Pe,{row:m,rootMs:s.budget.frameMs},`${m.depth}:${m.label}`))}),i.dominated&&e.jsxs("div",{style:{padding:`${a[3]} ${a[5]}`,color:n.content.muted,borderTop:`1px solid ${n.boundary.default}`},children:["The measured loop explains less than half of the frame time — the bottleneck is"," ",c.scripts.length>0?"partly the main-thread work below, and the rest":"not on the main thread: look at the display pipeline"," ","(GPU/compositor: post-effects, glass chrome, pixel ratio) or browser throttling."]}),c.scripts.length>0&&e.jsx("div",{style:{padding:"5px 10px 2px",borderTop:`1px solid ${n.boundary.default}`,fontSize:p.sm,color:n.content.dim},children:"Named main-thread offenders — longer memory than the tree (last 10s of long frames)"}),c.scripts.map(m=>e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:a[8],padding:`${a[2]} ${a[5]}`},children:[e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:m.key}),e.jsxs("span",{style:{fontVariantNumeric:"tabular-nums"},children:[m.totalMs," ms ×",m.count]})]},m.key)),c.longFrameCount>0&&e.jsxs("div",{style:{padding:`${a[2]} ${a[5]}`,fontSize:p.sm,color:n.content.dim},children:[c.longFrameCount," long main-thread frame",c.longFrameCount===1?"":"s"," (",c.totalLongMs," ms total, ",c.unattributedMs," ms unattributed style/layout/GC) — browser long-animation-frame report, last 10s."]}),!o&&e.jsx("div",{style:{padding:`${a[2]} ${a[5]}`,fontSize:p.sm,color:n.content.dim},children:"Main-thread attribution unavailable — this browser does not support long-animation-frame timing."})]})}function Ee(){const t=oe(),s=t?.profiler??null,[r,o]=h.useState(k),[l,i]=h.useState(!1),[u,c]=h.useState(!1),[m,d]=h.useState("overview"),g=h.useRef(!1),z=ze(s),N=Me(s,r,z.entries),U=()=>{const f=!g.current;g.current=f,i(f),!f&&s&&o(s.getSnapshot())},H=()=>{if(!s)return;const f=!s.enabled;f&&c(!1),s.enabled=f,o(s.getSnapshot())};return h.useEffect(()=>{if(!s){o(k);return}g.current=!1,i(!1),c(!1);const f=s.enabled;s.enabled=!0,o(s.getSnapshot());let y=null,v=performance.now();const V=()=>{y=null,!g.current&&(v=performance.now(),o(s.getSnapshot()))},W=s.subscribe(()=>{if(g.current||y!==null)return;const G=Math.max(0,Se-(performance.now()-v));y=setTimeout(V,G)});return()=>{W(),y!==null&&clearTimeout(y),!f&&!s.recording&&(s.enabled=!1)}},[s]),s?e.jsxs("div",{className:"vgai-content-frost",style:{height:"100%",overflow:"auto",padding:a[6],color:n.content.primary,fontSize:p.md},children:[e.jsxs("div",{style:{marginBottom:a[5],color:n.content.muted},children:["Profiling ",e.jsx("span",{style:{color:n.content.primary},children:t?.label}),r.enabled&&u&&e.jsx(_,{style:{marginLeft:a[4]},children:"Profiling active"})]}),r.enabled&&!u&&e.jsxs(J,{tone:"warning",style:{marginBottom:a[5]},actions:e.jsx(x,{size:"compact",variant:"ghost",onClick:()=>c(!0),children:"Dismiss"}),children:["Live profiling is active and adds measurement overhead. Displayed timings include that cost",r.recording?"; capture recording adds detailed timing marks":"","."]}),e.jsxs("div",{style:{display:"flex",gap:a[4],alignItems:"center",marginBottom:a[6]},children:[e.jsx(x,{size:"compact",onClick:U,children:l?"Resume view":"Freeze view"}),e.jsxs(x,{size:"compact",onClick:H,children:[r.enabled?"Disable":"Enable"," profiler"]}),e.jsx(x,{size:"compact",onClick:()=>r.recording?s.stopRecording():s.startRecording(),children:r.recording?"Stop capture":"Record capture"}),e.jsx(x,{size:"compact",onClick:()=>s.clear(),children:"Clear"}),e.jsx(x,{size:"compact",onClick:()=>we(s),children:"Export JSON"}),e.jsx(x,{size:"compact","data-testid":"profiler-export-trace",onClick:()=>$e(s,t?.label??"vgai"),children:"Export Chrome trace"})]}),e.jsx(I,{"aria-label":"Profiler views",style:{marginBottom:a[6]},children:[["overview","Overview"],["flamegraph","Flamegraph"],["memory","Memory"]].map(([f,y])=>e.jsx(O,{selected:m===f,"data-testid":`profiler-view-${f}`,onClick:()=>d(f),children:y},f))}),m==="flamegraph"&&e.jsx(Ce,{snapshot:r}),m==="memory"&&e.jsx(Te,{}),m==="overview"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(80px, 1fr))",gap:a[4]},children:[["FPS",r.fps.toFixed(0)],["CPU",`${r.cpuMs.toFixed(2)} ms`],["p95 frame",`${r.p95Ms.toFixed(2)} ms`],["p99 frame",`${r.p99Ms.toFixed(2)} ms`],["GPU",r.render.gpuMs===null?"n/a":`${r.render.gpuMs.toFixed(2)} ms`],["Draw calls",String(r.render.drawCalls)],["Triangles",r.render.triangles.toLocaleString()]].map(([f,y])=>e.jsxs("div",{style:{border:`1px solid ${n.boundary.default}`,padding:a[5]},children:[e.jsx("div",{style:{color:n.content.dim,textTransform:"uppercase",fontSize:p.sm},children:f}),e.jsx("div",{style:{fontSize:18,color:n.content.primary,marginTop:3},children:y})]},f))}),e.jsx(Fe,{snapshot:r,timeSpent:N,entries:z.entries,loafSupported:z.supported}),[["Components (recording)",r.components]].map(([f,y])=>e.jsxs("div",{style:{marginTop:a[6],border:`1px solid ${n.boundary.default}`},children:[e.jsx("div",{style:{padding:"7px 10px",borderBottom:`1px solid ${n.boundary.default}`,color:n.content.muted},children:f}),y.slice(0,12).map(v=>e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:a[8],padding:`${a[2]} ${a[5]}`},children:[e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:v.name}),e.jsxs("span",{style:{fontVariantNumeric:"tabular-nums"},children:[v.ms.toFixed(2)," ms"]})]},v.name))]},f))]})]}):e.jsx("div",{style:{padding:a[6],fontSize:p.md,color:n.content.muted,maxWidth:480},children:e.jsx("p",{style:{margin:0},children:M().documents.active()?"The active document has no live render loop to profile.":"Open a rendered document to profile it."})})}const ke=[{id:"profiler",label:"Profiler"},{id:"frame",label:"Frame"}];function De(){h.useSyncExternalStore(S.subscribe,S.version,S.version);const t=S.active();return e.jsxs("div",{"data-testid":"profiler-panel",style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},children:[e.jsx(I,{"aria-label":"Profiler views",children:ke.map(s=>e.jsx(O,{selected:t===s.id,"data-testid":`profiler-tab-${s.id}`,onClick:()=>S.select(s.id),children:s.label},s.id))}),e.jsxs("div",{role:"tabpanel",style:{flex:1,minHeight:0,display:"flex"},children:[t==="profiler"&&e.jsx(Ee,{}),t==="frame"&&e.jsx(be,{})]})]})}const Je="workspace.utility",Ye="Profiler",qe=20;function Ke(){return e.jsx(De,{})}export{Ke as default,qe as order,Je as point,Ye as title};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/world-documents-147tiFZe.js","assets/jsx-runtime-DPjLkJKQ.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-GIL7oGEO.js","assets/index-nmcBqr7Y.js","assets/index-D_NuPfjr.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/three.module-D396a9Mn.js","assets/index-D2fNXpHa.css","assets/design-time-layers-wYgOTgni.js","assets/edit-mode-authoring-B47TfLqu.js","assets/design-time-mount-registry-DUpXCg1U.js","assets/react-story-board-BDDwiE2H.js","assets/CanvasSceneViewport-Bpi6gVTC.js","assets/RootSelectionOverlay-BZPlxmXU.js","assets/eyedropper-session-bjPXnfeX.js","assets/viewport-pick-context-DkawXbEi.js","assets/inspect-BZfi3mmo.js","assets/inference-diagnostics-Dhmtfbq_.js","assets/TransientHint-BB1fwrvK.js","assets/component-board-registry-DrIa2csL.js","assets/surface-state-DaxyruCj.js","assets/board-guides-DziKSTss.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{aQ as u,aR as p,aS as l,_ as m,aT as f,aU as b}from"./index-GIL7oGEO.js";import{b as D,e as o,i as v}from"./edit-mode-authoring-B47TfLqu.js";class g{constructor(s){this.store=s,this.unbind=D(()=>this.rebuild()),this.ready=this.rebuild()}references=0;disposed=!1;composite;disposeDocuments;stages=new Set;tail=Promise.resolve();unbind;ready;retain(){return this.references++,()=>{--this.references>0||(this.disposed=!0,this.unbind(),this.disposeDocuments?.(),o(this.composite),n.delete(this.store))}}attach(s){const r=this.retain();return this.stages.add(s),{ready:this.composite?s(this.composite):this.tail,dispose:()=>{this.stages.delete(s),r()}}}rebuild(){const s=this.tail.then(async()=>{if(this.disposed)return;const r=b(),a=new Set(p().map(t=>t.descriptor.id)),d=this.composite?l().map(t=>t.descriptor.id).filter(t=>a.has(t)):[];this.disposeDocuments?.(),this.disposeDocuments=void 0,o(this.composite),this.composite=void 0;const i=await v(this.store);if(this.disposed){o(i);return}const{installRootDocuments:h}=await m(async()=>{const{installRootDocuments:t}=await import("./world-documents-147tiFZe.js");return{installRootDocuments:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]));if(this.disposed){o(i);return}this.composite=i,this.disposeDocuments=h(this.store,i);for(const t of d)f(t,t===r);await Promise.all([...this.stages].map(t=>t(i)))});return this.tail=s.catch(()=>{}),s}}const n=new Map;function c(e){let s=n.get(e);return s||(s=new g(e),n.set(e,s)),s}function P(e){const s=c(e);return{ready:s.ready.then(()=>u()),dispose:s.retain()}}function _(e,s){return c(e).attach(s)}export{_ as a,P as r};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const y=".vgai/provenance.json";function l(t){const r=t.split(/[?#]/,1)[0].replace(/^\/+/,"");return r.startsWith("public/")?r:`public/${r}`}async function d(){const t=await fetch(`/__editor/vgai-file?${new URLSearchParams({path:y})}`);return t.ok?JSON.parse(await t.text()):null}function c(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function h(t,r){const e=c(t);if(e?.path!==r||typeof e.bytes!="number"||typeof e.sha256!="string")return null;const n=e.mediaType,o=e.role;return{path:r,bytes:e.bytes,sha256:e.sha256,...typeof n=="string"?{mediaType:n}:{},...typeof o=="string"?{role:o}:{}}}function A(t,r,e){const n=c(r),o=c(n?.operation),a=n?.outputs,s=n?.createdAt,i=o?.name;if(!n||!o||typeof s!="string"||typeof i!="string"||!Array.isArray(a))return[];const p=o.source;return a.flatMap(f=>{const u=h(f,e);return u?[{operationId:t,createdAt:s,operationName:i,...typeof p=="string"?{operationSource:p}:{},...n.input!==void 0?{input:n.input}:{},output:u}]:[]})}async function m(t){const r=c(await d()),e=c(r?.operations);if(!e)return null;const n=l(t);return Object.entries(e).flatMap(([a,s])=>A(a,s,n)).sort((a,s)=>s.createdAt.localeCompare(a.createdAt))[0]??null}export{l as a,m as p};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const r={Space:"Space",Escape:"Esc",Enter:"Enter",NumpadEnter:"Enter",Tab:"Tab",Backspace:"Backspace",CapsLock:"Caps Lock",ArrowUp:"↑",ArrowDown:"↓",ArrowLeft:"←",ArrowRight:"→",ShiftLeft:"Shift",ShiftRight:"Shift",ControlLeft:"Ctrl",ControlRight:"Ctrl",AltLeft:"Alt",AltRight:"Alt",MetaLeft:"Meta",MetaRight:"Meta"};function i(t){const e=r[t];return e||(t.startsWith("Key")&&t.length===4?t.slice(3):t.startsWith("Digit")&&t.length===6?t.slice(5):t.startsWith("Numpad")?`Num ${t.slice(6)}`:(t.startsWith("F")&&/^F\d+$/.test(t),t))}const a={0:"Left Click",1:"Middle Click",2:"Right Click",3:"Mouse 4",4:"Mouse 5"};function n(t){return a[t]??`Mouse ${t}`}const u={0:"A",1:"B",2:"X",3:"Y",4:"LB",5:"RB",6:"LT",7:"RT",8:"Back",9:"Start",10:"L3",11:"R3",12:"D-Up",13:"D-Down",14:"D-Left",15:"D-Right",16:"Home"};function s(t){return t===0||t===1?"Left Stick":t===2||t===3?"Right Stick":`Axis ${t}`}function c(t,e){return t===0&&e===1?"Left Stick":t===2&&e===3?"Right Stick":`Axis ${t}/${e}`}function f(t){switch(t){case"key":return"keyboard";case"mouse_button":case"mouse_move":return"mouse";case"gamepad_button":case"gamepad_axis":case"gamepad_axis_pair":return"gamepad";case"touch_button":case"touch_stick":return"touch";default:return null}}export{u as STANDARD_GAMEPAD_BUTTON_LABELS,f as bindingDeviceFamily,s as gamepadAxisLabel,c as gamepadAxisPairLabel,i as keyLabel,n as mouseButtonLabel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as o,a as r}from"./blender-properties-tab-C5CyPydi.js";import{CONSTRAINT_HEADER as e}from"./properties-constraints.inspector-CESzjuls.js";import"./jsx-runtime-DPjLkJKQ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./blender-runtime-host-BpBwGv7r.js";import"./clip-planes-CnAI6DZn.js";const i=[{title:"Bone Constraints",from:"Constraints",collection:!0,properties:e,andDeclared:!0}],t={id:"bone_constraint",curated:i},B="selection.inspector",D="Bone Constraints",E="properties-bone-constraints",R=140,_="object",h=r(t),N=o(t);export{N as default,E as icon,h as match,R as order,B as point,_ as railGroup,D as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as o,a as t}from"./blender-properties-tab-C5CyPydi.js";import"./jsx-runtime-DPjLkJKQ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./blender-runtime-host-BpBwGv7r.js";import"./clip-planes-CnAI6DZn.js";const i=[{title:"Transform (Pose)",from:"Pose Bone",properties:["location","lock_location","rotation_quaternion","rotation_axis_angle","rotation_euler","lock_rotation_w","lock_rotation","rotation_mode","scale","lock_scale"]},{title:"Transform",from:"Bone",properties:["head","tail","roll","length","lock"]},{title:"Bendy Bones",closed:!0,from:"Bone",properties:["bbone_segments","bbone_x","bbone_z","bbone_mapping_mode","use_endroll_as_inroll","use_scale_easing","bbone_handle_type_start","bbone_handle_use_scale_start","bbone_handle_use_ease_start","bbone_handle_type_end","bbone_handle_use_scale_end","bbone_handle_use_ease_end"]},{title:"Relations",from:"Bone",properties:["parent","children","use_relative_parent","use_connect","use_local_location","use_inherit_rotation","inherit_scale"]},{title:"Bone Collections",closed:!0,from:"Bone",properties:["collections"]},{title:"Inverse Kinematics",closed:!0,from:"Pose Bone",properties:["ik_stretch","lock_ik_x","lock_ik_y","lock_ik_z","ik_stiffness_x","ik_stiffness_y","ik_stiffness_z","use_ik_limit_x","ik_min_x","ik_max_x","use_ik_limit_y","ik_min_y","ik_max_y","use_ik_limit_z","ik_min_z","ik_max_z","use_ik_rotation_control"]},{title:"Deform",closed:!0,from:"Bone",properties:["use_deform","envelope_distance","envelope_weight","use_envelope_multiply","head_radius","tail_radius"]},{title:"Viewport Display",closed:!0,from:"Bone",properties:["hide","hide_select","display_type","color","show_wire"],sub:[{title:"Custom Shape",closed:!0,from:"Pose Bone",properties:["custom_shape","custom_shape_translation","custom_shape_rotation_euler","custom_shape_scale_xyz","use_custom_shape_bone_size","custom_shape_transform"]}]}],e={id:"bone",curated:i},k="selection.inspector",f="Bone",B="properties-bone",y=130,x="object",z=t(e),g=o(e);export{g as default,B as icon,z as match,y as order,k as point,x as railGroup,f as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as e,a as i}from"./blender-properties-tab-C5CyPydi.js";import"./jsx-runtime-DPjLkJKQ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./blender-runtime-host-BpBwGv7r.js";import"./clip-planes-CnAI6DZn.js";const o=[{title:"Visibility",properties:["hide_select","hide_render"],sub:[{title:"View Layer",from:"View Layer Collection",properties:["exclude","holdout","indirect_only"]}]},{title:"Instancing",properties:["instance_offset"]},{title:"Line Art",properties:["lineart_usage","lineart_use_intersection_mask","lineart_intersection_mask","use_lineart_intersection_priority","lineart_intersection_priority"]},{title:"Exporters",properties:["exporters"]}],t={id:"collection",curated:o},f="selection.inspector",h="Collection",x="properties-collection",C=60,T="collection",A=i(t),L=e(t);export{L as default,x as icon,A as match,C as order,f as point,T as railGroup,h as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as o,a as r}from"./blender-properties-tab-C5CyPydi.js";import"./jsx-runtime-DPjLkJKQ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./blender-runtime-host-BpBwGv7r.js";import"./clip-planes-CnAI6DZn.js";const e=["name","type","enabled","mute","influence","error_location","error_rotation","is_valid","is_override_data"],i=[{title:"Constraints",from:"Constraints",collection:!0,active:"activeConstraint",properties:e,andDeclared:!0}],t={id:"constraint",curated:i},f="selection.inspector",v="Object Constraints",A="properties-constraints",D=110,E="object",R=r(t),h=o(t);export{e as CONSTRAINT_HEADER,h as default,A as icon,R as match,D as order,f as point,E as railGroup,v as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as a,r as p,a as l,c}from"./blender-properties-tab-C5CyPydi.js";import"./jsx-runtime-DPjLkJKQ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./blender-runtime-host-BpBwGv7r.js";import"./clip-planes-CnAI6DZn.js";const n=[{title:"Vertex Groups",from:"Vertex Groups",collection:!0,active:"activeVertexGroup",properties:["name","index","lock_weight"]},{title:"Shape Keys",from:"Shape Keys",properties:["key_blocks","use_relative","eval_time","reference_key"]},{title:"UV Maps",properties:["uv_layers"]},{title:"Color Attributes",properties:["color_attributes"]},{title:"Attributes",properties:["attributes"]},{title:"Texture Space",closed:!0,properties:["texture_mesh","use_auto_texspace","texspace_location","texspace_size"]},{title:"Remesh",closed:!0,properties:["remesh_mode","remesh_voxel_size","remesh_voxel_adaptivity","use_remesh_fix_poles","use_remesh_preserve_volume","use_remesh_preserve_attributes"]},{title:"Geometry Data",closed:!0,properties:["has_custom_normals","total_vert_sel","total_edge_sel","total_face_sel"]},{title:"Animation",closed:!0,properties:["animation_data"]},{title:"Pose",properties:["pose_position"]},{title:"Bone Collections",closed:!0,properties:["collections_all","collections"]},{title:"Bones",from:"Bones",collection:!0,active:"activeBone",properties:["name","parent","use_connect","use_deform","head","tail","length"]},{title:"Viewport Display",closed:!0,properties:["display_type","show_names","show_bone_custom_shapes","show_bone_colors","show_axes","axes_position","relation_line_position"]},{title:"Inverse Kinematics",closed:!0,properties:["pose"]}],o={id:"data",curated:n},k="selection.inspector",B="Object Data",u={Mesh:"properties-data-mesh",Armature:"properties-data-armature",Curve:"properties-data-curve",SurfaceCurve:"properties-data-surface",MetaBall:"properties-data-meta",TextCurve:"properties-data-font",Lattice:"properties-data-lattice",Camera:"properties-data-camera",Light:"properties-data-light",Speaker:"properties-data-speaker",PointCloud:"properties-data-pointcloud",Volume:"properties-data-volume"},j=(s,i)=>{const e=p(s,i);if(e===null||e.kind!=="object")return"properties-data";const r=c();if(r.object!==e.name)return"properties-data";const t=r.context?.active?.dataType;return t==null?"properties-data-empty":u[t]??"properties-data"},w=120,D="object",G=l(o),P=a(o);export{P as default,j as icon,G as match,w as order,k as point,D as railGroup,B as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as t,a as r}from"./blender-properties-tab-C5CyPydi.js";import"./jsx-runtime-DPjLkJKQ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./blender-runtime-host-BpBwGv7r.js";import"./clip-planes-CnAI6DZn.js";const o=[{title:"Material Slots",from:"Material Slots",collection:!0,active:"activeMaterial",properties:["name","material","link","slot_index"]},{title:"Surface",from:"Material",properties:["use_nodes","node_tree","surface_render_method","use_backface_culling"]},{title:"Volume",closed:!0,from:"Material",properties:["volume_intersection_method","displacement_method","max_vertex_displacement"]},{title:"Settings",closed:!0,from:"Material",properties:["pass_index","use_backface_culling_shadow","use_backface_culling_lightprobe_volume","use_transparent_shadow","use_transparency_overlap","use_raytrace_refraction","thickness_mode","use_thickness_from_shadow"]},{title:"Line Art",closed:!0,from:"Material",properties:["lineart"]},{title:"Viewport Display",from:"Material",properties:["diffuse_color","metallic","roughness"]},{title:"Animation",closed:!0,from:"Material",properties:["animation_data"]}],e={id:"material",curated:o},M="selection.inspector",b="Material",g="properties-material",k=160,v="object",x=r(e),S=t(e);export{S as default,g as icon,x as match,k as order,M as point,v as railGroup,b as title};
|