@volter/game-editor 0.5.67 → 0.5.69
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 +10954 -5077
- package/LICENSE +1 -1
- package/LICENSE-BLENDER +2 -2
- package/NOTICE +2 -2
- package/additions/canvas/package.json +8 -0
- package/additions/canvas/src/canvas-mount.ts +46 -0
- package/additions/canvas/src/scene2d.tsx +18 -0
- package/catalog/entries/bake.json +1 -1
- package/catalog/entries/blender.json +3 -3
- package/catalog/entries/music.json +6 -6
- package/catalog/project-source/LICENSE +1 -1
- package/catalog/project-source/src/contributions/bake.kind.ts +2 -2
- package/catalog/project-source/src/contributions/builder-document.tsx +1 -1
- package/catalog/project-source/src/contributions/builder-ui.tsx +3 -3
- package/catalog/project-source/src/contributions/module-source.ts +4 -4
- package/catalog/project-source/src/lib/music/music-player.ts +18 -12
- package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +59 -59
- package/catalog/project-source/src/lib/static-batch/Frozen.tsx +1 -1
- package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +1 -1
- package/catalog/project-source/src/tools/bake-preview.tool.ts +9 -9
- package/dist/.vite/manifest.json +4106 -3965
- package/dist/assets/{AssetBudgetPanel-x_FNJbfZ.js → AssetBudgetPanel-BMR3AQhc.js} +10 -10
- package/dist/assets/AudioViewer-DESxi7pU.js +1 -0
- package/dist/assets/CanvasBoardDocument-Q_nrYFlB.js +1 -0
- package/dist/assets/CanvasSceneViewport-WZMoKy_F.js +1 -0
- package/dist/assets/ColorInput-C2EK-OnD.js +1 -0
- package/dist/assets/{EntityModelDocument-CzUHsH9E.js → EntityModelDocument-B_4ENTCq.js} +1 -1
- package/dist/assets/{EnvironmentAssetDocument-ByEB7_4A.js → EnvironmentAssetDocument-BZBp6OFJ.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-dhG-oiqd.js → GameplaySessionTimeline-1ivaucpv.js} +1 -1
- package/dist/assets/ImageViewer-D16OExYu.js +1 -0
- package/dist/assets/{InspectorCanvasPreview-CEr_Kxna.js → InspectorCanvasPreview-BrFjhoiD.js} +1 -1
- package/dist/assets/InspectorObjectPreview-CY5xVsPR.js +1 -0
- package/dist/assets/JsonAssetDocument-CvjTlcdr.js +2 -0
- package/dist/assets/{LiveModuleDocument-DL8QHSlk.js → LiveModuleDocument-ne1o9giX.js} +1 -1
- package/dist/assets/{LutAssetDocument-BImiug2M.js → LutAssetDocument-Cp0v-O7q.js} +1 -1
- package/dist/assets/ModelAssetDocument-Ceu7OIN9.js +1 -0
- package/dist/assets/{NonThreeAuthoringBootstrap-B40qmGGS.js → NonThreeAuthoringBootstrap-DiElZf-e.js} +1 -1
- package/dist/assets/Object3DDocumentToolbar-BLNamqii.js +1 -0
- package/dist/assets/Object3DDocumentViewport-D6QoHfa_.js +2 -0
- package/dist/assets/{Object3DPreview-ClYDoH2L.js → Object3DPreview-ZVokr044.js} +1 -1
- package/dist/assets/OnlineAssetDetail-Dnckd7zB.js +1 -0
- package/dist/assets/PlayBar-DsMitSgy.js +1 -0
- package/dist/assets/{QuarksAssetDocument-B-VOj-n4.js → QuarksAssetDocument-B5J8uHFM.js} +1 -1
- package/dist/assets/ReactCanvasControls-CmfvxJYY.js +1 -0
- package/dist/assets/RootSelectionOverlay-BWsNiSuM.js +1 -0
- package/dist/assets/{ShaderAssetDocument-Kn8IvRGV.js → ShaderAssetDocument-CT7XzsZq.js} +5 -5
- package/dist/assets/ShadowEditor-YO5KEfnz.js +1 -0
- package/dist/assets/{SourceAssetViewer-CLQ95VSD.js → SourceAssetViewer-FSLup2km.js} +1 -1
- package/dist/assets/StageHost-DYfGYwvq.js +2 -0
- package/dist/assets/{StoryPreviewMount-D2lg37et.js → StoryPreviewMount-BhvT5QlB.js} +1 -1
- package/dist/assets/ThreeBoardDocument-B-z2nwnH.js +2 -0
- package/dist/assets/{ThreeIsolationSceneContent-DbYIylZQ.js → ThreeIsolationSceneContent-B5pU4Y6k.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-WEi6C9uU.js → ToolObject3DPreview-VtraiQ4Q.js} +1 -1
- package/dist/assets/Toolbar-M62Gob9T.js +1 -0
- package/dist/assets/{TransientHint-BpDLhRLd.js → TransientHint-Cc40mHWE.js} +1 -1
- package/dist/assets/VideoViewer-BxcUwXQm.js +1 -0
- package/dist/assets/ViewportShadingMenu-BoMPnTVh.js +1 -0
- package/dist/assets/active-ingest-0QjJWb7i.js +3 -0
- package/dist/assets/{animation-clock-Bm80XdqP.js → animation-clock-BXEwUJtz.js} +1 -1
- package/dist/assets/animation-mixers.service-C-Ko4KzM.js +1 -0
- package/dist/assets/animation-timeline.utility-Bl15-rYb.js +1 -0
- package/dist/assets/{asset-budget-asset.menu-CEgP0Kiw.js → asset-budget-asset.menu-BUa3g0Wy.js} +1 -1
- package/dist/assets/{asset-budget.action-D4R1c3wi.js → asset-budget.action-Dl5eVPIo.js} +1 -1
- package/dist/assets/{asset-budget.document-Syzjn1U1.js → asset-budget.document-DJylQ-0h.js} +1 -1
- package/dist/assets/{asset-budget.menu-BbRiqXeM.js → asset-budget.menu-BJtvNMLj.js} +1 -1
- package/dist/assets/asset-editor-persistence-BIbf5u0Q.js +1 -0
- package/dist/assets/asset-loaders-DoNflsHL.js +2 -0
- package/dist/assets/{asset-preview-B1tDziF1.js → asset-preview-DxlSdRZn.js} +1 -1
- package/dist/assets/{audio-unlock.service-ucMfCVBw.js → audio-unlock.service-CTaiyXF9.js} +1 -1
- package/dist/assets/audio.utility-CEmNc68t.js +1 -0
- package/dist/assets/autoplay.service-BZLSUyL8.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-C8mFMXSr.js → babylon-authoring-adapter-BZvV2bz_.js} +1 -1
- package/dist/assets/binding-resolver-DGbk9_XR.js +2 -0
- package/dist/assets/blender-emscripten-engine-B7lfg-RX.js +2 -0
- package/dist/assets/{blender-node-editor.document-C1YmwWls.js → blender-node-editor.document-wXJobGNH.js} +1 -1
- package/dist/assets/{blender-properties-tab-B8lyjgj3.js → blender-properties-tab-7GFf80ev.js} +1 -1
- package/dist/assets/{blender-runtime-host-CyQlImSR.js → blender-runtime-host-CILxrx5T.js} +2 -2
- package/dist/assets/{blender-runtime-skin-BK7ShZ6z.js → blender-runtime-skin-Cd5lQYsC.js} +7 -7
- package/dist/assets/{blender-runtime.document-B0nVQs0P.js → blender-runtime.document-C0r_R49S.js} +7 -7
- package/dist/assets/{blender-timeline.document-CMcdE2CK.js → blender-timeline.document-BaISZMBc.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-CjqNo4sZ.js → blender-uv-editor.document-CT_fsyyA.js} +1 -1
- package/dist/assets/blender-version.status-DzEx7u7k.js +1 -0
- package/dist/assets/blender-wali-engine-DOiQCBXH.js +2 -0
- package/dist/assets/{blender.command-C6NmRBo5.js → blender.command-DdiKd8mZ.js} +1 -1
- package/dist/assets/blender.keymap-BmOBRY7p.js +1 -0
- package/dist/assets/blender.status-BMETIbb2.js +1 -0
- package/dist/assets/board-guides-CjHQ9Ynm.js +1 -0
- package/dist/assets/body-marks-C1LxJtQb.js +1 -0
- package/dist/assets/bridge.command-DXUeavn5.js +3 -0
- package/dist/assets/{browserAll-lF_dLQVz.js → browserAll-Dg46xT22.js} +1 -1
- package/dist/assets/build-player.document-BHwVV3K0.js +1 -0
- package/dist/assets/build-profiles.document-HkpS-Kxa.js +2 -0
- package/dist/assets/build-progress.status-u1J0Rm1D.js +1 -0
- package/dist/assets/build-session-BLboUUbw.js +9 -0
- package/dist/assets/{build.action-DRX2IcYt.js → build.action-C00DL83N.js} +1 -1
- package/dist/assets/{build.command-BGvLaLG0.js → build.command-Cjk_NY75.js} +1 -1
- package/dist/assets/build.header-BWNmNWFT.js +1 -0
- package/dist/assets/{build.menu-UenrjPWS.js → build.menu-BBYtqCIq.js} +1 -1
- package/dist/assets/{build.service-BIUoTY6l.js → build.service-DOU15tKN.js} +1 -1
- package/dist/assets/{camera-DrvaM47S.js → camera-7DGyYW7Y.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-CjJALNO8.js → camera-runtime.inspector-n-jiOR-3.js} +1 -1
- package/dist/assets/canvas-design-mount-CSRHU-ag.js +6 -0
- package/dist/assets/canvas-entry-runtime-BST8yRuK.js +2 -0
- package/dist/assets/{canvas-preview-frames-C0QTagA3.js → canvas-preview-frames-Cja32aW2.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-Dgjr-rT1.js → canvas-story-capture.service-D5R5HJ8n.js} +2 -2
- package/dist/assets/capability-coverage-ByWftxk4.js +7 -0
- package/dist/assets/{collaboration-presence-BVIQuN1l.js → collaboration-presence-D6MC9xJN.js} +1 -1
- package/dist/assets/{collider-C7SbIYKY.js → collider-B78EcUc9.js} +1 -1
- package/dist/assets/{component-board.service-BEsFAw4_.js → component-board.service-BaQI5Oas.js} +2 -2
- package/dist/assets/component-board.service-CkjrsD8x.js +2 -0
- package/dist/assets/{component-board.service-CWFaGMCO.js → component-board.service-Dvjz_g-x.js} +2 -2
- package/dist/assets/component-contracts.service-C3-AXQp7.js +1 -0
- package/dist/assets/component-instance-root-DLI40MiB.js +1 -0
- package/dist/assets/{component-verbs.command-oNtGgzQL.js → component-verbs.command-Brr_WcaR.js} +1 -1
- package/dist/assets/component-verbs.service-DC2sC3j3.js +1 -0
- package/dist/assets/{config-_wCzzlM_.js → config-BI_7osdR.js} +3 -3
- package/dist/assets/{configurations-BXU4GGbV.js → configurations-XP9YLkrt.js} +1 -1
- package/dist/assets/connection.status-BhRwcFx0.js +1 -0
- package/dist/assets/{constraint-5KLYpGm7.js → constraint-Bp1l8hY-.js} +1 -1
- package/dist/assets/constraints.inspector-Dm1cycK3.js +1 -0
- package/dist/assets/{content-bounds-BeuIXKYu.js → content-bounds-DROIchTa.js} +1 -1
- package/dist/assets/{contract-system-adapters-Bic_7sev.js → contract-system-adapters-Cn7OW_ay.js} +1 -1
- package/dist/assets/coverage.service-l42ty7lr.js +3 -0
- package/dist/assets/create-runtime-B_uTwsmi.js +3 -0
- package/dist/assets/curve-THOUsg-j.js +1 -0
- package/dist/assets/{data-asset-DfQ2Pjse.js → data-asset-DAANayR6.js} +1 -1
- package/dist/assets/data-check-core-CHqar_E8.js +1 -0
- package/dist/assets/data-ref-CN34UeVw.js +1 -0
- package/dist/assets/debug-bridge-BD1XVAIB.js +1 -0
- package/dist/assets/debug-registry-ggQWxtu-.js +1 -0
- package/dist/assets/{deferred-ingest-play-BdR4qGk6.js → deferred-ingest-play-B2JUlwlT.js} +2 -2
- package/dist/assets/{design-time-canvas-mount-DPQeHSN2.js → design-time-canvas-mount-as9cN9I6.js} +2 -2
- package/dist/assets/design-time-layers-BRseeSmV.js +1 -0
- package/dist/assets/{design-time-mount.service-Ks-5Wkcs.js → design-time-mount.service-BTVu3yKo.js} +2 -2
- package/dist/assets/{design-time-mount.service-Ca-DZGFV.js → design-time-mount.service-DKvc7lVK.js} +2 -2
- package/dist/assets/design-time-react-mount-C7rB56QD.js +1 -0
- package/dist/assets/{document-preview-three-DThkjI1S.js → document-preview-three-CxmRhCcV.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-BrLU8IJ_.js → dom-authoring-adapter-L8OzXfmE.js} +1 -1
- package/dist/assets/{draco3d-B2cwv46o.js → draco3d-BjNuXv66.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-D4ITNbsm.js → edit-mode-audio.service-BwI5u845.js} +1 -1
- package/dist/assets/edit-mode-authoring-D5f7aHHl.js +1 -0
- package/dist/assets/{edit-mode-networking.service-BNv-FTRh.js → edit-mode-networking.service-DqP_4lbI.js} +1 -1
- package/dist/assets/editor-api-BM7H_F4G.js +1 -0
- package/dist/assets/{editor-layers-BDJnAAzj.js → editor-layers-D-CTUqco.js} +1 -1
- package/dist/assets/editor-presentation-activity-CqJH4G9t.js +1 -0
- package/dist/assets/{editor-shell-store-ChLcVeNB.js → editor-shell-store-DHVWS8cE.js} +1 -1
- package/dist/assets/{entity-object-JmYMfLsx.js → entity-object-MKYemTFM.js} +1 -1
- package/dist/assets/{extend-Cc-nEa_A.js → extend-BrgqZiMY.js} +1 -1
- package/dist/assets/fork-menu-DE2MK3Nq.js +1 -0
- package/dist/assets/{frame-debugger-store-DaCbAYSW.js → frame-debugger-store-BXoLKTdZ.js} +1 -1
- package/dist/assets/game-audio-BeCyd0Ha.js +1 -0
- package/dist/assets/{game-contract-seams-BnPFGLll.js → game-contract-seams-tyKDsfaP.js} +1 -1
- package/dist/assets/{game-css-scope-transform-D_p7cVgW.js → game-css-scope-transform-DcjrwtVc.js} +2 -2
- package/dist/assets/game-document.service-CTb2itHQ.js +1 -0
- package/dist/assets/game-eval.command-CpDKXOQU.js +2 -0
- package/dist/assets/game-module-access-BTInp2NG.js +1 -0
- package/dist/assets/game-network-DW5ARz4R.js +22 -0
- package/dist/assets/{gameplay-export-BzYzLZPi.js → gameplay-export-cHk3v9y-.js} +1 -1
- package/dist/assets/gameplay-replay-HRenPTtU.js +1 -0
- package/dist/assets/gameplay.command-DcY2lKKX.js +1 -0
- package/dist/assets/generation-CdOATubd.css +1 -0
- package/dist/assets/{generation-jobs-BZhOMrp-.js → generation-jobs-CJBehuUp.js} +1 -1
- package/dist/assets/generation.service-BMOc-C9i.js +1 -0
- package/dist/assets/{generations-DVDht_31.js → generations-ssgVOe_6.js} +1 -1
- package/dist/assets/generations.status-B_SmPReI.js +1 -0
- package/dist/assets/hierarchy-marks-BuCO8Ke-.js +1 -0
- package/dist/assets/hierarchy-marks-CsTaTkc7.js +1 -0
- package/dist/assets/hosted-asset-materialization-CiXZI85V.js +2 -0
- package/dist/assets/{ibl-override-material-CiKkaOTW.js → ibl-override-material-CMo_a49U.js} +1 -1
- package/dist/assets/index-B0S4fQQV.js +1 -0
- package/dist/assets/{index-C3Pw-9So.js → index-B9bd4k-t.js} +1 -1
- package/dist/assets/index-BMxv2MNV.js +1 -0
- package/dist/assets/{index-DUZeuA7g.js → index-Bm4_DmRO.js} +1 -1
- package/dist/assets/{index-cNc-iFbq.js → index-BvBlIRwM.js} +1 -1
- package/dist/assets/{index-Ck3JFh48.js → index-BweKDdi_.js} +1 -1
- package/dist/assets/{index-BRJMIUK0.js → index-C5ZAyrKq.js} +346 -345
- package/dist/assets/index-CPiRKiDC.css +1 -0
- package/dist/assets/index-CfpGZrbC.js +1 -0
- package/dist/assets/index-Czvj6whv.js +1 -0
- package/dist/assets/{index-SS9EugVg.js → index-DgPDGGSV.js} +2 -2
- package/dist/assets/{inference-diagnostics-xecGdohW.js → inference-diagnostics-DLt9ql9I.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-DAt8WFSy.js → ingest-boot-viewport-BXVXjYpG.js} +1 -1
- package/dist/assets/ingest-siblings-DWJ7OGB_.js +1 -0
- package/dist/assets/ingest-source-persistence-6ShMoSCa.js +1 -0
- package/dist/assets/ingest.service-BBbX8ibg.js +1 -0
- package/dist/assets/{inspect-Dr4qvDpJ.js → inspect-Cz3Zyx_1.js} +1 -1
- package/dist/assets/inspection-D8fZOHCM.js +1 -0
- package/dist/assets/instances.command-BrdlngrL.js +1 -0
- package/dist/assets/{json-history-resource-DwS10tqD.js → json-history-resource-Uqrihfc8.js} +1 -1
- package/dist/assets/layered-pick-CAVQMPI7.js +1 -0
- package/dist/assets/{light-DcFqVCmv.js → light-CqzsCWeJ.js} +1 -1
- package/dist/assets/{live-project-verbs-C3LzprCe.js → live-project-verbs-CdFmLYOo.js} +1 -1
- package/dist/assets/{machine.document-BzZxubYQ.js → machine.document-DRIFOVaa.js} +1 -1
- package/dist/assets/{machines.finder-BR02bfVG.js → machines.finder-DPCT6few.js} +1 -1
- package/dist/assets/material-BVApn1V_.js +1 -0
- package/dist/assets/{material-factory-COz7qZhC.js → material-factory-B_75xxFD.js} +1 -1
- package/dist/assets/{mesh-DcmO-mWI.js → mesh-DdA3mExo.js} +1 -1
- package/dist/assets/model-asset-sections-D1uxOu2v.css +1 -0
- package/dist/assets/model-asset-sections.service-CJnSIckZ.js +1 -0
- package/dist/assets/{model-inspection-CXHxrafK.js → model-inspection-DvspbmJl.js} +1 -1
- package/dist/assets/{model-thumbnail-BEKPWg4l.js → model-thumbnail-BmQs-h6t.js} +1 -1
- package/dist/assets/{models.finder-c1I0tp2M.js → models.finder-Qv_Hsccy.js} +1 -1
- package/dist/assets/module-mode-MJ4Gbsry.js +2 -0
- package/dist/assets/mount-canvas-ingest-root-BxtM8OaB.js +2 -0
- package/dist/assets/mount-dom-ingest-root-pGatqO46.js +2 -0
- package/dist/assets/mount-ingest-root-C7jb-mCl.js +2 -0
- package/dist/assets/mount-manifest-BfoHBuzn.js +1 -0
- package/dist/assets/mount-readiness-DyAd17pe.js +4 -0
- package/dist/assets/mount-three-ingest-root-Boa5mcaF.js +1 -0
- package/dist/assets/{mounted-authoring-Clftxx0x.js → mounted-authoring-DxMISwvR.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-B4-eAYGI.js → mounted-story-viewport-source-DfnLxI1f.js} +1 -1
- package/dist/assets/{native-debug-module-2_HVupdg.js → native-debug-module-BlrALjM3.js} +1 -1
- package/dist/assets/{navigation-CH3-zr1n.js → navigation-CqG5o5AR.js} +1 -1
- package/dist/assets/{navmesh.menu-Dfi-Pk-8.js → navmesh.menu-D4TdVDhe.js} +1 -1
- package/dist/assets/{navmesh.service-Cz7QFY-M.js → navmesh.service-DWKT5ruQ.js} +1 -1
- package/dist/assets/network-observer.service-ZRAquNq4.js +1 -0
- package/dist/assets/network.utility-DjeOEvAY.js +1 -0
- package/dist/assets/object-marks-BnvSuCTt.js +1 -0
- package/dist/assets/{object3d-authoring-subject-BDrxd1GA.js → object3d-authoring-subject-XccsO0xG.js} +1 -1
- package/dist/assets/{object3d-document-session-registry-DJDEDM0p.js → object3d-document-session-registry-CMRJdFp6.js} +2 -2
- package/dist/assets/{oid-transform-D5Kxt6ij.js → oid-transform-DaA6yW6o.js} +1 -1
- package/dist/assets/{particles-vRp0Lf3o.js → particles-DsQRcDBY.js} +1 -1
- package/dist/assets/{performance-profiler-OwnXQX0M.js → performance-profiler-CMbwGBuk.js} +1 -1
- package/dist/assets/pixi-authoring-adapter-BoBt8bB5.js +1 -0
- package/dist/assets/pixi-live-write-target-CYZgvC6U.js +1 -0
- package/dist/assets/play.command-D9JGJP-e.js +2 -0
- package/dist/assets/pose-guard-CLabLSzf.js +1 -0
- package/dist/assets/presentation-COhHQdmR.js +1 -0
- package/dist/assets/{product-CxmUIxmr.js → product-CaRGoiIH.js} +1 -1
- package/dist/assets/{profiler.action-Dzy9DuAc.js → profiler.action-Cz7HYWjh.js} +1 -1
- package/dist/assets/{profiler.menu-jLDO3U6N.js → profiler.menu-D5aR_FBy.js} +1 -1
- package/dist/assets/profiler.utility-KwxlIPKb.js +1 -0
- package/dist/assets/{project-authoring-session-C3eusefK.js → project-authoring-session-DKXHVwxO.js} +2 -2
- package/dist/assets/project-provenance-BGnJXJwa.js +1 -0
- package/dist/assets/{properties-bone-constraints.inspector-B_PbSMV7.js → properties-bone-constraints.inspector-Bo-sU8eR.js} +1 -1
- package/dist/assets/{properties-bone.inspector-CMDEQuBd.js → properties-bone.inspector-BQiWplQv.js} +1 -1
- package/dist/assets/{properties-collection.inspector-D7Ay8yRj.js → properties-collection.inspector-C5BnR-GE.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-DS1fZgXK.js → properties-constraints.inspector-CyheU12R.js} +1 -1
- package/dist/assets/{properties-data.inspector-k2pGN2Mp.js → properties-data.inspector-CkycARja.js} +1 -1
- package/dist/assets/{properties-material.inspector-Bb3yAGUx.js → properties-material.inspector-Bl_PUmY-.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-BcJfe-Wy.js → properties-modifiers.inspector-j7SnOxQq.js} +1 -1
- package/dist/assets/{properties-object.inspector-CUSfXJuq.js → properties-object.inspector-DcR3MGLK.js} +1 -1
- package/dist/assets/{properties-output.inspector-BTVW2kn1.js → properties-output.inspector-BLjw6K4b.js} +1 -1
- package/dist/assets/{properties-particles.inspector-Cw0fxx3B.js → properties-particles.inspector-BUIm2-Jf.js} +1 -1
- package/dist/assets/{properties-physics.inspector-C-0bD2bu.js → properties-physics.inspector-DNvRcxb6.js} +1 -1
- package/dist/assets/{properties-render.inspector-C8D5UpjX.js → properties-render.inspector-8FMZ-qoZ.js} +1 -1
- package/dist/assets/{properties-scene.inspector-HjK6QHGg.js → properties-scene.inspector-Dx7_z75k.js} +1 -1
- package/dist/assets/{properties-texture.inspector-CckZgUaI.js → properties-texture.inspector-WT15951-.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-C1ajtVSk.js → properties-view-layer.inspector-P7VNTdqr.js} +1 -1
- package/dist/assets/{properties-world.inspector-BiT_EdT-.js → properties-world.inspector-B3t1q8TF.js} +1 -1
- package/dist/assets/r3f-design-session-lsbFnoWH.js +2 -0
- package/dist/assets/{r3f-physics-binding-DzrbpqjM.js → r3f-physics-binding-Cx8yhuwt.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-DbbeRcvt.js → r3f-source-authoring-adapter-jH3G0TeH.js} +2 -2
- package/dist/assets/react-canvas-navigation-B_gOe3CI.js +1 -0
- package/dist/assets/react-inspector.service-CZf1vfdX.js +1 -0
- package/dist/assets/react-story-board-CCm2Opwn.js +1 -0
- package/dist/assets/{react-three-rapier.esm-U8J7g6tH.js → react-three-rapier.esm-CHXGG51p.js} +1 -1
- package/dist/assets/react-world-authoring-adapter-CnzxMtYz.js +1 -0
- package/dist/assets/{realm-services-CnY105XU.js → realm-services-Do9J6nsb.js} +1 -1
- package/dist/assets/reflection-probe-capture.inspector-BAjjIybz.js +1 -0
- package/dist/assets/{reflection-probe-BHNGwVyz.js → reflection-probe-sIto9mh0.js} +1 -1
- package/dist/assets/registry-Xnduk02T.js +1 -0
- package/dist/assets/{relative-import-specifier-BFKIWEWs.js → relative-import-specifier-CPFTrxi4.js} +1 -1
- package/dist/assets/{render-env-BkKZ4uMA.js → render-env-YJlI8K0i.js} +1 -1
- package/dist/assets/{render-features-rxbawsRb.js → render-features-DMSV2qKJ.js} +1 -1
- package/dist/assets/{render-settings-DS5leCed.js → render-settings-CRyDhHyz.js} +1 -1
- package/dist/assets/{resolve-three-CVnMRHxw.js → resolve-three-D27rMc37.js} +19 -19
- package/dist/assets/root-seam-contract-gjWUd5uu.js +1 -0
- package/dist/assets/run-selection-B0jOdyYt.js +2 -0
- package/dist/assets/scene-capture-Di9cM1p4.js +1 -0
- package/dist/assets/scene-document.service-XxGs4HHE.js +2 -0
- package/dist/assets/{scene-framing-BQt72ZCw.js → scene-framing-DkZKDwH3.js} +1 -1
- package/dist/assets/{scene-index--lRWLEmW.js → scene-index-DHeKmalD.js} +1 -1
- package/dist/assets/{scene-query-s1y04OVB.js → scene-query-ByZtXA2m.js} +1 -1
- package/dist/assets/seeded-random-BJthDRMu.js +1 -0
- package/dist/assets/{session-CTXsU1lK.js → session-x8E_NJk2.js} +34 -34
- package/dist/assets/{setup-renderer-Cwkl1Ar6.js → setup-renderer-F9mG7t6r.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-DF679Ncb.js → source-object3d-authoring-adapter-CvmFpSUj.js} +1 -1
- package/dist/assets/{source-persistence-backend-CwLYVPXj.js → source-persistence-backend-au3WtEn6.js} +1 -1
- package/dist/assets/{spark-renderer-lifecycle-DfYpvEJa.js → spark-renderer-lifecycle-B6Axb6jm.js} +1 -1
- package/dist/assets/{stage-keyboard-B8BEW592.js → stage-keyboard-BQkndG_D.js} +1 -1
- package/dist/assets/stage-overlay-set-g6eWhuRv.js +1 -0
- package/dist/assets/stage-presence-markers-0CDfO5f4.js +1 -0
- package/dist/assets/stage-transform-tools-BzPl7OIo.js +1 -0
- package/dist/assets/standard-viewport-dressing-BW-dM_1h.js +24 -0
- package/dist/assets/{state-watch.action-DnR5Zjr-.js → state-watch.action-Z1nQ5awu.js} +1 -1
- package/dist/assets/{state-watch.menu-wYLCLsAw.js → state-watch.menu-CQHGUF3W.js} +1 -1
- package/dist/assets/state-watch.utility-DCIg2i79.js +1 -0
- package/dist/assets/{story-capture-BmnwHGDV.js → story-capture-BIrjDKeY.js} +1 -1
- package/dist/assets/story-documents-BvG2xeaR.js +3 -0
- package/dist/assets/{story-documents.service-B6v7Z-WE.js → story-documents.service-DOSEa3ja.js} +1 -1
- package/dist/assets/{story-documents.service-yagl1wGp.js → story-documents.service-y1m7XGMJ.js} +1 -1
- package/dist/assets/{story-media-presence-BqRMu572.js → story-media-presence-HLV-KaMj.js} +1 -1
- package/dist/assets/{story-pixi-preview-Da6afqLg.js → story-pixi-preview-CMhho2gG.js} +1 -1
- package/dist/assets/{story-presentation-DMSYRWaz.js → story-presentation-CYhVv8Ku.js} +1 -1
- package/dist/assets/story-three-preview-CgcLF5lE.js +2 -0
- package/dist/assets/{structural-ids-Br2zjINh.js → structural-ids-BOo2BRoY.js} +1 -1
- package/dist/assets/studio-environment-R9qXUUcC.js +2 -0
- package/dist/assets/{surface-state-1lTOi8FD.js → surface-state-D8Qnowo6.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-eiQXwMIc.js → syntactic-prop-specs-8gkBuc5j.js} +1 -1
- package/dist/assets/team-playtest.service-BBMZ2iyk.js +1 -0
- package/dist/assets/{three-TCuY32m_.js → three-DiL6vMXq.js} +1 -1
- package/dist/assets/three-authoring-adapter-CkLR2zGf.js +1 -0
- package/dist/assets/three-authoring.service-CovhlCGx.js +2 -0
- package/dist/assets/{three-ingest-runtime-B7rtg3QE.js → three-ingest-runtime-CwTqAHgX.js} +1 -1
- package/dist/assets/{three-integration-BdN5Nhsg.js → three-integration-DXOFI88n.js} +2 -2
- package/dist/assets/three-integration.service-rCAqpqSp.js +1 -0
- package/dist/assets/three-projection-core-B7Lf8tOp.js +1 -0
- package/dist/assets/{three-state-DwFE3ay2.js → three-state-BCACvUtm.js} +1 -1
- package/dist/assets/{three-story-capture.service-CvpV3v5a.js → three-story-capture.service-rTFKNtHA.js} +2 -2
- package/dist/assets/{three-story-model-C2r2BuiA.js → three-story-model-BjKr7OMn.js} +1 -1
- package/dist/assets/three-viewport-presentation-CBzvc2v2.js +141 -0
- package/dist/assets/tools-DfctM216.js +1 -0
- package/dist/assets/transform-mode-request-DlEApNrA.js +1 -0
- package/dist/assets/transport-strip-xCg94CuI.js +1 -0
- package/dist/assets/transport.header-BRtdky0x.js +1 -0
- package/dist/assets/{trigger-volume-DP0G1VBe.js → trigger-volume-BLkHmfm9.js} +1 -1
- package/dist/assets/tuples-BDz3wbQL.js +1 -0
- package/dist/assets/ui-board-document-DvbK_HVN.js +2 -0
- package/dist/assets/{user-data-Bpj7diUS.js → user-data-C84W0V47.js} +1 -1
- package/dist/assets/user-data-CODoGZqA.js +1 -0
- package/dist/assets/{utility-view-state-CAfbFbKQ.js → utility-view-state-CDRxZSo-.js} +1 -1
- package/dist/assets/viewport-door-BARIpMu-.js +1 -0
- package/dist/assets/{viewport-root-presentation-vgxsTyj4.js → viewport-root-presentation-hRLF0BeO.js} +1 -1
- package/dist/assets/{viewport-surface-status-cwCiBGa7.js → viewport-surface-status-TUfhXKR9.js} +1 -1
- package/dist/assets/{webworkerAll-Cm3gTjWi.js → webworkerAll-PJtcQ1FD.js} +1 -1
- package/dist/assets/worker-BtXrsgFy.js +2 -0
- package/dist/assets/workspace-arrangement-DqG5sUns.js +1 -0
- package/dist/assets/world-documents-D69XaqUX.js +1 -0
- package/dist/assets/world-root-stage-binding-BgZWZEuD.js +1 -0
- package/dist/assets/{xstate-animation-binding-BGLxcZT_.js → xstate-animation-binding-CIyLzGHs.js} +1 -1
- package/dist/assets/{xstate-animation-meta-D_T441Ru.js → xstate-animation-meta-CbYWup3R.js} +1 -1
- package/dist/volter-shared-react.json +10 -0
- package/dist/volter-shared-three.json +3 -0
- package/dist-node/cli.js +253 -210
- package/dist-node/create.js +103 -82
- package/package.json +23 -20
- package/src/contributions.d.ts +1 -1
- package/src/index.ts +10 -10
- package/starter/cube.py +1 -1
- package/template/.agents/references/project-manual.md +17 -17
- package/template/.agents/skills/editor/SKILL.md +6 -6
- package/template/.agents/skills/editor/agents/openai.yaml +3 -3
- package/template/.agents/skills/editor/references/editor-control.md +62 -62
- package/template/{.claude/skills/vgai-3d-models → .agents/skills/volter-3d-models}/SKILL.md +3 -3
- package/template/{.github/skills/vgai-ingest-existing-game → .agents/skills/volter-ingest-existing-game}/SKILL.md +2 -2
- package/template/.agents/skills/{vgai-music → volter-music}/SKILL.md +35 -11
- package/template/{.claude/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/SKILL.md +9 -9
- package/template/.agents/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
- package/template/{.github/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
- package/template/.claude/skills/editor/SKILL.md +6 -6
- package/template/.claude/skills/editor/agents/openai.yaml +3 -3
- package/template/.claude/skills/editor/references/editor-control.md +62 -62
- package/template/{.agents/skills/vgai-3d-models → .claude/skills/volter-3d-models}/SKILL.md +3 -3
- package/template/{.agents/skills/vgai-ingest-existing-game → .claude/skills/volter-ingest-existing-game}/SKILL.md +2 -2
- package/template/{.github/skills/vgai-threejs-authoring → .claude/skills/volter-threejs-authoring}/SKILL.md +9 -9
- package/template/.claude/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.claude/skills/{vgai-threejs-authoring → volter-threejs-authoring}/references/helper-catalog.md +1 -1
- package/template/.github/copilot-instructions.md +1 -1
- package/template/.github/skills/editor/SKILL.md +6 -6
- package/template/.github/skills/editor/agents/openai.yaml +3 -3
- package/template/.github/skills/editor/references/editor-control.md +62 -62
- package/template/.github/skills/{vgai-3d-models → volter-3d-models}/SKILL.md +3 -3
- package/template/{.claude/skills/vgai-ingest-existing-game → .github/skills/volter-ingest-existing-game}/SKILL.md +2 -2
- package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/SKILL.md +9 -9
- package/template/.github/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
- package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
- package/template/.mcp.json +3 -3
- package/template/AGENTS.md +24 -23
- package/template/DEVLOG.md +1 -1
- package/template/IDIOMS.md +3 -3
- package/template/LICENSE +3 -3
- package/template/README.md +12 -12
- package/template/check-idioms.ts +51 -51
- package/template/manifest-entry-modules-plugin.ts +17 -4
- package/template/package.json +12 -12
- package/template/server/loopback.ts +1 -1
- package/template/server/main.ts +4 -4
- package/template/server/rooms/arena-room.ts +8 -8
- package/template/server/rooms/game-room.ts +8 -8
- package/template/server/rooms.ts +2 -2
- package/template/src/bot/QaTester.tsx +1 -1
- package/template/src/bot/bot-station.ts +2 -2
- package/template/src/bot/tester-station.ts +1 -1
- package/template/src/contributions/README.md +1 -1
- package/template/src/contributions/analytics.analytics.tsx +1 -1
- package/template/src/contributions/data.document.tsx +2 -2
- package/template/src/contributions/pages.finder.ts +1 -1
- package/template/src/contributions/tester.inspector.tsx +2 -2
- package/template/src/contributions/use-game-modules.ts +1 -1
- package/template/src/input.ts +2 -2
- package/template/src/lib/reflections/volume-reflection-material.ts +59 -59
- package/template/src/lib/static-batch/Frozen.tsx +1 -1
- package/template/src/lib/static-batch/mutation-watch.ts +1 -1
- package/template/src/main.ts +58 -6
- package/template/src/manifest-entry-modules.d.ts +12 -1
- package/template/src/prefabs/HeroBox.stories.tsx +1 -1
- package/template/src/world.tsx +1 -1
- package/template/tsconfig.json +1 -1
- package/template/validate-manifest.ts +3 -3
- package/template/vite.config.ts +11 -11
- package/template/{vgai.adapter.ts → volter.adapter.ts} +1 -1
- package/template/{vgai.project.json → volter.project.json} +2 -2
- package/template-dotfiles/gitignore +27 -27
- package/workbench/src/media/game-cover.css +11 -11
- package/workbench/src/product.contribution.ts +28 -28
- package/workbench/src/{vgaiGameSkew.ts → volterGameSkew.ts} +16 -16
- package/dist/assets/AudioViewer-BDPqHDfU.js +0 -1
- package/dist/assets/CanvasBoardDocument-mxL0oJ3N.js +0 -1
- package/dist/assets/CanvasSceneViewport-C_mapCwC.js +0 -1
- package/dist/assets/ColorInput-QUPS1pEB.js +0 -1
- package/dist/assets/ImageViewer-tlVvkdM4.js +0 -1
- package/dist/assets/InspectorObjectPreview-W-y079DS.js +0 -1
- package/dist/assets/JsonAssetDocument-CPmcWFPW.js +0 -2
- package/dist/assets/ModelAssetDocument-De1HKuxG.js +0 -1
- package/dist/assets/Object3DDocumentToolbar-Cks81kCS.js +0 -1
- package/dist/assets/Object3DDocumentViewport-DCwiSY3O.js +0 -2
- package/dist/assets/OnlineAssetDetail-CNuwSQRQ.js +0 -1
- package/dist/assets/PlayBar-bT8Xdrap.js +0 -1
- package/dist/assets/ReactCanvasControls-CnJrPj-B.js +0 -1
- package/dist/assets/RootSelectionOverlay-CpaGluQu.js +0 -1
- package/dist/assets/ShadowEditor-CVtMlALn.js +0 -1
- package/dist/assets/StageHost-B89HKcvd.js +0 -2
- package/dist/assets/ThreeBoardDocument-BAgHrbtu.js +0 -2
- package/dist/assets/Toolbar-DkTHnQto.js +0 -1
- package/dist/assets/VideoViewer-DMV8lf4P.js +0 -1
- package/dist/assets/ViewportShadingMenu-CXPi6fl8.js +0 -1
- package/dist/assets/active-ingest-DA426a81.js +0 -3
- package/dist/assets/adapter-runtime-bindings-4cmsRvRh.js +0 -2
- package/dist/assets/animation-mixers.service-DK64IuYq.js +0 -1
- package/dist/assets/animation-timeline.utility-D-g0zrOl.js +0 -1
- package/dist/assets/asset-editor-persistence-BGWIqZdk.js +0 -1
- package/dist/assets/asset-loaders-C0KQI5eY.js +0 -2
- package/dist/assets/audio.utility-BmE9WMUg.js +0 -1
- package/dist/assets/autoplay.service-CjPnv3QW.js +0 -1
- package/dist/assets/binding-resolver-dE0GnZT5.js +0 -2
- package/dist/assets/blender-emscripten-engine-BeWFjMn-.js +0 -2
- package/dist/assets/blender-version.status-OsFoc9SA.js +0 -1
- package/dist/assets/blender-wali-engine-da698rDf.js +0 -2
- package/dist/assets/blender.keymap-_rF_vRX8.js +0 -1
- package/dist/assets/blender.status-ujwGU6dU.js +0 -1
- package/dist/assets/board-guides-BEKPgD9M.js +0 -1
- package/dist/assets/body-marks-RKb_LTwL.js +0 -1
- package/dist/assets/bridge.command-BF00Iefm.js +0 -3
- package/dist/assets/build-profiles.document-CqNrDdh9.js +0 -2
- package/dist/assets/build-progress.status-Bo1ZgJcb.js +0 -1
- package/dist/assets/build-session-GZcSAfPN.js +0 -9
- package/dist/assets/build.header-Bt1kwHWl.js +0 -1
- package/dist/assets/canvas-design-mount-BbLW_Nci.js +0 -6
- package/dist/assets/canvas-entry-runtime-UNYuSfG0.js +0 -2
- package/dist/assets/capability-coverage-DZ-onC5j.js +0 -7
- package/dist/assets/component-board.service-q_TM9BCw.js +0 -2
- package/dist/assets/component-contracts.service-CPbfXE1h.js +0 -1
- package/dist/assets/component-instance-root-B0C5oNEm.js +0 -1
- package/dist/assets/component-verbs.service-CnA11bJq.js +0 -1
- package/dist/assets/connection.status-Yvt0bX0r.js +0 -1
- package/dist/assets/constraints.inspector-4r8jWq5a.js +0 -1
- package/dist/assets/coverage.service-DcpEoBuf.js +0 -3
- package/dist/assets/create-runtime-DBfUy0SO.js +0 -3
- package/dist/assets/curve-DVd18iAX.js +0 -1
- package/dist/assets/data-check-core-CQEjuFyt.js +0 -1
- package/dist/assets/data-ref-CWnkj-HX.js +0 -1
- package/dist/assets/debug-bridge-D3_-EgRE.js +0 -1
- package/dist/assets/debug-registry-P0_YQGWd.js +0 -1
- package/dist/assets/design-time-layers-ChswRUJt.js +0 -1
- package/dist/assets/design-time-react-mount-C85KfXOd.js +0 -1
- package/dist/assets/edit-mode-authoring-DeCxPcHM.js +0 -1
- package/dist/assets/editor-api-BFTIRlWa.js +0 -1
- package/dist/assets/editor-presentation-activity-C7SNSmTd.js +0 -1
- package/dist/assets/entry-adjudication-Dc18TIqT.js +0 -1
- package/dist/assets/fork-menu-DpKqRhF5.js +0 -1
- package/dist/assets/game-audio-CaGKzia4.js +0 -1
- package/dist/assets/game-document.service-Chmt4065.js +0 -1
- package/dist/assets/game-eval.command-DRSvOJ_1.js +0 -2
- package/dist/assets/game-module-access-o3iXZpCA.js +0 -1
- package/dist/assets/game-network-Ct2FQYmu.js +0 -1
- package/dist/assets/gameplay-replay-BwdxV4oF.js +0 -1
- package/dist/assets/gameplay.command-Boqv1hnc.js +0 -1
- package/dist/assets/generation-DhwCUHPf.css +0 -1
- package/dist/assets/generation.service-o9aXlsx4.js +0 -1
- package/dist/assets/generations.status-BvzgHlyk.js +0 -1
- package/dist/assets/hierarchy-marks-BLPfSIym.js +0 -1
- package/dist/assets/hierarchy-marks-Cc_3lxw6.js +0 -1
- package/dist/assets/hosted-asset-materialization-BpbnhJac.js +0 -2
- package/dist/assets/index-0Lm0Nf1M.css +0 -1
- package/dist/assets/index-BHoAKyAC.js +0 -1
- package/dist/assets/index-BeK4RPgj.js +0 -1
- package/dist/assets/index-C1c3eOmm.js +0 -1
- package/dist/assets/index.module-Ycad3DJq.js +0 -1
- package/dist/assets/ingest-siblings-BtiEXLnh.js +0 -1
- package/dist/assets/ingest-source-persistence-Dmdo-UBp.js +0 -1
- package/dist/assets/ingest.service-vbCucMz7.js +0 -1
- package/dist/assets/inspection-CObLhnrs.js +0 -1
- package/dist/assets/instances.command-BwayrqNm.js +0 -1
- package/dist/assets/layered-pick-kiQf53t5.js +0 -1
- package/dist/assets/material-B_V78pTt.js +0 -1
- package/dist/assets/model-asset-sections-CFvvihfx.css +0 -1
- package/dist/assets/model-asset-sections.service-CqSclZGY.js +0 -1
- package/dist/assets/module-mode-BH2R93XP.js +0 -2
- package/dist/assets/mount-canvas-ingest-root-D1z9i5B3.js +0 -2
- package/dist/assets/mount-dom-ingest-root-BAmmNxlm.js +0 -2
- package/dist/assets/mount-ingest-root-DYR0TMIt.js +0 -2
- package/dist/assets/mount-manifest-DdkFYdVA.js +0 -1
- package/dist/assets/mount-readiness-Ds0HvvLH.js +0 -4
- package/dist/assets/mount-three-ingest-root-DVbACDUy.js +0 -1
- package/dist/assets/network-observer.service-Ce83TdsU.js +0 -1
- package/dist/assets/network.utility-DFDul2Xb.js +0 -1
- package/dist/assets/object-marks-DwvIEBOK.js +0 -1
- package/dist/assets/pixi-authoring-adapter-BChknIdC.js +0 -1
- package/dist/assets/pixi-live-write-target-BjDsBQbp.js +0 -1
- package/dist/assets/play-mode-DICV4cKP.js +0 -22
- package/dist/assets/play.command-NHyi5rzF.js +0 -2
- package/dist/assets/pose-guard-DILO6gGq.js +0 -1
- package/dist/assets/presentation-BeNFBfKg.js +0 -1
- package/dist/assets/profiler.utility-Do2Bw7MY.js +0 -1
- package/dist/assets/project-provenance-4ldz-EOG.js +0 -1
- package/dist/assets/r3f-design-session-B5GsZI5M.js +0 -2
- package/dist/assets/react-canvas-navigation-Cp3cOHJa.js +0 -1
- package/dist/assets/react-inspector.service-Bm0OnanU.js +0 -1
- package/dist/assets/react-story-board-GaXqr03H.js +0 -1
- package/dist/assets/react-world-authoring-adapter-DOjv2pYm.js +0 -1
- package/dist/assets/reflection-probe-capture.inspector-DqSW9p1v.js +0 -1
- package/dist/assets/registry-CaCdF63N.js +0 -1
- package/dist/assets/root-seam-contract-CxLZaRio.js +0 -1
- package/dist/assets/run-selection-DzEkGesJ.js +0 -2
- package/dist/assets/scene-capture-0a-bTjT8.js +0 -1
- package/dist/assets/scene-document.service-CeDwVA7t.js +0 -2
- package/dist/assets/seeded-random-BgCwIAAU.js +0 -1
- package/dist/assets/stage-overlay-set-BGE03mqb.js +0 -1
- package/dist/assets/stage-presence-markers-DIP7YMcO.js +0 -1
- package/dist/assets/stage-transform-tools-BQB7EY4l.js +0 -1
- package/dist/assets/standard-viewport-dressing-BCA51Tum.js +0 -24
- package/dist/assets/state-watch.utility-CFG1Tu1m.js +0 -1
- package/dist/assets/story-documents-BTo90DiA.js +0 -3
- package/dist/assets/story-three-preview-R1JvrggS.js +0 -2
- package/dist/assets/studio-environment-DRxxq_QX.js +0 -2
- package/dist/assets/team-playtest.service-hLfjgScx.js +0 -1
- package/dist/assets/three-authoring-adapter-htbnVej2.js +0 -1
- package/dist/assets/three-authoring.service-BIQAtVdX.js +0 -2
- package/dist/assets/three-integration.service-CS8Nvbd2.js +0 -1
- package/dist/assets/three-projection-core-CG01r5Ta.js +0 -1
- package/dist/assets/three-viewport-presentation-B0z_cECu.js +0 -141
- package/dist/assets/tools-B_NJsk05.js +0 -1
- package/dist/assets/transform-mode-request-DzD9aUNA.js +0 -1
- package/dist/assets/transport-strip-CUjNltnb.js +0 -1
- package/dist/assets/transport.header-Bb4FpQ8J.js +0 -1
- package/dist/assets/tuples-DfWSY2tr.js +0 -1
- package/dist/assets/ui-board-document-CCiiXjX9.js +0 -2
- package/dist/assets/user-data-dHvLdpwM.js +0 -1
- package/dist/assets/viewport-door-Bj_ZIP85.js +0 -1
- package/dist/assets/worker-CC9Ug5Ei.js +0 -2
- package/dist/assets/workspace-arrangement-BdAlBwvd.js +0 -1
- package/dist/assets/world-documents-DBybpBq8.js +0 -1
- package/dist/assets/world-root-stage-binding-ZVYIgr74.js +0 -1
- package/dist/vgai-shared-react.json +0 -10
- package/dist/vgai-shared-three.json +0 -3
- package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
- package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
- package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
- /package/dist/assets/{vgai-shared-fontawesome-CU65D4Ij.js → volter-shared-fontawesome-CU65D4Ij.js} +0 -0
- /package/dist/assets/{vgai-shared-jsx-dev-runtime-DFDKL7fx.js → volter-shared-jsx-dev-runtime-DFDKL7fx.js} +0 -0
- /package/dist/assets/{vgai-shared-jsx-runtime-DIqBpTut.js → volter-shared-jsx-runtime-DIqBpTut.js} +0 -0
- /package/dist/assets/{vgai-shared-react-BT7rMc2H.js → volter-shared-react-BT7rMc2H.js} +0 -0
- /package/dist/assets/{vgai-shared-react-dom-DFajMqMT.js → volter-shared-react-dom-DFajMqMT.js} +0 -0
- /package/dist/assets/{vgai-shared-react-dom-client-S0ozfl6_.js → volter-shared-react-dom-client-S0ozfl6_.js} +0 -0
- /package/dist/assets/{vgai-shared-three-DH4yxKwt.js → volter-shared-three-DH4yxKwt.js} +0 -0
- /package/template/{.vgai → .volter}/assets.json +0 -0
- /package/template/{.vgai → .volter}/provenance.json +0 -0
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* - Server picks behavior (idle/patrol/chase/flee) + target position.
|
|
19
19
|
* - Client handles smooth navmesh pathfinding.
|
|
20
20
|
*
|
|
21
|
-
* Also handles `
|
|
21
|
+
* Also handles `__volter:debugCommand` { name, args, requestId } — a
|
|
22
22
|
* `locus: 'server'` debug command's client leg (the "Multiplayer locus"
|
|
23
23
|
* note);
|
|
24
24
|
* see `DEBUG_COMMANDS`/`onCreate` below.
|
|
@@ -152,15 +152,15 @@ export class ArenaRoom extends Room {
|
|
|
152
152
|
// Off by default (FROZEN DECISION: env-var OR room-option) — the loopback harness/
|
|
153
153
|
// the loopback harness (`../loopback.ts`) opt in via the room option; a
|
|
154
154
|
// plain `npm run server` boot never accepts debug commands unless
|
|
155
|
-
//
|
|
155
|
+
// VOLTER_ALLOW_DEBUG_COMMANDS is set in its environment.
|
|
156
156
|
const debugCommandsAllowed =
|
|
157
|
-
options?.allowDebugCommands === true || Boolean(process.env['
|
|
157
|
+
options?.allowDebugCommands === true || Boolean(process.env['VOLTER_ALLOW_DEBUG_COMMANDS']);
|
|
158
158
|
|
|
159
159
|
this.onMessage(
|
|
160
|
-
'
|
|
160
|
+
'__volter:debugCommand',
|
|
161
161
|
(client, message: { name: string; args?: unknown[]; requestId: string }) => {
|
|
162
162
|
if (!debugCommandsAllowed) {
|
|
163
|
-
client.send('
|
|
163
|
+
client.send('__volter:debugCommandResult', {
|
|
164
164
|
requestId: message.requestId,
|
|
165
165
|
ok: false,
|
|
166
166
|
error: 'debug commands disabled',
|
|
@@ -169,7 +169,7 @@ export class ArenaRoom extends Room {
|
|
|
169
169
|
}
|
|
170
170
|
const handler = DEBUG_COMMANDS[message.name];
|
|
171
171
|
if (!handler) {
|
|
172
|
-
client.send('
|
|
172
|
+
client.send('__volter:debugCommandResult', {
|
|
173
173
|
requestId: message.requestId,
|
|
174
174
|
ok: false,
|
|
175
175
|
error: `debug: no server command registered under "${message.name}"`,
|
|
@@ -178,13 +178,13 @@ export class ArenaRoom extends Room {
|
|
|
178
178
|
}
|
|
179
179
|
try {
|
|
180
180
|
const result = handler(this, client, message.args ?? []);
|
|
181
|
-
client.send('
|
|
181
|
+
client.send('__volter:debugCommandResult', {
|
|
182
182
|
requestId: message.requestId,
|
|
183
183
|
ok: true,
|
|
184
184
|
result,
|
|
185
185
|
});
|
|
186
186
|
} catch (err) {
|
|
187
|
-
client.send('
|
|
187
|
+
client.send('__volter:debugCommandResult', {
|
|
188
188
|
requestId: message.requestId,
|
|
189
189
|
ok: false,
|
|
190
190
|
error: err instanceof Error ? err.message : String(err),
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Messages (client → server only):
|
|
9
9
|
* position { x, y, z } — client movement input
|
|
10
|
-
*
|
|
10
|
+
* __volter:debugCommand { name, args, requestId } — a `locus: 'server'`
|
|
11
11
|
* debug command's client leg (the "Multiplayer locus" note,
|
|
12
12
|
* build plan Task 4.2); see
|
|
13
13
|
* `DEBUG_COMMANDS`/`onCreate` below.
|
|
@@ -155,9 +155,9 @@ export class GameRoom extends Room {
|
|
|
155
155
|
// Off by default (FROZEN DECISION: env-var OR room-option) — the loopback harness/
|
|
156
156
|
// the loopback harness (`../loopback.ts`) opt in via the room option; a
|
|
157
157
|
// plain `npm run server` boot never accepts debug commands unless
|
|
158
|
-
//
|
|
158
|
+
// VOLTER_ALLOW_DEBUG_COMMANDS is set in its environment.
|
|
159
159
|
const debugCommandsAllowed =
|
|
160
|
-
options?.allowDebugCommands === true || Boolean(process.env['
|
|
160
|
+
options?.allowDebugCommands === true || Boolean(process.env['VOLTER_ALLOW_DEBUG_COMMANDS']);
|
|
161
161
|
|
|
162
162
|
// Handle client messages
|
|
163
163
|
this.onMessage('position', (client, position: { x: number; y: number; z: number }) => {
|
|
@@ -170,10 +170,10 @@ export class GameRoom extends Room {
|
|
|
170
170
|
});
|
|
171
171
|
|
|
172
172
|
this.onMessage(
|
|
173
|
-
'
|
|
173
|
+
'__volter:debugCommand',
|
|
174
174
|
(client, message: { name: string; args?: unknown[]; requestId: string }) => {
|
|
175
175
|
if (!debugCommandsAllowed) {
|
|
176
|
-
client.send('
|
|
176
|
+
client.send('__volter:debugCommandResult', {
|
|
177
177
|
requestId: message.requestId,
|
|
178
178
|
ok: false,
|
|
179
179
|
error: 'debug commands disabled',
|
|
@@ -182,7 +182,7 @@ export class GameRoom extends Room {
|
|
|
182
182
|
}
|
|
183
183
|
const handler = DEBUG_COMMANDS[message.name];
|
|
184
184
|
if (!handler) {
|
|
185
|
-
client.send('
|
|
185
|
+
client.send('__volter:debugCommandResult', {
|
|
186
186
|
requestId: message.requestId,
|
|
187
187
|
ok: false,
|
|
188
188
|
error: `debug: no server command registered under "${message.name}"`,
|
|
@@ -191,13 +191,13 @@ export class GameRoom extends Room {
|
|
|
191
191
|
}
|
|
192
192
|
try {
|
|
193
193
|
const result = handler(this, client, message.args ?? []);
|
|
194
|
-
client.send('
|
|
194
|
+
client.send('__volter:debugCommandResult', {
|
|
195
195
|
requestId: message.requestId,
|
|
196
196
|
ok: true,
|
|
197
197
|
result,
|
|
198
198
|
});
|
|
199
199
|
} catch (err) {
|
|
200
|
-
client.send('
|
|
200
|
+
client.send('__volter:debugCommandResult', {
|
|
201
201
|
requestId: message.requestId,
|
|
202
202
|
ok: false,
|
|
203
203
|
error: err instanceof Error ? err.message : String(err),
|
package/template/server/rooms.ts
CHANGED
|
@@ -10,6 +10,6 @@ import { ArenaRoom } from './rooms/arena-room.js';
|
|
|
10
10
|
import { GameRoom } from './rooms/game-room.js';
|
|
11
11
|
|
|
12
12
|
export const rooms = [
|
|
13
|
-
{ name: 'game_room', handler: GameRoom, matchBy: ['
|
|
14
|
-
{ name: 'arena_room', handler: ArenaRoom, matchBy: ['
|
|
13
|
+
{ name: 'game_room', handler: GameRoom, matchBy: ['volterPlaytest'] },
|
|
14
|
+
{ name: 'arena_room', handler: ArenaRoom, matchBy: ['volterPlaytest'] },
|
|
15
15
|
];
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* tick IS frame work. Everything else about the tester (its doors, its run
|
|
5
5
|
* state, its repertoire) is plain application code in
|
|
6
6
|
* `src/bot/tester-station.ts`, reached directly as a running module by the
|
|
7
|
-
* Tester contribution and `
|
|
7
|
+
* Tester contribution and `volter-game-editor eval`.
|
|
8
8
|
*
|
|
9
9
|
* The tester's hands run in the INPUT phase — before everything. Fiber sorts
|
|
10
10
|
* `useFrame` callbacks ascending, and this world's own behavior hooks sit at
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The resident QA tester (`src/bot/tester-station.ts`) plays this game from
|
|
5
5
|
* INSIDE the page, directed live from the REPL through `hireTester`. This module
|
|
6
|
-
* holds what it is doing so the game's Tester surface and `
|
|
6
|
+
* holds what it is doing so the game's Tester surface and `volter-game-editor eval`
|
|
7
7
|
* both watch one run, and it implements the operator controls the tester
|
|
8
8
|
* honors between steps. This module is plain application state and imports no
|
|
9
|
-
*
|
|
9
|
+
* volter API; its exports are the whole control surface.
|
|
10
10
|
*
|
|
11
11
|
* `getBotStatus()` reads `{active, seat, goal, step, phase, progress,
|
|
12
12
|
* waitingOn, note, seed, directive}`. `pauseBot()`, `resumeBot()`,
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* (`seatTester`) and gives it back (`releaseTester`); it never reasons about
|
|
24
24
|
* the rule itself.
|
|
25
25
|
*
|
|
26
|
-
* No
|
|
26
|
+
* No volter import anywhere: the tester's hands are the project's own input
|
|
27
27
|
* store (`src/input.ts`), typed through `tester-run.ts`'s narrow
|
|
28
28
|
* `TesterInputTarget`.
|
|
29
29
|
*/
|
|
@@ -87,7 +87,7 @@ project inherits may error, and these three THROW until they are rewritten
|
|
|
87
87
|
answers this game's development questions. A raw event listing does not
|
|
88
88
|
fulfill the contribution; never import live simulation state into Analytics.
|
|
89
89
|
|
|
90
|
-
All three stubs emit `
|
|
90
|
+
All three stubs emit `VOLTER_STUB_UNIMPLEMENTED`. That warning keeps the live
|
|
91
91
|
console red, and `npm run check-idioms` reports it as unfinished work. Remove
|
|
92
92
|
the sentinel only by replacing the stub with the game's real surface (or by
|
|
93
93
|
honestly deleting the optional Data surface), not by silencing the warning.
|
|
@@ -16,7 +16,7 @@ export const point = 'workspace.analytics';
|
|
|
16
16
|
export const title = 'Analytics';
|
|
17
17
|
|
|
18
18
|
const unfinished =
|
|
19
|
-
'
|
|
19
|
+
'VOLTER_STUB_UNIMPLEMENTED: src/contributions/analytics.analytics.tsx — replace this stub with game-specific analysis of recorded Gameplay Sessions; playback is provided by the editor.';
|
|
20
20
|
|
|
21
21
|
// biome-ignore lint/suspicious/noConsole: unopened starter obligations remain visible in the editor console
|
|
22
22
|
console.error(unfinished);
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* An OBLIGATION, not an implementation: the game's numbers and content
|
|
5
5
|
* tables (`src/data/` — plain typed TS literals) must be viewable, with
|
|
6
6
|
* their derived picture, by the humans collaborating on this game. How is
|
|
7
|
-
* yours. REWRITE THIS FILE WHOLE; the error below holds `
|
|
7
|
+
* yours. REWRITE THIS FILE WHOLE; the error below holds `volter-game-editor console`
|
|
8
8
|
* red until you do.
|
|
9
9
|
*
|
|
10
10
|
* The method: render the data modules as tables (a plain `<table>` until a
|
|
@@ -25,7 +25,7 @@ export const title = 'Data';
|
|
|
25
25
|
|
|
26
26
|
// Module-scope on purpose — the demand is visible from editor boot.
|
|
27
27
|
const unfinished =
|
|
28
|
-
"
|
|
28
|
+
"VOLTER_STUB_UNIMPLEMENTED: src/contributions/data.document.tsx — render this game's data (src/data/) with its derived columns, or delete this file if the game truly has no content tables (its header says how).";
|
|
29
29
|
|
|
30
30
|
// biome-ignore lint/suspicious/noConsole: unopened starter obligations remain visible in the editor console
|
|
31
31
|
console.error(unfinished);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* "Documents, not scenes"): every project module under the selection's
|
|
4
4
|
* `include` globs that exports a React component is a `page` document —
|
|
5
5
|
* what a website is made of, the way a game is made of scenes. Select it
|
|
6
|
-
* in `
|
|
6
|
+
* in `volter.adapter.ts`:
|
|
7
7
|
*
|
|
8
8
|
* documents: { find: [{ finder: 'pagesFromUiModules', include: ['src/ui/**\/*page.tsx'] }] }
|
|
9
9
|
*
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* difficult situations, and judge the mechanic under test. It says nothing
|
|
8
8
|
* about HOW. REWRITE THIS FILE WHOLE in the game's own vocabulary: rename it,
|
|
9
9
|
* split it into several faces, and structure it the way THIS game's studio
|
|
10
|
-
* would. The error below holds `
|
|
10
|
+
* would. The error below holds `volter-game-editor console` red until you do; delete it
|
|
11
11
|
* with the stub.
|
|
12
12
|
*
|
|
13
13
|
* Make the controller's current owner and the tester's repertoire legible.
|
|
@@ -54,7 +54,7 @@ export function match(
|
|
|
54
54
|
// Module-scope on purpose: fires the moment the editor loads this game's
|
|
55
55
|
// contributions, so the demand is visible before anyone opens the panel.
|
|
56
56
|
const unfinished =
|
|
57
|
-
"
|
|
57
|
+
"VOLTER_STUB_UNIMPLEMENTED: src/contributions/tester.inspector.tsx — imagine this game's tester helper surface and rewrite the file whole (its header says how).";
|
|
58
58
|
|
|
59
59
|
// biome-ignore lint/suspicious/noConsole: unopened starter obligations remain visible in the editor console
|
|
60
60
|
console.error(unfinished);
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* `*.utility.tsx`, `*.document.tsx`), in the game's own vocabulary, added
|
|
10
10
|
* when there is something to show. A contribution is ordinary React
|
|
11
11
|
* reading the game's own exported modules through this hook; agents reach
|
|
12
|
-
* the same modules through `
|
|
12
|
+
* the same modules through `volter-game-editor eval`'s
|
|
13
13
|
* `game.run(async ({ modules }) => await modules('src/sim/host.ts'))` — `modules` is an
|
|
14
14
|
* ASYNC RESOLVER taking a served path, never a table: the `await` is not
|
|
15
15
|
* optional, and reading a member off the unawaited promise throws a message
|
package/template/src/input.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* held. Mechanics read it directly ({@link actionPressed}); the QA tester
|
|
4
4
|
* actuates it ({@link setVirtualAction}); the session input door
|
|
5
5
|
* reaches the SAME store by importing this running module through
|
|
6
|
-
* `game.run(({ modules }) => ...)`. No
|
|
6
|
+
* `game.run(({ modules }) => ...)`. No volter import anywhere — input is
|
|
7
7
|
* application state, and the host merely gives the developer access to the
|
|
8
8
|
* module instance the game already uses.
|
|
9
9
|
*
|
|
@@ -33,7 +33,7 @@ function requireAction(action: string): GameAction {
|
|
|
33
33
|
if (!isGameAction(action)) {
|
|
34
34
|
throw new Error(
|
|
35
35
|
`Unknown input action "${action}" — this game declares ${
|
|
36
|
-
gameActions.length === 0 ? 'none yet (add yours in src/input.ts)' : gameActions.join(', ')
|
|
36
|
+
(gameActions as readonly string[]).length === 0 ? 'none yet (add yours in src/input.ts)' : gameActions.join(', ')
|
|
37
37
|
}.`,
|
|
38
38
|
);
|
|
39
39
|
}
|
|
@@ -81,13 +81,13 @@ function cubeUvSamplingFunctions(): string {
|
|
|
81
81
|
.replace(
|
|
82
82
|
/\b(textureCubeUV|bilinearCubeUV)\(([^)]*)\)/g,
|
|
83
83
|
(_match, name: string, args: string) =>
|
|
84
|
-
`${name === 'textureCubeUV' ? '
|
|
84
|
+
`${name === 'textureCubeUV' ? 'volterTextureCubeUV' : 'volterBilinearCubeUV'}(${args.trim()}, ${args.includes('sampler2D') ? 'vec3 ' : ''}volterAtlasSize)`,
|
|
85
85
|
)
|
|
86
|
-
.replace(/\b(getFace|getUV|roughnessToMip)\b/g, '
|
|
87
|
-
.replace(/\bcubeUV_(\w+)\b/g, '
|
|
88
|
-
.replaceAll('CUBEUV_MAX_MIP', '
|
|
89
|
-
.replaceAll('CUBEUV_TEXEL_WIDTH', '
|
|
90
|
-
.replaceAll('CUBEUV_TEXEL_HEIGHT', '
|
|
86
|
+
.replace(/\b(getFace|getUV|roughnessToMip)\b/g, 'volter$1')
|
|
87
|
+
.replace(/\bcubeUV_(\w+)\b/g, 'volterCubeUV_$1')
|
|
88
|
+
.replaceAll('CUBEUV_MAX_MIP', 'volterAtlasSize.z')
|
|
89
|
+
.replaceAll('CUBEUV_TEXEL_WIDTH', 'volterAtlasSize.x')
|
|
90
|
+
.replaceAll('CUBEUV_TEXEL_HEIGHT', 'volterAtlasSize.y');
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
/**
|
|
@@ -104,21 +104,21 @@ function atlasSizeOf(texture: Texture | null): Vector3 {
|
|
|
104
104
|
|
|
105
105
|
function probeWeight(index: number): string {
|
|
106
106
|
return `
|
|
107
|
-
vec3 lp = (
|
|
107
|
+
vec3 lp = (volterProbeWorldToLocal[${index}] * vec4(${IBL_WORLD_POSITION}, 1.0)).xyz;
|
|
108
108
|
float weight = 0.0;
|
|
109
|
-
if (
|
|
110
|
-
vec3 edge =
|
|
109
|
+
if (volterProbeShape[${index}] < 0.5) {
|
|
110
|
+
vec3 edge = volterProbeExtents[${index}] - abs(lp);
|
|
111
111
|
if (all(greaterThanEqual(edge, vec3(0.0)))) {
|
|
112
112
|
float nearest = min(edge.x, min(edge.y, edge.z));
|
|
113
|
-
weight =
|
|
114
|
-
? clamp(nearest /
|
|
113
|
+
weight = volterProbeBlendDistance[${index}] > 0.0001
|
|
114
|
+
? clamp(nearest / volterProbeBlendDistance[${index}], 0.0, 1.0)
|
|
115
115
|
: 1.0;
|
|
116
116
|
}
|
|
117
117
|
} else {
|
|
118
|
-
float edge =
|
|
118
|
+
float edge = volterProbeRadius[${index}] - length(lp);
|
|
119
119
|
if (edge >= 0.0) {
|
|
120
|
-
weight =
|
|
121
|
-
? clamp(edge /
|
|
120
|
+
weight = volterProbeBlendDistance[${index}] > 0.0001
|
|
121
|
+
? clamp(edge / volterProbeBlendDistance[${index}], 0.0, 1.0)
|
|
122
122
|
: 1.0;
|
|
123
123
|
}
|
|
124
124
|
}`;
|
|
@@ -126,29 +126,29 @@ function probeWeight(index: number): string {
|
|
|
126
126
|
|
|
127
127
|
function probeWeightBlock(index: number): string {
|
|
128
128
|
return `
|
|
129
|
-
if (
|
|
130
|
-
if (weight > 0.0) bestPriority = max(bestPriority,
|
|
129
|
+
if (volterProbeReady[${index}] > 0.5) {${probeWeight(index)}
|
|
130
|
+
if (weight > 0.0) bestPriority = max(bestPriority, volterProbePriority[${index}]);
|
|
131
131
|
}`;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
function probeSampleBlock(index: number, roughness: string, direction: string): string {
|
|
135
135
|
return `
|
|
136
|
-
if (
|
|
136
|
+
if (volterProbeReady[${index}] > 0.5 && abs(volterProbePriority[${index}] - bestPriority) < 0.001) {${probeWeight(index)}
|
|
137
137
|
if (weight > 0.0) {
|
|
138
|
-
vec3 probeDirection = (
|
|
139
|
-
if (
|
|
140
|
-
vec3 boxPos = lp -
|
|
138
|
+
vec3 probeDirection = (volterProbeWorldToLocal[${index}] * vec4(${direction}, 0.0)).xyz;
|
|
139
|
+
if (volterProbeParallax[${index}] > 0.5) {
|
|
140
|
+
vec3 boxPos = lp - volterProbeParallaxOffset[${index}];
|
|
141
141
|
vec3 safeDirection = sign(probeDirection) * max(abs(probeDirection), vec3(0.00001));
|
|
142
|
-
vec3 rayMax = (
|
|
143
|
-
vec3 rayMin = (-
|
|
142
|
+
vec3 rayMax = (volterProbeParallaxExtents[${index}] - boxPos) / safeDirection;
|
|
143
|
+
vec3 rayMin = (-volterProbeParallaxExtents[${index}] - boxPos) / safeDirection;
|
|
144
144
|
vec3 rayDistance = mix(rayMin, rayMax, greaterThan(safeDirection, vec3(0.0)));
|
|
145
145
|
float nearestFace = min(rayDistance.x, min(rayDistance.y, rayDistance.z));
|
|
146
146
|
probeDirection = boxPos + safeDirection * nearestFace
|
|
147
|
-
+
|
|
147
|
+
+ volterProbeParallaxOffset[${index}] - volterProbeCaptureOffset[${index}];
|
|
148
148
|
}
|
|
149
|
-
accumulated +=
|
|
150
|
-
|
|
151
|
-
).rgb *
|
|
149
|
+
accumulated += volterTextureCubeUV(
|
|
150
|
+
volterProbeMap${index}, probeDirection, ${roughness}, volterProbeAtlasSize[${index}]
|
|
151
|
+
).rgb * volterProbeIntensity[${index}] * weight;
|
|
152
152
|
totalWeight += weight;
|
|
153
153
|
}
|
|
154
154
|
}`;
|
|
@@ -157,7 +157,7 @@ function probeSampleBlock(index: number, roughness: string, direction: string):
|
|
|
157
157
|
function volumeReflectionShader(probeCount: number): string {
|
|
158
158
|
const samplers = Array.from(
|
|
159
159
|
{ length: probeCount },
|
|
160
|
-
(_, index) => `uniform sampler2D
|
|
160
|
+
(_, index) => `uniform sampler2D volterProbeMap${index};`,
|
|
161
161
|
).join('\n');
|
|
162
162
|
const weights = Array.from({ length: probeCount }, (_, index) => probeWeightBlock(index)).join(
|
|
163
163
|
'\n',
|
|
@@ -171,25 +171,25 @@ function volumeReflectionShader(probeCount: number): string {
|
|
|
171
171
|
return `${baseIblFunctions()}
|
|
172
172
|
${cubeUvSamplingFunctions()}
|
|
173
173
|
#ifdef USE_ENVMAP
|
|
174
|
-
uniform float
|
|
175
|
-
uniform mat4
|
|
176
|
-
uniform vec3
|
|
177
|
-
uniform vec3
|
|
178
|
-
uniform vec3
|
|
179
|
-
uniform vec3
|
|
180
|
-
uniform vec3
|
|
181
|
-
uniform float
|
|
182
|
-
uniform float
|
|
183
|
-
uniform float
|
|
184
|
-
uniform float
|
|
185
|
-
uniform float
|
|
186
|
-
uniform float
|
|
187
|
-
uniform float
|
|
174
|
+
uniform float volterProbeReady[${probeCount}];
|
|
175
|
+
uniform mat4 volterProbeWorldToLocal[${probeCount}];
|
|
176
|
+
uniform vec3 volterProbeExtents[${probeCount}];
|
|
177
|
+
uniform vec3 volterProbeParallaxExtents[${probeCount}];
|
|
178
|
+
uniform vec3 volterProbeParallaxOffset[${probeCount}];
|
|
179
|
+
uniform vec3 volterProbeCaptureOffset[${probeCount}];
|
|
180
|
+
uniform vec3 volterProbeAtlasSize[${probeCount}];
|
|
181
|
+
uniform float volterProbeShape[${probeCount}];
|
|
182
|
+
uniform float volterProbeRadius[${probeCount}];
|
|
183
|
+
uniform float volterProbeBlendDistance[${probeCount}];
|
|
184
|
+
uniform float volterProbePriority[${probeCount}];
|
|
185
|
+
uniform float volterProbeIntensity[${probeCount}];
|
|
186
|
+
uniform float volterProbeParallax[${probeCount}];
|
|
187
|
+
uniform float volterBaseEnvironment;
|
|
188
188
|
${samplers}
|
|
189
189
|
|
|
190
190
|
vec3 getIBLIrradiance(const in vec3 normal) {
|
|
191
191
|
#ifdef ENVMAP_TYPE_CUBE_UV
|
|
192
|
-
vec3 baseIrradiance = getBaseIBLIrradiance(normal) *
|
|
192
|
+
vec3 baseIrradiance = getBaseIBLIrradiance(normal) * volterBaseEnvironment;
|
|
193
193
|
vec3 worldNormal = inverseTransformDirection(normal, viewMatrix);
|
|
194
194
|
float bestPriority = -1000000.0;
|
|
195
195
|
${weights}
|
|
@@ -206,7 +206,7 @@ ${irradiance}
|
|
|
206
206
|
|
|
207
207
|
vec3 getIBLRadiance(const in vec3 viewDir, const in vec3 normal, const in float roughness) {
|
|
208
208
|
#ifdef ENVMAP_TYPE_CUBE_UV
|
|
209
|
-
vec3 baseRadiance = getBaseIBLRadiance(viewDir, normal, roughness) *
|
|
209
|
+
vec3 baseRadiance = getBaseIBLRadiance(viewDir, normal, roughness) * volterBaseEnvironment;
|
|
210
210
|
vec3 reflected = reflect(-viewDir, normal);
|
|
211
211
|
reflected = normalize(mix(reflected, normal, roughness * roughness));
|
|
212
212
|
vec3 worldReflect = inverseTransformDirection(reflected, viewMatrix);
|
|
@@ -236,60 +236,60 @@ function writeProbeUniforms(
|
|
|
236
236
|
shader.uniforms[name] = { value };
|
|
237
237
|
};
|
|
238
238
|
values(
|
|
239
|
-
'
|
|
239
|
+
'volterProbeReady',
|
|
240
240
|
probes.map((probe) => Number(probe.ready && !capturing)),
|
|
241
241
|
);
|
|
242
242
|
values(
|
|
243
|
-
'
|
|
243
|
+
'volterProbeWorldToLocal',
|
|
244
244
|
probes.map((probe) => probe.worldToLocal),
|
|
245
245
|
);
|
|
246
246
|
values(
|
|
247
|
-
'
|
|
247
|
+
'volterProbeExtents',
|
|
248
248
|
probes.map((probe) => probe.extents),
|
|
249
249
|
);
|
|
250
250
|
values(
|
|
251
|
-
'
|
|
251
|
+
'volterProbeParallaxExtents',
|
|
252
252
|
probes.map((probe) => probe.parallaxExtents),
|
|
253
253
|
);
|
|
254
254
|
values(
|
|
255
|
-
'
|
|
255
|
+
'volterProbeParallaxOffset',
|
|
256
256
|
probes.map((probe) => probe.parallaxOffset),
|
|
257
257
|
);
|
|
258
258
|
values(
|
|
259
|
-
'
|
|
259
|
+
'volterProbeCaptureOffset',
|
|
260
260
|
probes.map((probe) => probe.captureOffset),
|
|
261
261
|
);
|
|
262
262
|
values(
|
|
263
|
-
'
|
|
263
|
+
'volterProbeAtlasSize',
|
|
264
264
|
probes.map((probe) => atlasSizeOf(probe.texture)),
|
|
265
265
|
);
|
|
266
266
|
values(
|
|
267
|
-
'
|
|
267
|
+
'volterProbeShape',
|
|
268
268
|
probes.map((probe) => Number(probe.mark.config.shape === 'sphere')),
|
|
269
269
|
);
|
|
270
270
|
values(
|
|
271
|
-
'
|
|
271
|
+
'volterProbeRadius',
|
|
272
272
|
probes.map((probe) => Math.max(0.01, probe.mark.config.radius)),
|
|
273
273
|
);
|
|
274
274
|
values(
|
|
275
|
-
'
|
|
275
|
+
'volterProbeBlendDistance',
|
|
276
276
|
probes.map((probe) => Math.max(0, probe.mark.config.blendDistance)),
|
|
277
277
|
);
|
|
278
278
|
values(
|
|
279
|
-
'
|
|
279
|
+
'volterProbePriority',
|
|
280
280
|
probes.map((probe) => probe.mark.config.priority),
|
|
281
281
|
);
|
|
282
282
|
values(
|
|
283
|
-
'
|
|
283
|
+
'volterProbeIntensity',
|
|
284
284
|
probes.map((probe) => Math.max(0, probe.mark.config.intensity)),
|
|
285
285
|
);
|
|
286
286
|
values(
|
|
287
|
-
'
|
|
287
|
+
'volterProbeParallax',
|
|
288
288
|
probes.map((probe) => Number(probe.mark.config.parallaxProjection)),
|
|
289
289
|
);
|
|
290
|
-
values('
|
|
290
|
+
values('volterBaseEnvironment', baseEnvironment ? 1 : 0);
|
|
291
291
|
probes.forEach((probe, index) => {
|
|
292
|
-
values(`
|
|
292
|
+
values(`volterProbeMap${index}`, probe.texture);
|
|
293
293
|
});
|
|
294
294
|
}
|
|
295
295
|
|
|
@@ -377,7 +377,7 @@ function ownVolumeReflectionMaterial<T extends MeshStandardMaterial>(
|
|
|
377
377
|
installedCount = count;
|
|
378
378
|
override = overrideMaterialIbl(material, {
|
|
379
379
|
fragment: () => volumeReflectionShader(count),
|
|
380
|
-
cacheKey: () => `
|
|
380
|
+
cacheKey: () => `volter-volume-reflections:${count}`,
|
|
381
381
|
onCompile: (shader) =>
|
|
382
382
|
writeProbeUniforms(shader, eligible, hasBaseEnvironment(), isCapturing),
|
|
383
383
|
});
|
|
@@ -64,7 +64,7 @@ export function Frozen({ name = 'Frozen', children, ...props }: FrozenProps) {
|
|
|
64
64
|
const batch = freezeSubtree(root, name);
|
|
65
65
|
// Degrade LOUDLY — a wrapper that silently declined most of its subtree
|
|
66
66
|
// looks identical to one that worked. Under the dev gate, though: this is
|
|
67
|
-
// an authoring signal (`
|
|
67
|
+
// an authoring signal (`volter-game-editor status` reports console warnings, which is
|
|
68
68
|
// where the building agent already looks), and a player's console is not
|
|
69
69
|
// where it belongs.
|
|
70
70
|
if (import.meta.env.DEV) {
|
|
@@ -82,7 +82,7 @@ export interface FrozenMutationWatch {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
function warnOnConsole(message: string): void {
|
|
85
|
-
// biome-ignore lint/suspicious/noConsole: console is this tripwire's
|
|
85
|
+
// biome-ignore lint/suspicious/noConsole: console is this tripwire's volter-status channel.
|
|
86
86
|
console.warn(message);
|
|
87
87
|
}
|
|
88
88
|
|
package/template/src/main.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Standalone entry point: this game's own boot, in its own libraries.
|
|
3
3
|
*
|
|
4
|
-
* Every root `
|
|
4
|
+
* Every root `volter.project.json` declares gets one layer in `#game-canvas`,
|
|
5
5
|
* stacked by `zOrder`. A `three` root's entry default-exports a React Three
|
|
6
6
|
* Fiber component and renders inside `<Canvas>`; a `dom` root's entry
|
|
7
7
|
* default-exports a React component and renders with react-dom, in a layer
|
|
8
8
|
* that lets pointer events fall through to the world except where its own
|
|
9
|
-
* elements claim them (`pointer-events: auto`)
|
|
10
|
-
*
|
|
9
|
+
* elements claim them (`pointer-events: auto`): a game's UI is that `dom` root.
|
|
10
|
+
* A `canvas` root (2D game rendering) mounts through `src/canvas-mount.ts`, which
|
|
11
|
+
* only a project with a canvas root carries, so a game without one imports no Pixi.
|
|
12
|
+
* The editor mounts the same entries itself; nothing here runs inside it.
|
|
11
13
|
*
|
|
12
14
|
* `manifestEntryModules` is generated from the manifest's `entry` paths
|
|
13
15
|
* (`manifest-entry-modules-plugin.ts`), so the manifest stays the one list of
|
|
@@ -17,8 +19,8 @@
|
|
|
17
19
|
import { Canvas } from '@react-three/fiber';
|
|
18
20
|
import { type ComponentType, createElement } from 'react';
|
|
19
21
|
import { createRoot } from 'react-dom/client';
|
|
20
|
-
import { manifestEntryModules } from 'virtual:
|
|
21
|
-
import manifest from '../
|
|
22
|
+
import { manifestEntryModules, mountCanvasRoot } from 'virtual:volter-manifest-entries';
|
|
23
|
+
import manifest from '../volter.project.json';
|
|
22
24
|
|
|
23
25
|
interface DeclaredRoot {
|
|
24
26
|
readonly id: string;
|
|
@@ -43,17 +45,67 @@ const container = document.getElementById('game-canvas') as HTMLElement;
|
|
|
43
45
|
const roots = [...(manifest.roots as readonly DeclaredRoot[])].sort(
|
|
44
46
|
(a, b) => (a.zOrder ?? 0) - (b.zOrder ?? 0),
|
|
45
47
|
);
|
|
48
|
+
// The bottom world (the lowest `three` or `canvas` root) takes pointer input and clears opaque;
|
|
49
|
+
// a world stacked above it lets input fall through and clears transparent, as the editor stacks them.
|
|
50
|
+
const bottomWorld = roots.find((root) => root.adapter === 'three' || root.adapter === 'canvas');
|
|
51
|
+
|
|
52
|
+
// A `canvas` world above the bottom one claims the points where Pixi finds an interactive object (a
|
|
53
|
+
// sprite the player taps), as the editor's input router does: the press goes to that world alone, and every
|
|
54
|
+
// other point falls through to the world beneath. Topmost first.
|
|
55
|
+
const claims: { readonly zOrder: number; readonly canvas: HTMLCanvasElement; readonly hit: (x: number, y: number) => boolean }[] = [];
|
|
56
|
+
const forwarded = new WeakSet<Event>();
|
|
57
|
+
for (const type of ['pointerdown', 'pointerup', 'pointermove', 'click', 'wheel'] as const) {
|
|
58
|
+
container.addEventListener(
|
|
59
|
+
type,
|
|
60
|
+
(event) => {
|
|
61
|
+
if (forwarded.has(event) || claims.length === 0) return;
|
|
62
|
+
const box = container.getBoundingClientRect();
|
|
63
|
+
const { clientX, clientY } = event as MouseEvent;
|
|
64
|
+
const claim = claims.find((entry) => entry.hit(clientX - box.left, clientY - box.top));
|
|
65
|
+
if (!claim) return;
|
|
66
|
+
event.stopPropagation();
|
|
67
|
+
// A copy that bubbles: Pixi hears pointermove on the document and pointerup on the window.
|
|
68
|
+
const copy = new (event.constructor as typeof PointerEvent)(event.type, event as PointerEventInit);
|
|
69
|
+
forwarded.add(copy);
|
|
70
|
+
claim.canvas.dispatchEvent(copy);
|
|
71
|
+
},
|
|
72
|
+
true,
|
|
73
|
+
);
|
|
74
|
+
}
|
|
46
75
|
for (const root of roots) {
|
|
47
76
|
const layer = document.createElement('div');
|
|
48
77
|
layer.style.cssText = 'position:absolute;inset:0;width:100%;height:100%';
|
|
49
78
|
layer.style.zIndex = String(root.zOrder ?? 0);
|
|
79
|
+
if (root.adapter !== 'dom' && root !== bottomWorld) layer.style.pointerEvents = 'none';
|
|
50
80
|
container.appendChild(layer);
|
|
51
81
|
const Entry = entryComponent(root);
|
|
52
82
|
if (root.adapter === 'three') {
|
|
53
|
-
|
|
83
|
+
// R3F's wrapper sets its own `pointer-events: auto`, so a world above the bottom one says `none`
|
|
84
|
+
// itself; `alpha` clears the bottom world opaque, as the editor's renderer does.
|
|
85
|
+
const bottom = root === bottomWorld;
|
|
86
|
+
createRoot(layer).render(
|
|
87
|
+
createElement(
|
|
88
|
+
Canvas,
|
|
89
|
+
{ gl: { alpha: !bottom }, style: bottom ? undefined : { pointerEvents: 'none' } },
|
|
90
|
+
createElement(Entry),
|
|
91
|
+
),
|
|
92
|
+
);
|
|
54
93
|
} else if (root.adapter === 'dom') {
|
|
55
94
|
layer.style.pointerEvents = 'none';
|
|
56
95
|
createRoot(layer).render(createElement(Entry));
|
|
96
|
+
} else if (root.adapter === 'canvas') {
|
|
97
|
+
if (!mountCanvasRoot) {
|
|
98
|
+
throw new Error(`main.ts: root "${root.id}" is a canvas root, and this project carries no src/canvas-mount.ts.`);
|
|
99
|
+
}
|
|
100
|
+
if (root === bottomWorld) mountCanvasRoot(layer, Entry, { bottom: true, onHitTest: () => {} });
|
|
101
|
+
else
|
|
102
|
+
mountCanvasRoot(layer, Entry, {
|
|
103
|
+
bottom: false,
|
|
104
|
+
onHitTest: (canvas, hit) => {
|
|
105
|
+
claims.push({ zOrder: root.zOrder ?? 0, canvas, hit });
|
|
106
|
+
claims.sort((a, b) => b.zOrder - a.zOrder);
|
|
107
|
+
},
|
|
108
|
+
});
|
|
57
109
|
} else {
|
|
58
110
|
throw new Error(
|
|
59
111
|
`main.ts: root "${root.id}" declares adapter ${JSON.stringify(root.adapter)}, which this boot does not mount.`,
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
-
declare module 'virtual:
|
|
1
|
+
declare module 'virtual:volter-manifest-entries' {
|
|
2
2
|
export const manifestEntryModules: Readonly<Record<string, unknown>>;
|
|
3
|
+
/** `src/canvas-mount.ts`'s mount when the manifest declares a `canvas` root, else `undefined`. */
|
|
4
|
+
export const mountCanvasRoot:
|
|
5
|
+
| ((
|
|
6
|
+
layer: HTMLElement,
|
|
7
|
+
Entry: import('react').ComponentType,
|
|
8
|
+
options: {
|
|
9
|
+
readonly bottom: boolean;
|
|
10
|
+
readonly onHitTest: (canvas: HTMLCanvasElement, hit: (x: number, y: number) => boolean) => void;
|
|
11
|
+
},
|
|
12
|
+
) => void)
|
|
13
|
+
| undefined;
|
|
3
14
|
}
|
package/template/src/world.tsx
CHANGED
|
@@ -74,7 +74,7 @@ function World() {
|
|
|
74
74
|
<GameKeyboard />
|
|
75
75
|
{/* The resident QA tester's hands on the frame — everything else about
|
|
76
76
|
the playtesting loop (the seat, the repertoire, pause/handoff) is
|
|
77
|
-
plain application code in src/bot/, reached from `
|
|
77
|
+
plain application code in src/bot/, reached from `volter-game-editor eval` via
|
|
78
78
|
`game.run(({ modules }) => …)` like every other module. */}
|
|
79
79
|
<QaTester />
|
|
80
80
|
<Scene name="Main Scene" />
|