@volter/game-editor 0.5.68 → 0.5.70
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 +10941 -5080
- package/LICENSE +9 -10
- 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 +5 -5
- package/catalog/project-source/LICENSE +6 -6
- 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/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 +4026 -4026
- package/dist/assets/{AssetBudgetPanel-P2PeL_X5.js → AssetBudgetPanel-DpXsaQ6w.js} +4 -4
- package/dist/assets/AudioViewer-BdTHfNhD.js +1 -0
- package/dist/assets/{CanvasBoardDocument-BFJdTVGp.js → CanvasBoardDocument-DY-7zohc.js} +1 -1
- package/dist/assets/CanvasSceneViewport-57CEFqSM.js +1 -0
- package/dist/assets/ColorInput-Co6tCY9p.js +1 -0
- package/dist/assets/{EntityModelDocument-Du8wIbyK.js → EntityModelDocument-C-lhKrxv.js} +1 -1
- package/dist/assets/{EnvironmentAssetDocument-_SttfMY_.js → EnvironmentAssetDocument-BNe6ANTN.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-CWudWnfd.js → GameplaySessionTimeline-CryFYfYN.js} +1 -1
- package/dist/assets/ImageViewer-DiD2yIG4.js +1 -0
- package/dist/assets/{InspectorCanvasPreview-CEr_Kxna.js → InspectorCanvasPreview-BrFjhoiD.js} +1 -1
- package/dist/assets/InspectorObjectPreview-BBVO8bDT.js +1 -0
- package/dist/assets/JsonAssetDocument-xyXetSbl.js +2 -0
- package/dist/assets/{LiveModuleDocument-BWjOzO_6.js → LiveModuleDocument-BiAunjHS.js} +1 -1
- package/dist/assets/{LutAssetDocument-DIc6nsht.js → LutAssetDocument-5sW-5rb0.js} +1 -1
- package/dist/assets/{ModelAssetDocument-_CqTsX_A.js → ModelAssetDocument-Bdy7x47a.js} +1 -1
- package/dist/assets/{NonThreeAuthoringBootstrap-C-V23E1e.js → NonThreeAuthoringBootstrap-BP-1bVEr.js} +1 -1
- package/dist/assets/Object3DDocumentToolbar-CvnSLDPI.js +1 -0
- package/dist/assets/Object3DDocumentViewport-BE_OPc8T.js +2 -0
- package/dist/assets/{Object3DPreview-BPHEr3vI.js → Object3DPreview-D3w_dKrX.js} +1 -1
- package/dist/assets/OnlineAssetDetail-BnT8_p1W.js +1 -0
- package/dist/assets/PlayBar-C8Mn-EI0.js +1 -0
- package/dist/assets/{QuarksAssetDocument-4Dne3EHx.js → QuarksAssetDocument-DLMH5Csk.js} +1 -1
- package/dist/assets/ReactCanvasControls-rNz8syVB.js +1 -0
- package/dist/assets/RootSelectionOverlay-Cn2Rbr1N.js +1 -0
- package/dist/assets/{ShaderAssetDocument-W3ZjLCkt.js → ShaderAssetDocument-CsJCsNfA.js} +4 -4
- package/dist/assets/ShadowEditor-jB05hr1W.js +1 -0
- package/dist/assets/{SourceAssetViewer-BGUeDAEv.js → SourceAssetViewer-D0NgGrER.js} +1 -1
- package/dist/assets/StageHost-B3Yt4I7r.js +2 -0
- package/dist/assets/{StoryPreviewMount-Di8uMovM.js → StoryPreviewMount-CzzRn24c.js} +1 -1
- package/dist/assets/ThreeBoardDocument-BoHTN4Vl.js +2 -0
- package/dist/assets/{ThreeIsolationSceneContent-BAKurKW5.js → ThreeIsolationSceneContent-BM-0S6J5.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-CffvGJ1h.js → ToolObject3DPreview-BeM_kx_u.js} +1 -1
- package/dist/assets/Toolbar-BZyog9MR.js +1 -0
- package/dist/assets/{TransientHint-CgmkrmKF.js → TransientHint-RJEkOJoy.js} +1 -1
- package/dist/assets/VideoViewer-CxajgKrf.js +1 -0
- package/dist/assets/ViewportShadingMenu-S2lADFJg.js +1 -0
- package/dist/assets/active-ingest-CjZtqL7Q.js +3 -0
- package/dist/assets/{animation-clock-fLmY_3--.js → animation-clock-CWVW-mqY.js} +1 -1
- package/dist/assets/animation-mixers.service-CpoYw8cs.js +1 -0
- package/dist/assets/animation-timeline.utility-CEerojaB.js +1 -0
- package/dist/assets/{asset-budget-asset.menu-BDRDWrvx.js → asset-budget-asset.menu-Bk6scVWQ.js} +1 -1
- package/dist/assets/{asset-budget.action-tQmNGQHC.js → asset-budget.action-DtBDSfDj.js} +1 -1
- package/dist/assets/{asset-budget.document-BthgX37Z.js → asset-budget.document-R2zyoJ8E.js} +1 -1
- package/dist/assets/{asset-budget.menu-DfyWVH6p.js → asset-budget.menu-D6jza5Bc.js} +1 -1
- package/dist/assets/asset-editor-persistence-DrgwOZIW.js +1 -0
- package/dist/assets/asset-loaders-CUeYIjeH.js +2 -0
- package/dist/assets/{asset-preview-Cv7tfD98.js → asset-preview-CQfnI2cX.js} +1 -1
- package/dist/assets/{audio-unlock.service-BvHvZjzx.js → audio-unlock.service-W3UBKsw9.js} +1 -1
- package/dist/assets/audio.utility-qrXBdGXg.js +1 -0
- package/dist/assets/autoplay.service-DQD3Swo9.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-Cg5ALSpr.js → babylon-authoring-adapter-CS9LZNmz.js} +1 -1
- package/dist/assets/binding-resolver-B9VI52zt.js +2 -0
- package/dist/assets/blender-emscripten-engine-Cd6az4pU.js +2 -0
- package/dist/assets/{blender-node-editor.document-B92MO51u.js → blender-node-editor.document-BWLFvA2g.js} +1 -1
- package/dist/assets/{blender-properties-tab-CDVyDAbf.js → blender-properties-tab-BSmWG9d0.js} +1 -1
- package/dist/assets/{blender-runtime-host-CuniE0sy.js → blender-runtime-host-Cbkie7m4.js} +2 -2
- package/dist/assets/{blender-runtime-skin-B_tOz5j5.js → blender-runtime-skin-C_ATCb-z.js} +7 -7
- package/dist/assets/{blender-runtime.document-DxUwLiEW.js → blender-runtime.document-P9zdgwMt.js} +7 -7
- package/dist/assets/{blender-timeline.document-BdEEoQbK.js → blender-timeline.document-DRwySEJO.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-EMSUlRh4.js → blender-uv-editor.document-CmLoL2Vo.js} +1 -1
- package/dist/assets/blender-version.status-CP4Jqkry.js +1 -0
- package/dist/assets/blender-wali-engine-CZcS3eAd.js +2 -0
- package/dist/assets/{blender.command-BkBML2SY.js → blender.command-BYGm0Q_s.js} +1 -1
- package/dist/assets/blender.status-BMETIbb2.js +1 -0
- package/dist/assets/board-guides-BG-MHK2G.js +1 -0
- package/dist/assets/body-marks-C1LxJtQb.js +1 -0
- package/dist/assets/{bridge.command-VnplZ81v.js → bridge.command-DpUNErKN.js} +3 -3
- package/dist/assets/{browserAll-BCmkqg8n.js → browserAll-DES3i79H.js} +1 -1
- package/dist/assets/{build-player.document-DV7YcJQt.js → build-player.document-B42HrdSU.js} +1 -1
- package/dist/assets/build-profiles.document-Di5CQoH9.js +2 -0
- package/dist/assets/build-progress.status-B4te7-3j.js +1 -0
- package/dist/assets/{build-session-BGe0eGrQ.js → build-session-Yw4JoE8T.js} +2 -2
- package/dist/assets/{build.action-Bdj4ZEL_.js → build.action-B-DBpUj6.js} +1 -1
- package/dist/assets/{build.command-DAWiYvPa.js → build.command-CfWoHNp0.js} +1 -1
- package/dist/assets/build.header-BaURztYD.js +1 -0
- package/dist/assets/{build.menu-BiRNC_xc.js → build.menu-BFBn-dPJ.js} +1 -1
- package/dist/assets/{build.service-Dw9K6VSF.js → build.service-D8gYWB3n.js} +1 -1
- package/dist/assets/{camera-C-qXzXFf.js → camera-C-uR_xQp.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-BDrwWRlU.js → camera-runtime.inspector-BOGGEqVq.js} +1 -1
- package/dist/assets/{canvas-design-mount-DLn49Zle.js → canvas-design-mount-DamLAaWn.js} +4 -4
- package/dist/assets/canvas-entry-runtime-a6N7Rsrj.js +2 -0
- package/dist/assets/{canvas-preview-frames-B5xFRjhQ.js → canvas-preview-frames-XbrKuyJu.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-DQ_leYyi.js → canvas-story-capture.service-DYRdEzkG.js} +2 -2
- package/dist/assets/capability-coverage-7wKVA3PF.js +7 -0
- package/dist/assets/{collaboration-presence-BOS1t8wI.js → collaboration-presence-DaVKEfxs.js} +1 -1
- package/dist/assets/{collider-Bf4Uk6LW.js → collider-BEwlgkG5.js} +1 -1
- package/dist/assets/component-board.service-BWSBM2Bb.js +2 -0
- package/dist/assets/{component-board.service-DFSSCaCf.js → component-board.service-C9ZouakC.js} +2 -2
- package/dist/assets/{component-board.service-CpVXGhz5.js → component-board.service-D2eGKqHf.js} +2 -2
- package/dist/assets/component-contracts.service-D0uElctD.js +1 -0
- package/dist/assets/component-instance-root-C1Xf4SwR.js +1 -0
- package/dist/assets/{component-verbs.command-DGzZAV_Z.js → component-verbs.command-N-Tj8KOS.js} +1 -1
- package/dist/assets/{component-verbs.service-D1rVRogp.js → component-verbs.service-CWh4mQ7X.js} +1 -1
- package/dist/assets/{config-D-EAAhqP.js → config-hmmj-QHZ.js} +4 -4
- package/dist/assets/{configurations-_HZOWZPy.js → configurations-B9Pi_eRN.js} +1 -1
- package/dist/assets/connection.status-C2HPxoww.js +1 -0
- package/dist/assets/{constraint-5KLYpGm7.js → constraint-Bp1l8hY-.js} +1 -1
- package/dist/assets/constraints.inspector-D-h1f3K2.js +1 -0
- package/dist/assets/{content-bounds-DKBD7nsv.js → content-bounds-7UyI42Vj.js} +1 -1
- package/dist/assets/{contract-system-adapters-h6OUBRYA.js → contract-system-adapters-Bq1LGdjs.js} +1 -1
- package/dist/assets/coverage.service-BiBikIsV.js +3 -0
- package/dist/assets/{create-runtime-Bg2uYMfh.js → create-runtime-Cx-q5z2y.js} +2 -2
- package/dist/assets/curve-Co_mro-I.js +1 -0
- package/dist/assets/{data-asset-7Nfmx-28.js → data-asset-Ckx4D_U_.js} +1 -1
- package/dist/assets/data-check-core-CHqar_E8.js +1 -0
- package/dist/assets/data-ref-70PUrMuT.js +1 -0
- package/dist/assets/debug-bridge-CarsgKpm.js +1 -0
- package/dist/assets/debug-registry-DgYNlhH_.js +1 -0
- package/dist/assets/{deferred-ingest-play-Bej67_y9.js → deferred-ingest-play-Bpdhu2i-.js} +2 -2
- package/dist/assets/{design-time-canvas-mount-CFW9ZWuk.js → design-time-canvas-mount-Ca9Q75Ui.js} +2 -2
- package/dist/assets/design-time-layers-BIb71snu.js +1 -0
- package/dist/assets/{design-time-mount.service-DJeAPUB_.js → design-time-mount.service-DL6ZK2TQ.js} +2 -2
- package/dist/assets/{design-time-mount.service-_R1UDCw3.js → design-time-mount.service-zKUVjKAu.js} +2 -2
- package/dist/assets/design-time-react-mount-NrWimSxY.js +1 -0
- package/dist/assets/{document-preview-three-5cbuuJMH.js → document-preview-three-DoDs6q1q.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-CoESNvrM.js → dom-authoring-adapter-adLQog9l.js} +1 -1
- package/dist/assets/{draco3d-Sk9K4AUT.js → draco3d-aUvQF1Zx.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-CH6J-8N7.js → edit-mode-audio.service-CHZ1ultu.js} +1 -1
- package/dist/assets/edit-mode-authoring-ZQuUwc6e.js +1 -0
- package/dist/assets/{edit-mode-networking.service-C4o2pGHX.js → edit-mode-networking.service-C7fk2fL1.js} +1 -1
- package/dist/assets/editor-api-C8MUOrwt.js +1 -0
- package/dist/assets/{editor-layers-B4oYfpj8.js → editor-layers-CGX7iCSP.js} +1 -1
- package/dist/assets/editor-presentation-activity-CqJH4G9t.js +1 -0
- package/dist/assets/{editor-shell-store-Bh1S7M54.js → editor-shell-store-BRqB1JZO.js} +1 -1
- package/dist/assets/{entity-object-B_5Gc0Ky.js → entity-object--ZpqIat7.js} +1 -1
- package/dist/assets/{extend-DcEyE5jI.js → extend-BZQIQ18F.js} +1 -1
- package/dist/assets/{fork-menu-CKjNh3MO.js → fork-menu-CziehkPx.js} +1 -1
- package/dist/assets/{frame-debugger-store-D5YViF_8.js → frame-debugger-store-BOQjrPsh.js} +1 -1
- package/dist/assets/game-audio-BeCyd0Ha.js +1 -0
- package/dist/assets/{game-contract-seams-C0AVYwvO.js → game-contract-seams-Dgqv6S8X.js} +1 -1
- package/dist/assets/{game-css-scope-transform-8GOvVu1s.js → game-css-scope-transform-anfk8vP_.js} +2 -2
- package/dist/assets/game-document.service-CqmgrRUA.js +1 -0
- package/dist/assets/game-eval.command-CoetFm6_.js +2 -0
- package/dist/assets/game-module-access-Cg1EB8Mx.js +1 -0
- package/dist/assets/game-network-BqI-Ehz0.js +22 -0
- package/dist/assets/{gameplay-export-K5AcStVC.js → gameplay-export-D0hZoeSg.js} +1 -1
- package/dist/assets/gameplay-replay-BHz6VAVa.js +1 -0
- package/dist/assets/{gameplay.command-DoWqBWhH.js → gameplay.command-CPc9GKuW.js} +1 -1
- package/dist/assets/generation-CdOATubd.css +1 -0
- package/dist/assets/{generation-jobs-CiabIfR0.js → generation-jobs-D-zXQNZI.js} +1 -1
- package/dist/assets/generation.service-Bwt9lQEG.js +1 -0
- package/dist/assets/{generations-DU9rCeQR.js → generations-d-U9lCVo.js} +1 -1
- package/dist/assets/generations.status-BQ8xhaLN.js +1 -0
- package/dist/assets/hierarchy-marks-CndAXtie.js +1 -0
- package/dist/assets/hierarchy-marks-CsTaTkc7.js +1 -0
- package/dist/assets/hosted-asset-materialization-r2vKfJGY.js +2 -0
- package/dist/assets/{ibl-override-material-CiKkaOTW.js → ibl-override-material-CMo_a49U.js} +1 -1
- package/dist/assets/index-BMxv2MNV.js +1 -0
- package/dist/assets/index-BPVnvJfX.js +1 -0
- package/dist/assets/{index-C4AUQbmq.js → index-BqzpzjSB.js} +1 -1
- package/dist/assets/{index-CC1puVjo.js → index-CMU7lnXk.js} +1 -1
- package/dist/assets/index-CPiRKiDC.css +1 -0
- package/dist/assets/{index-CaG87ZF-.js → index-Cr9NTnJp.js} +271 -270
- package/dist/assets/index-DSMLYme2.js +1 -0
- package/dist/assets/index-DoGlzvsX.js +1 -0
- package/dist/assets/{index-BsYc2Oyj.js → index-dlvCCB72.js} +1 -1
- package/dist/assets/{index-Kb9_s5aP.js → index-xjc_62Ha.js} +1 -1
- package/dist/assets/{index-C20Flc1s.js → index-z0_InXxO.js} +2 -2
- package/dist/assets/{inference-diagnostics-MGcIHEX6.js → inference-diagnostics-D5jfxI5p.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-D2okO6JI.js → ingest-boot-viewport-Be0v44yf.js} +1 -1
- package/dist/assets/ingest-siblings-BowXSozE.js +1 -0
- package/dist/assets/ingest-source-persistence-BGIvThcv.js +1 -0
- package/dist/assets/ingest.service-wVm-ZcTI.js +1 -0
- package/dist/assets/{inspect-C8RP8G5F.js → inspect-CN92MgRT.js} +1 -1
- package/dist/assets/inspection-D8fZOHCM.js +1 -0
- package/dist/assets/instances.command-B6gJuL1Z.js +1 -0
- package/dist/assets/{json-history-resource-CTXRV4GD.js → json-history-resource-C9G_vCX9.js} +1 -1
- package/dist/assets/{layered-pick-B_-BRrRD.js → layered-pick-D9tIz_m7.js} +1 -1
- package/dist/assets/{light-CskDQ8gF.js → light-BGbl1a8K.js} +1 -1
- package/dist/assets/{live-project-verbs-BOAQN3ME.js → live-project-verbs-p1sdTwhF.js} +1 -1
- package/dist/assets/{machine.document-BxOoCOo9.js → machine.document-C1acXU7l.js} +1 -1
- package/dist/assets/{machines.finder-CqEceWzS.js → machines.finder-sOxNTYPx.js} +1 -1
- package/dist/assets/material-D7289cYI.js +1 -0
- package/dist/assets/{material-factory-qB9pzcQf.js → material-factory-D0T-DH8c.js} +1 -1
- package/dist/assets/{mesh-5--4qA-C.js → mesh-1A-HHxD6.js} +1 -1
- package/dist/assets/model-asset-sections-D1uxOu2v.css +1 -0
- package/dist/assets/model-asset-sections.service-DF-mllTL.js +1 -0
- package/dist/assets/{model-inspection-MrJY0U_-.js → model-inspection-CuVwNVvv.js} +1 -1
- package/dist/assets/{model-thumbnail-uk-2sblh.js → model-thumbnail-xm1Fabi2.js} +1 -1
- package/dist/assets/{models.finder-rk8dhgO8.js → models.finder-DrvU1qGk.js} +1 -1
- package/dist/assets/module-mode-BHOAAbgO.js +2 -0
- package/dist/assets/mount-canvas-ingest-root-aVZkVNh4.js +2 -0
- package/dist/assets/mount-dom-ingest-root-eOOGPaxi.js +2 -0
- package/dist/assets/{mount-ingest-root-BC3-1Cw1.js → mount-ingest-root-BsWbEvr_.js} +2 -2
- package/dist/assets/{mount-manifest-QJOB11Kv.js → mount-manifest-t6ipNsoF.js} +1 -1
- package/dist/assets/mount-readiness-DyAd17pe.js +4 -0
- package/dist/assets/mount-three-ingest-root-DIR0wKrN.js +1 -0
- package/dist/assets/{mounted-authoring-B7RL_V28.js → mounted-authoring-DX3DC9PJ.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-CnYhX3vW.js → mounted-story-viewport-source-D8FqGpci.js} +1 -1
- package/dist/assets/{native-debug-module-B-rWJfWE.js → native-debug-module-CB738yQu.js} +1 -1
- package/dist/assets/{navigation-BVu-aVmF.js → navigation-B9ihB0qU.js} +1 -1
- package/dist/assets/{navmesh.menu-C3M63eR4.js → navmesh.menu-CPxr9LPT.js} +1 -1
- package/dist/assets/{navmesh.service-B0H1fUfn.js → navmesh.service-BAtili_Y.js} +1 -1
- package/dist/assets/network-observer.service-CqTuZNtI.js +1 -0
- package/dist/assets/network.utility-CclYEmfV.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-OjqzJ86S.js → object3d-document-session-registry-BWeuL0nf.js} +2 -2
- package/dist/assets/{oid-transform-Bzc2ZJSH.js → oid-transform-BYeAsBKI.js} +1 -1
- package/dist/assets/{particles-Be7AvO4c.js → particles-BXiQDiB-.js} +1 -1
- package/dist/assets/{performance-profiler-OwnXQX0M.js → performance-profiler-CMbwGBuk.js} +1 -1
- package/dist/assets/pixi-authoring-adapter-CPsN0Yk7.js +1 -0
- package/dist/assets/pixi-live-write-target-BUbt5ixX.js +1 -0
- package/dist/assets/{play.command-CIGRq8ow.js → play.command-Bz5Ra6Uj.js} +2 -2
- package/dist/assets/pose-guard-CLabLSzf.js +1 -0
- package/dist/assets/presentation-C7ZHYsKF.js +1 -0
- package/dist/assets/{product-BN31wSnB.js → product-MSpbAqgo.js} +1 -1
- package/dist/assets/{profiler.action-D57Kj9ym.js → profiler.action-1Jbc-7Q4.js} +1 -1
- package/dist/assets/{profiler.menu-Dh9Q5DDx.js → profiler.menu-C544DxWZ.js} +1 -1
- package/dist/assets/profiler.utility-QnzedS3X.js +1 -0
- package/dist/assets/{project-authoring-session-LCJAwGrD.js → project-authoring-session-BhNfg7TY.js} +2 -2
- package/dist/assets/project-provenance-BGnJXJwa.js +1 -0
- package/dist/assets/{properties-bone-constraints.inspector-CaIDq5nN.js → properties-bone-constraints.inspector-DRCPfugt.js} +1 -1
- package/dist/assets/{properties-bone.inspector-D2fcQGMF.js → properties-bone.inspector-CYHeZX0p.js} +1 -1
- package/dist/assets/{properties-collection.inspector-CF5AtTAd.js → properties-collection.inspector-DtGhPkiU.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-Bj2itDrS.js → properties-constraints.inspector-TIyIV777.js} +1 -1
- package/dist/assets/{properties-data.inspector-BfRqk0Xo.js → properties-data.inspector-vA0MTaup.js} +1 -1
- package/dist/assets/{properties-material.inspector-Bf8H0mvu.js → properties-material.inspector-C73spBQh.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-BKShc1TH.js → properties-modifiers.inspector-9oyLBBE0.js} +1 -1
- package/dist/assets/{properties-object.inspector-YBh8ABnN.js → properties-object.inspector-7BuiUgbd.js} +1 -1
- package/dist/assets/{properties-output.inspector-CVkzfs-l.js → properties-output.inspector-CjYAggz2.js} +1 -1
- package/dist/assets/{properties-particles.inspector-ChDpAq-2.js → properties-particles.inspector-DpSfjykX.js} +1 -1
- package/dist/assets/{properties-physics.inspector-BLEM7aMj.js → properties-physics.inspector-BUTvmfU9.js} +1 -1
- package/dist/assets/{properties-render.inspector-vU4D9xLL.js → properties-render.inspector-CEdsDqbI.js} +1 -1
- package/dist/assets/{properties-scene.inspector-C-DoN-kL.js → properties-scene.inspector-4kp0sLNw.js} +1 -1
- package/dist/assets/{properties-texture.inspector-DySxy1oU.js → properties-texture.inspector-Ckpqy9eo.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-DEKxMahJ.js → properties-view-layer.inspector-CQIFbY8-.js} +1 -1
- package/dist/assets/{properties-world.inspector-m5qL_TQV.js → properties-world.inspector-xZgNV6rI.js} +1 -1
- package/dist/assets/r3f-design-session-D8VF-hty.js +2 -0
- package/dist/assets/{r3f-physics-binding-Bgzzd4ol.js → r3f-physics-binding-oippu1v_.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-C8oMjdTL.js → r3f-source-authoring-adapter-CZJX6VLM.js} +1 -1
- package/dist/assets/react-canvas-navigation-DuzvnFoN.js +1 -0
- package/dist/assets/react-inspector.service-CV4p6nrb.js +1 -0
- package/dist/assets/react-story-board-mhldts6w.js +1 -0
- package/dist/assets/{react-three-rapier.esm-BR2ttgLS.js → react-three-rapier.esm-Bo9LjrZe.js} +1 -1
- package/dist/assets/react-world-authoring-adapter-CuyruDfq.js +1 -0
- package/dist/assets/{realm-services-DefTrXnY.js → realm-services-BtiLE3a-.js} +1 -1
- package/dist/assets/reflection-probe-capture.inspector-mrrOHs-9.js +1 -0
- package/dist/assets/{reflection-probe-BHNGwVyz.js → reflection-probe-sIto9mh0.js} +1 -1
- package/dist/assets/registry-DpUr2YIM.js +1 -0
- package/dist/assets/{relative-import-specifier-DQzkawgj.js → relative-import-specifier-CyT6yU4l.js} +1 -1
- package/dist/assets/{render-env-BZ7LsGfk.js → render-env-C63BGT5v.js} +1 -1
- package/dist/assets/{render-features-C7QwmhCo.js → render-features-CBl6rom9.js} +1 -1
- package/dist/assets/{render-settings-BBvkacR3.js → render-settings-DjarlnjI.js} +1 -1
- package/dist/assets/resolve-three-OiswFiIS.js +702 -0
- package/dist/assets/root-seam-contract-BYLQx4CQ.js +1 -0
- package/dist/assets/{run-selection-BUeubtHj.js → run-selection-BMu0v3qC.js} +1 -1
- package/dist/assets/scene-capture-BLf3lJ44.js +1 -0
- package/dist/assets/scene-document.service-CjPDph5k.js +2 -0
- package/dist/assets/{scene-framing-PVMqGU8h.js → scene-framing-BhNk0WhI.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-DmdE0u-C.js +1 -0
- package/dist/assets/{session-CTXsU1lK.js → session-CeyQA0Dv.js} +35 -35
- package/dist/assets/{setup-renderer-OOw1SykJ.js → setup-renderer-Bf8g2S0f.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-RmutT5Dt.js → source-object3d-authoring-adapter-IDRws2Nk.js} +1 -1
- package/dist/assets/{source-persistence-backend-HviqjKZ2.js → source-persistence-backend-Dzc6MsmN.js} +1 -1
- package/dist/assets/{spark-renderer-lifecycle-DfYpvEJa.js → spark-renderer-lifecycle-B6Axb6jm.js} +1 -1
- package/dist/assets/{stage-keyboard-DDi7S27C.js → stage-keyboard-CpnIYiph.js} +1 -1
- package/dist/assets/stage-overlay-set-BrJzOTCe.js +1 -0
- package/dist/assets/stage-presence-markers-BFTl9Djp.js +1 -0
- package/dist/assets/stage-transform-tools-QaenmSrC.js +1 -0
- package/dist/assets/standard-viewport-dressing-DuKH01r4.js +24 -0
- package/dist/assets/{state-watch.action-DEdb1mNa.js → state-watch.action-BaRZ6YII.js} +1 -1
- package/dist/assets/{state-watch.menu-jWbUM3kw.js → state-watch.menu-DR2AtQ6r.js} +1 -1
- package/dist/assets/state-watch.utility-VW8H9Fgi.js +1 -0
- package/dist/assets/{story-capture-Dj1xkeKH.js → story-capture-BEVV48wm.js} +1 -1
- package/dist/assets/story-documents-DndjqJ7Y.js +3 -0
- package/dist/assets/{story-documents.service-BzQCuNBu.js → story-documents.service-CPrZ7gRM.js} +1 -1
- package/dist/assets/{story-documents.service-iNP-ORNr.js → story-documents.service-wCVmBPhh.js} +1 -1
- package/dist/assets/{story-media-presence-zTPlU9HR.js → story-media-presence-BSX78yVJ.js} +1 -1
- package/dist/assets/{story-pixi-preview-B7THvSl7.js → story-pixi-preview-D4FuH7lJ.js} +1 -1
- package/dist/assets/{story-presentation-BLXYPadR.js → story-presentation-2AxtnKGb.js} +1 -1
- package/dist/assets/story-three-preview-DjObHSAF.js +2 -0
- package/dist/assets/{structural-ids-Br2zjINh.js → structural-ids-BOo2BRoY.js} +1 -1
- package/dist/assets/studio-environment-B--4k2mN.js +2 -0
- package/dist/assets/{surface-state-D9j6qNu8.js → surface-state-CQHVfsma.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-BTnsMOvH.js → syntactic-prop-specs-CewRyC4c.js} +1 -1
- package/dist/assets/team-playtest.service-B9m6CNk7.js +1 -0
- package/dist/assets/{three-oYrcK5SQ.js → three-B86IzdNg.js} +1 -1
- package/dist/assets/three-authoring-adapter-BD8_MtYK.js +1 -0
- package/dist/assets/three-authoring.service-BjJ9wetk.js +2 -0
- package/dist/assets/{three-ingest-runtime-CXKjNysA.js → three-ingest-runtime-CXySzulx.js} +1 -1
- package/dist/assets/{three-integration-CuAnYaTW.js → three-integration-nl5TC6EF.js} +2 -2
- package/dist/assets/three-integration.service-BEk5QkKM.js +1 -0
- package/dist/assets/three-projection-core-D4m8lsPU.js +1 -0
- package/dist/assets/{three-state-wXRU3rLr.js → three-state-C36FeFK4.js} +1 -1
- package/dist/assets/{three-story-capture.service-DMJRcqjr.js → three-story-capture.service-C0icETyL.js} +2 -2
- package/dist/assets/{three-story-model-DgiAP-oQ.js → three-story-model-CqWu9S2a.js} +1 -1
- package/dist/assets/three-viewport-presentation-CCMgGLI2.js +141 -0
- package/dist/assets/tools-BnE3UWVA.js +1 -0
- package/dist/assets/transform-mode-request-CIgYj1Qb.js +1 -0
- package/dist/assets/transport-strip-B1AJKpn-.js +1 -0
- package/dist/assets/transport.header-D-n6dQ5n.js +1 -0
- package/dist/assets/{trigger-volume-DP0G1VBe.js → trigger-volume-BLkHmfm9.js} +1 -1
- package/dist/assets/tuples-uyiMYXrv.js +1 -0
- package/dist/assets/ui-board-document-6e4w4a8B.js +2 -0
- package/dist/assets/{user-data-CqOoAowZ.js → user-data-BXFD1jg-.js} +1 -1
- package/dist/assets/user-data-CODoGZqA.js +1 -0
- package/dist/assets/{utility-view-state-Db97zwDz.js → utility-view-state-I_o0WThv.js} +1 -1
- package/dist/assets/viewport-door-AsLxGhLN.js +1 -0
- package/dist/assets/{viewport-root-presentation-B35t51xX.js → viewport-root-presentation-B1qtThOB.js} +1 -1
- package/dist/assets/{viewport-surface-status-D5kZtFW5.js → viewport-surface-status-CWmQeKTO.js} +1 -1
- package/dist/assets/{webworkerAll-CfKEb4Ao.js → webworkerAll-DC445ANd.js} +1 -1
- package/dist/assets/worker-jepHAPPr.js +2 -0
- package/dist/assets/workspace-arrangement-dkubzCff.js +1 -0
- package/dist/assets/world-documents-psBK5u_2.js +1 -0
- package/dist/assets/world-root-stage-binding-BrvO8VMz.js +1 -0
- package/dist/assets/{xstate-animation-binding-aQEmNSpm.js → xstate-animation-binding-ChVFHSlM.js} +1 -1
- package/dist/assets/{xstate-animation-meta-CnMX1Sc1.js → xstate-animation-meta-D7xnhyCE.js} +1 -1
- package/dist/volter-shared-react.json +10 -0
- package/dist/volter-shared-three.json +3 -0
- package/dist-node/cli.js +247 -209
- package/dist-node/create.js +90 -74
- package/package.json +20 -19
- 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 -18
- 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/.agents/skills/{vgai-3d-models → volter-3d-models}/SKILL.md +3 -3
- package/template/.agents/skills/{vgai-ingest-existing-game → volter-ingest-existing-game}/SKILL.md +3 -3
- package/template/.agents/skills/{vgai-music → volter-music}/SKILL.md +7 -7
- package/template/{.github/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/{.claude/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/{.github/skills/vgai-3d-models → .claude/skills/volter-3d-models}/SKILL.md +3 -3
- package/template/{.github/skills/vgai-ingest-existing-game → .claude/skills/volter-ingest-existing-game}/SKILL.md +3 -3
- package/template/.claude/skills/{vgai-threejs-authoring → volter-threejs-authoring}/SKILL.md +9 -9
- package/template/.claude/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
- package/template/{.agents/skills/vgai-threejs-authoring → .claude/skills/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/{.claude/skills/vgai-3d-models → .github/skills/volter-3d-models}/SKILL.md +3 -3
- package/template/{.claude/skills/vgai-ingest-existing-game → .github/skills/volter-ingest-existing-game}/SKILL.md +3 -3
- 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/.github/skills/{vgai-threejs-authoring → volter-threejs-authoring}/references/helper-catalog.md +1 -1
- package/template/.mcp.json +3 -3
- package/template/AGENTS.md +25 -25
- package/template/DEVLOG.md +1 -1
- package/template/IDIOMS.md +3 -3
- package/template/LICENSE +3 -3
- package/template/README.md +12 -13
- package/template/check-idioms.ts +71 -95
- package/template/manifest-entry-modules-plugin.ts +17 -4
- package/template/package.json +13 -15
- package/template/server/colyseus-setup.ts +1 -9
- package/template/server/main.ts +4 -9
- package/template/server/rooms/arena-room.ts +10 -10
- package/template/server/rooms/game-room.ts +10 -10
- package/template/server/rooms.ts +3 -5
- 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 +1 -1
- 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 +19 -38
- package/template/src/manifest-entry-modules.d.ts +12 -1
- package/template/src/net/NetworkedPlayers.tsx +3 -3
- 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 +12 -12
- 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-xFb5Wv7A.js +0 -1
- package/dist/assets/CanvasSceneViewport-vqBlOz8P.js +0 -1
- package/dist/assets/ColorInput-CX1UZjYO.js +0 -1
- package/dist/assets/ImageViewer-shZzMd91.js +0 -1
- package/dist/assets/InspectorObjectPreview-BMOvJaOw.js +0 -1
- package/dist/assets/JsonAssetDocument-D_HXneWE.js +0 -2
- package/dist/assets/Object3DDocumentToolbar-BfPH9jz5.js +0 -1
- package/dist/assets/Object3DDocumentViewport-BaXWtATg.js +0 -2
- package/dist/assets/OnlineAssetDetail-BxibUH6K.js +0 -1
- package/dist/assets/PlayBar-DRANyO01.js +0 -1
- package/dist/assets/ReactCanvasControls-K98jOX9b.js +0 -1
- package/dist/assets/RootSelectionOverlay-BQC12Gdd.js +0 -1
- package/dist/assets/ShadowEditor-DP1LWynl.js +0 -1
- package/dist/assets/StageHost-V_0opXFt.js +0 -2
- package/dist/assets/ThreeBoardDocument-tgcaZDqQ.js +0 -2
- package/dist/assets/Toolbar-uLgsrB2z.js +0 -1
- package/dist/assets/VideoViewer-ClUJ6_uy.js +0 -1
- package/dist/assets/ViewportShadingMenu-Bdkc6jcd.js +0 -1
- package/dist/assets/active-ingest-CnAeQcuQ.js +0 -3
- package/dist/assets/animation-mixers.service-DiecMX_A.js +0 -1
- package/dist/assets/animation-timeline.utility-C71vPJgs.js +0 -1
- package/dist/assets/asset-editor-persistence-BQgjOCrm.js +0 -1
- package/dist/assets/asset-loaders-5PIUVvmH.js +0 -2
- package/dist/assets/audio.utility-D9Vk_WYS.js +0 -1
- package/dist/assets/autoplay.service-CFJoLPLw.js +0 -1
- package/dist/assets/binding-resolver-C_9MBSMa.js +0 -2
- package/dist/assets/blender-emscripten-engine-BeWFjMn-.js +0 -2
- package/dist/assets/blender-version.status-DtfwUahB.js +0 -1
- package/dist/assets/blender-wali-engine-da698rDf.js +0 -2
- package/dist/assets/blender.status-ujwGU6dU.js +0 -1
- package/dist/assets/board-guides-_3R1t_-2.js +0 -1
- package/dist/assets/body-marks-RKb_LTwL.js +0 -1
- package/dist/assets/build-profiles.document-CZxDuhzz.js +0 -2
- package/dist/assets/build-progress.status-Dk5u3C67.js +0 -1
- package/dist/assets/build.header--xqH6uTP.js +0 -1
- package/dist/assets/canvas-entry-runtime-DVeh71nC.js +0 -2
- package/dist/assets/capability-coverage-DQgg6UJe.js +0 -7
- package/dist/assets/component-board.service-DgujG90T.js +0 -2
- package/dist/assets/component-contracts.service-Bc_2Xxh_.js +0 -1
- package/dist/assets/component-instance-root-df4ofoOR.js +0 -1
- package/dist/assets/connection.status-CCX-mgmr.js +0 -1
- package/dist/assets/constraints.inspector-CwEEREsf.js +0 -1
- package/dist/assets/coverage.service-CV7b5Sqn.js +0 -3
- package/dist/assets/curve-BKuiAPpj.js +0 -1
- package/dist/assets/data-check-core-CQEjuFyt.js +0 -1
- package/dist/assets/data-ref-DyFQqqX6.js +0 -1
- package/dist/assets/debug-bridge-CESAxmlz.js +0 -1
- package/dist/assets/debug-registry-l7k5Hjc8.js +0 -1
- package/dist/assets/design-time-layers-CQgnmqc8.js +0 -1
- package/dist/assets/design-time-react-mount-CFvIk_rV.js +0 -1
- package/dist/assets/edit-mode-authoring-DBjaBTxM.js +0 -1
- package/dist/assets/editor-api-D2azVray.js +0 -1
- package/dist/assets/editor-presentation-activity-C7SNSmTd.js +0 -1
- package/dist/assets/game-audio-CaGKzia4.js +0 -1
- package/dist/assets/game-document.service-FdG_gFPU.js +0 -1
- package/dist/assets/game-eval.command-4wa9vqWE.js +0 -2
- package/dist/assets/game-module-access-DulnT3NH.js +0 -1
- package/dist/assets/game-network-Bo_nlDR5.js +0 -22
- package/dist/assets/gameplay-replay-CnWnlogY.js +0 -1
- package/dist/assets/generation-DhwCUHPf.css +0 -1
- package/dist/assets/generation.service-D2yeZaJu.js +0 -1
- package/dist/assets/generations.status-3CrPw_n5.js +0 -1
- package/dist/assets/hierarchy-marks-BLPfSIym.js +0 -1
- package/dist/assets/hierarchy-marks-C25dY2fR.js +0 -1
- package/dist/assets/hosted-asset-materialization-DYdcFlDf.js +0 -2
- package/dist/assets/index-B5WjeCHm.css +0 -1
- package/dist/assets/index-BcH5GC3b.js +0 -1
- package/dist/assets/index-CwCDkEl1.js +0 -1
- package/dist/assets/index-n3QdTv-T.js +0 -1
- package/dist/assets/index.module-Ycad3DJq.js +0 -1
- package/dist/assets/ingest-siblings-CkxW__go.js +0 -1
- package/dist/assets/ingest-source-persistence-6peGfPAS.js +0 -1
- package/dist/assets/ingest.service-Cc73WMIW.js +0 -1
- package/dist/assets/inspection-CObLhnrs.js +0 -1
- package/dist/assets/instances.command-CxKGnrNl.js +0 -1
- package/dist/assets/material-BwFzKPi0.js +0 -1
- package/dist/assets/model-asset-sections-CFvvihfx.css +0 -1
- package/dist/assets/model-asset-sections.service-TZ2SaBmH.js +0 -1
- package/dist/assets/module-mode-B79jV5tQ.js +0 -2
- package/dist/assets/mount-canvas-ingest-root-BhaYNuhY.js +0 -2
- package/dist/assets/mount-dom-ingest-root-BQb1u0LX.js +0 -2
- package/dist/assets/mount-readiness-Ds0HvvLH.js +0 -4
- package/dist/assets/mount-three-ingest-root-DIDBfvIH.js +0 -1
- package/dist/assets/network-observer.service-CiR4Q9Q0.js +0 -1
- package/dist/assets/network.utility-CNG3eJ0E.js +0 -1
- package/dist/assets/object-marks-DwvIEBOK.js +0 -1
- package/dist/assets/pixi-authoring-adapter-B42K4md-.js +0 -1
- package/dist/assets/pixi-live-write-target-D56tQEe_.js +0 -1
- package/dist/assets/pose-guard-DILO6gGq.js +0 -1
- package/dist/assets/presentation-DGBuGP6i.js +0 -1
- package/dist/assets/profiler.utility-DLNySW3w.js +0 -1
- package/dist/assets/project-provenance-4ldz-EOG.js +0 -1
- package/dist/assets/r3f-design-session-C0DPEChS.js +0 -2
- package/dist/assets/react-canvas-navigation-Jowa_lJq.js +0 -1
- package/dist/assets/react-inspector.service-TfTdj_Qk.js +0 -1
- package/dist/assets/react-story-board-Bx7qYytV.js +0 -1
- package/dist/assets/react-world-authoring-adapter-C1jPW_cN.js +0 -1
- package/dist/assets/reflection-probe-capture.inspector-C-6zrzZb.js +0 -1
- package/dist/assets/registry-Z28XSZHF.js +0 -1
- package/dist/assets/resolve-three-C7zDbK29.js +0 -702
- package/dist/assets/root-seam-contract-rGNbiX6q.js +0 -1
- package/dist/assets/scene-capture-BTWgUzhI.js +0 -1
- package/dist/assets/scene-document.service-DJJp-la1.js +0 -2
- package/dist/assets/seeded-random-38To73fI.js +0 -1
- package/dist/assets/stage-overlay-set-olkNSZmq.js +0 -1
- package/dist/assets/stage-presence-markers-cznMN_qq.js +0 -1
- package/dist/assets/stage-transform-tools-BDUZqRIR.js +0 -1
- package/dist/assets/standard-viewport-dressing-BZyuxyVl.js +0 -24
- package/dist/assets/state-watch.utility-DDmn3G25.js +0 -1
- package/dist/assets/story-documents-8ehMyYHo.js +0 -3
- package/dist/assets/story-three-preview-B1nNiPwP.js +0 -2
- package/dist/assets/studio-environment-yaKaHPxH.js +0 -2
- package/dist/assets/team-playtest.service-Ds9tkO4q.js +0 -1
- package/dist/assets/three-authoring-adapter-BrkGH4cd.js +0 -1
- package/dist/assets/three-authoring.service-DoamZDMx.js +0 -2
- package/dist/assets/three-integration.service-Db-VabIm.js +0 -1
- package/dist/assets/three-projection-core-jBJVt6O0.js +0 -1
- package/dist/assets/three-viewport-presentation-CgO3eWJ-.js +0 -141
- package/dist/assets/tools-B_NJsk05.js +0 -1
- package/dist/assets/transform-mode-request-BnKpgRUW.js +0 -1
- package/dist/assets/transport-strip-a9yLoPsI.js +0 -1
- package/dist/assets/transport.header-CpfoppXc.js +0 -1
- package/dist/assets/tuples-CKsHOV9T.js +0 -1
- package/dist/assets/ui-board-document-DtTR_mBr.js +0 -2
- package/dist/assets/user-data-dHvLdpwM.js +0 -1
- package/dist/assets/viewport-door-DVkMQazS.js +0 -1
- package/dist/assets/worker-CC9Ug5Ei.js +0 -2
- package/dist/assets/workspace-arrangement-DIMM7ska.js +0 -1
- package/dist/assets/world-documents-C4t3iOD-.js +0 -1
- package/dist/assets/world-root-stage-binding-ydl3JN1a.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/template/server/loopback.ts +0 -76
- /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
package/template/src/main.ts
CHANGED
|
@@ -1,16 +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
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* nothing here runs inside it.
|
|
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.
|
|
14
13
|
*
|
|
15
14
|
* `manifestEntryModules` is generated from the manifest's `entry` paths
|
|
16
15
|
* (`manifest-entry-modules-plugin.ts`), so the manifest stays the one list of
|
|
@@ -20,8 +19,8 @@
|
|
|
20
19
|
import { Canvas } from '@react-three/fiber';
|
|
21
20
|
import { type ComponentType, createElement } from 'react';
|
|
22
21
|
import { createRoot } from 'react-dom/client';
|
|
23
|
-
import { manifestEntryModules } from 'virtual:
|
|
24
|
-
import manifest from '../
|
|
22
|
+
import { manifestEntryModules, mountCanvasRoot } from 'virtual:volter-manifest-entries';
|
|
23
|
+
import manifest from '../volter.project.json';
|
|
25
24
|
|
|
26
25
|
interface DeclaredRoot {
|
|
27
26
|
readonly id: string;
|
|
@@ -51,7 +50,7 @@ const roots = [...(manifest.roots as readonly DeclaredRoot[])].sort(
|
|
|
51
50
|
const bottomWorld = roots.find((root) => root.adapter === 'three' || root.adapter === 'canvas');
|
|
52
51
|
|
|
53
52
|
// A `canvas` world above the bottom one claims the points where Pixi finds an interactive object (a
|
|
54
|
-
//
|
|
53
|
+
// sprite the player taps), as the editor's input router does: the press goes to that world alone, and every
|
|
55
54
|
// other point falls through to the world beneath. Topmost first.
|
|
56
55
|
const claims: { readonly zOrder: number; readonly canvas: HTMLCanvasElement; readonly hit: (x: number, y: number) => boolean }[] = [];
|
|
57
56
|
const forwarded = new WeakSet<Event>();
|
|
@@ -95,36 +94,18 @@ for (const root of roots) {
|
|
|
95
94
|
layer.style.pointerEvents = 'none';
|
|
96
95
|
createRoot(layer).render(createElement(Entry));
|
|
97
96
|
} else if (root.adapter === 'canvas') {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
backgroundAlpha: root === bottomWorld ? 1 : 0,
|
|
109
|
-
onInit: (app) => {
|
|
110
|
-
if (root === bottomWorld) return;
|
|
111
|
-
claims.push({
|
|
112
|
-
zOrder: root.zOrder ?? 0,
|
|
113
|
-
canvas: app.canvas,
|
|
114
|
-
// Pixi points its boundary at the last rendered scene inside its own pointer handlers.
|
|
115
|
-
hit: (x, y) => {
|
|
116
|
-
const rendered = app.renderer.lastObjectRendered;
|
|
117
|
-
if (!rendered) return false;
|
|
118
|
-
app.renderer.events.rootBoundary.rootTarget = rendered;
|
|
119
|
-
return app.renderer.events.rootBoundary.hitTest(x, y) !== null;
|
|
120
|
-
},
|
|
121
|
-
});
|
|
122
|
-
claims.sort((a, b) => b.zOrder - a.zOrder);
|
|
123
|
-
},
|
|
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);
|
|
124
107
|
},
|
|
125
|
-
|
|
126
|
-
),
|
|
127
|
-
);
|
|
108
|
+
});
|
|
128
109
|
} else {
|
|
129
110
|
throw new Error(
|
|
130
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
|
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import type { Room } from '@colyseus/sdk';
|
|
13
|
-
import { useFrame } from '@react-three/fiber';
|
|
13
|
+
import { type ThreeElements, useFrame } from '@react-three/fiber';
|
|
14
14
|
import { useEffect, useRef, useState } from 'react';
|
|
15
15
|
import { actionPressed } from '../input';
|
|
16
16
|
import { joinGameRoom } from './game-room';
|
|
@@ -42,7 +42,7 @@ interface StateShape {
|
|
|
42
42
|
orbs: { forEach(fn: (orb: OrbView, id: string) => void): void };
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
export function NetworkedPlayers({ name = 'Networked Players' }:
|
|
45
|
+
export function NetworkedPlayers({ name = 'Networked Players', ...props }: ThreeElements['group']) {
|
|
46
46
|
const [room, setRoom] = useState<Room | null>(null);
|
|
47
47
|
const [running, setRunning] = useState(false);
|
|
48
48
|
const [players, setPlayers] = useState<readonly PlayerView[]>([]);
|
|
@@ -115,7 +115,7 @@ export function NetworkedPlayers({ name = 'Networked Players' }: { readonly name
|
|
|
115
115
|
});
|
|
116
116
|
|
|
117
117
|
return (
|
|
118
|
-
<group name={name}>
|
|
118
|
+
<group {...props} name={name}>
|
|
119
119
|
{players.map((player) => (
|
|
120
120
|
<mesh key={player.id} name={player.name || player.id} position={[player.x, 0.45, player.z]} castShadow>
|
|
121
121
|
<sphereGeometry args={[0.45, 24, 16]} />
|
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" />
|
package/template/tsconfig.json
CHANGED
|
@@ -9,18 +9,18 @@ import { loadGameManifestFile } from '@volter/editor-project/manifest/load-file'
|
|
|
9
9
|
// Single source of truth for game-manifest validation, shipped IN the
|
|
10
10
|
// project template so every scaffolded game
|
|
11
11
|
// gets a working `npm run validate-manifest`. Validates each given
|
|
12
|
-
// `
|
|
12
|
+
// `volter.project.json` path via `loadGameManifestFile` (parse -> cross-field
|
|
13
13
|
// checks -> resolution) and prints the
|
|
14
14
|
// resolved adapter-root list (id, adapter identity) on success. Any failure
|
|
15
15
|
// prints a descriptive error and
|
|
16
16
|
// exits 1.
|
|
17
17
|
//
|
|
18
|
-
// Defaults to THIS template's own manifest (`
|
|
18
|
+
// Defaults to THIS template's own manifest (`volter.project.json`, a sibling of
|
|
19
19
|
// this script) when no path is given, so `npm run validate-manifest` works
|
|
20
20
|
// out of the box both from the monorepo root and from a scaffolded project.
|
|
21
21
|
// ---------------------------------------------------------------------------
|
|
22
22
|
|
|
23
|
-
const defaultManifestPath = fileURLToPath(new URL('./
|
|
23
|
+
const defaultManifestPath = fileURLToPath(new URL('./volter.project.json', import.meta.url));
|
|
24
24
|
|
|
25
25
|
const args = process.argv.slice(2);
|
|
26
26
|
const manifestPaths = args.length > 0 ? args.map((p) => resolve(p)) : [defaultManifestPath];
|
package/template/vite.config.ts
CHANGED
|
@@ -4,21 +4,21 @@ import { defineConfig } from 'vite';
|
|
|
4
4
|
// Config-relative TS imports get bundled the same way — that is what lets the
|
|
5
5
|
// project's executable Zod schemas reach the build-time check below.
|
|
6
6
|
import { manifestEntryModulesPlugin } from './manifest-entry-modules-plugin';
|
|
7
|
-
import manifest from './
|
|
7
|
+
import manifest from './volter.project.json';
|
|
8
8
|
|
|
9
|
-
/** A
|
|
9
|
+
/** A volter runtime package served as SOURCE, the way the editor serves it. */
|
|
10
10
|
const packageSource = (name: string) =>
|
|
11
11
|
path.join(path.dirname(createRequire(import.meta.url).resolve(`${name}/package.json`)), 'src');
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Run-4 dry-run friction #2 — auto-detect drvfs the SAME way the editor dev
|
|
15
|
-
* server does (`packages/editor/server/server-utils.ts`'s
|
|
15
|
+
* server does (`packages/editor-core/server/server-utils.ts`'s
|
|
16
16
|
* `resolveWatcherPollOptions`, and `dev.ts`'s own `projectOnDrvfs` check):
|
|
17
17
|
* on WSL, a project living on a Windows drive (`/mnt/<drive>/…`) never fires
|
|
18
18
|
* inotify, so without polling this standalone server (`npm run dev:standalone`)
|
|
19
19
|
* silently misses every external file edit — the same failure mode
|
|
20
20
|
* `dev.ts`'s comment documents for the editor. Before this fix, this file
|
|
21
|
-
* read ONLY `
|
|
21
|
+
* read ONLY `VOLTER_WATCH_POLL`, so a project on drvfs polled in the editor
|
|
22
22
|
* but NOT in the standalone server — the two disagreed for no reason a
|
|
23
23
|
* developer could see.
|
|
24
24
|
*
|
|
@@ -26,11 +26,11 @@ const packageSource = (name: string) =>
|
|
|
26
26
|
* contract, so this
|
|
27
27
|
* duplicates the tiny drvfs check rather than reaching across a package
|
|
28
28
|
* boundary that doesn't exist here — same contract as the editor's own
|
|
29
|
-
* helper: `
|
|
29
|
+
* helper: `VOLTER_WATCH_POLL=0` forces polling off anywhere, `=1`/`=<ms>`
|
|
30
30
|
* forces it on with that interval, unset auto-enables on a drvfs mount.
|
|
31
31
|
*/
|
|
32
32
|
function resolveWatchOption(): { usePolling: true; interval: number } | undefined {
|
|
33
|
-
const raw = process.env['
|
|
33
|
+
const raw = process.env['VOLTER_WATCH_POLL'];
|
|
34
34
|
if (raw !== undefined && raw !== '') {
|
|
35
35
|
if (raw === '0') return undefined;
|
|
36
36
|
const ms = Number(raw);
|
|
@@ -68,7 +68,7 @@ export default defineConfig({
|
|
|
68
68
|
//
|
|
69
69
|
// This project has no `@vitejs/plugin-react`; Vite's built-in esbuild does
|
|
70
70
|
// the JSX transform, and it picks the runtime from the tsconfig nearest the
|
|
71
|
-
// FILE. That covers `src/**`, but the
|
|
71
|
+
// FILE. That covers `src/**`, but the volter runtime packages are served as
|
|
72
72
|
// source out of their installed directories (see the aliases below), where
|
|
73
73
|
// the project's tsconfig does not reach — so their `.tsx` compiled with the CLASSIC runtime, emitting
|
|
74
74
|
// bare `React.createElement` calls into a module that never imports React.
|
|
@@ -97,7 +97,7 @@ export default defineConfig({
|
|
|
97
97
|
// example modules (or injected by the JSX transform, like the React
|
|
98
98
|
// runtimes) so Vite does not discover them at runtime, re-optimize, and
|
|
99
99
|
// hard-reload the standalone runtime the first time a game selects them —
|
|
100
|
-
// that mid-session reload resets `window.
|
|
100
|
+
// that mid-session reload resets `window.__volterScene`/the menu out from
|
|
101
101
|
// under whatever is driving the page (the dep-optimize-reload flake the
|
|
102
102
|
// 04 spec hit: the first cold select of `editor-tutorial` reloaded on
|
|
103
103
|
// `react/jsx-dev-runtime`). Verified against a cold scaffold: with these
|
|
@@ -146,20 +146,20 @@ export default defineConfig({
|
|
|
146
146
|
// WSL when the project lives on a Windows drive (/mnt/c, drvfs: inotify
|
|
147
147
|
// never fires there), or edits to src/data/ or src/ generally silently never
|
|
148
148
|
// hot-reload into the running game.
|
|
149
|
-
// `
|
|
149
|
+
// `VOLTER_WATCH_POLL` is an explicit override (`=0` off anywhere, `=1`/
|
|
150
150
|
// `=<ms>` on anywhere) — see `resolveWatchOption` above, which the
|
|
151
151
|
// EDITOR dev server's own auto-detect mirrors, so one behavior covers
|
|
152
152
|
// both surfaces without the developer having to set anything. Safe to
|
|
153
153
|
// enable here: this standalone server only watches the project tree,
|
|
154
154
|
// which is small.
|
|
155
155
|
//
|
|
156
|
-
//
|
|
156
|
+
// VOLTER_NO_WATCH=1 (set by a harness driving this page):
|
|
157
157
|
// disable watching entirely — a mid-run Vite reload resets
|
|
158
|
-
// `window.
|
|
158
|
+
// `window.__volter`/whatever is driving the standalone page out from under
|
|
159
159
|
// an in-flight run (the hollowstone reload-kills-the-run
|
|
160
160
|
// lesson). Mutually exclusive with the poll option (same `server.watch`
|
|
161
161
|
// key) — NO_WATCH wins when both would otherwise apply.
|
|
162
|
-
...(process.env['
|
|
162
|
+
...(process.env['VOLTER_NO_WATCH']
|
|
163
163
|
? { watch: null }
|
|
164
164
|
: // Watch source; never watch output: a build (`npm run build`,
|
|
165
165
|
// `vercel build`) rewriting dist/ or .vercel/output/ inside the
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* whatever it declares about itself. An adapter's SIZE measures this game's
|
|
8
8
|
* distance from native — which is why yours fits on a screen.
|
|
9
9
|
*
|
|
10
|
-
* Regions are derived mechanically from `
|
|
10
|
+
* Regions are derived mechanically from `volter.project.json`'s `roots[]` — add
|
|
11
11
|
* a root to the manifest and its region appears here for free, with no edit to
|
|
12
12
|
* this file. `regionIncludes` states the PARAMETERS that derivation cannot
|
|
13
13
|
* produce: which source files each region owns beyond its entry's import reach.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "./node_modules/@volter/editor-project/schemas/
|
|
2
|
+
"$schema": "./node_modules/@volter/editor-project/schemas/volter-project.schema.json",
|
|
3
3
|
"manifestVersion": 2,
|
|
4
4
|
"name": "My Game",
|
|
5
5
|
"appId": "com.example.mygame",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"entry": "server/main.ts",
|
|
20
20
|
"command": "npx tsx --tsconfig server/tsconfig.json server/main.ts",
|
|
21
21
|
"port": 2567,
|
|
22
|
-
"env": { "
|
|
22
|
+
"env": { "VOLTER_ROOM_MONITOR": "1" }
|
|
23
23
|
},
|
|
24
24
|
{ "id": "play + server", "kind": "compound", "run": ["server", "play"] }
|
|
25
25
|
],
|
|
@@ -10,58 +10,58 @@ dist-server/
|
|
|
10
10
|
.vite/
|
|
11
11
|
|
|
12
12
|
# Editor autosaved UI state (panel layout etc.) — local-machine ephemeral.
|
|
13
|
-
# NOT the rest of .
|
|
14
|
-
# state
|
|
15
|
-
# and .
|
|
16
|
-
# .
|
|
17
|
-
.
|
|
18
|
-
.
|
|
13
|
+
# NOT the rest of .volter/: .volter/scaffold-baseline.json is committed project
|
|
14
|
+
# state: the scaffold's record of the files it wrote (node/scaffold/baseline.ts),
|
|
15
|
+
# and .volter/overlays/*.json + .volter/thumbnail.png + .volter/provenance.json +
|
|
16
|
+
# .volter/generations.json are real project data too.
|
|
17
|
+
.volter/editor-state.json
|
|
18
|
+
.volter/workbench-storage.json
|
|
19
19
|
# Which Code-OSS workbench THIS machine opens the project in — an absolute path
|
|
20
20
|
# to an extracted release or a fork checkout, so it is a fact about this box and
|
|
21
21
|
# never about the project. The product's `create --workbench <dir>` writes it;
|
|
22
|
-
# `
|
|
23
|
-
.
|
|
22
|
+
# `volter-game-editor edit --workbench <dir>` overrides it for one launch.
|
|
23
|
+
.volter/workbench.json
|
|
24
24
|
# The editor's chat panel: which agent harness this machine chose and its conversations.
|
|
25
|
-
.
|
|
26
|
-
.
|
|
25
|
+
.volter/chat-selection.json
|
|
26
|
+
.volter/chat-sessions.json
|
|
27
27
|
# #146 — more local-machine ephemera: the live session's discovery file
|
|
28
28
|
# (written by the dev server at boot, removed on shutdown) and agent
|
|
29
|
-
# screenshot captures (GET /
|
|
30
|
-
.
|
|
31
|
-
.
|
|
32
|
-
.
|
|
33
|
-
.
|
|
34
|
-
.
|
|
35
|
-
# `
|
|
29
|
+
# screenshot captures (GET /__volter/screenshot).
|
|
30
|
+
.volter/session.json
|
|
31
|
+
.volter/collaboration.json
|
|
32
|
+
.volter/captures/
|
|
33
|
+
.volter/tmp/
|
|
34
|
+
.volter/last-run/
|
|
35
|
+
# `volter-game-editor screenshot`'s default output directory — looking at the game is the
|
|
36
36
|
# documented way to verify it, so an ordinary session leaves dozens of PNGs here.
|
|
37
|
-
.
|
|
38
|
-
# `
|
|
37
|
+
.volter/screenshots/
|
|
38
|
+
# `volter-game-editor play`'s gameplay video. EVERY play records, so this directory is
|
|
39
39
|
# written on every run — and it is bounded by design, not by cleanup: the
|
|
40
40
|
# unnamed clip is one rotating file (play-latest.webm) that each play
|
|
41
41
|
# overwrites, and `--record <name>` keepsakes are the user's own. Never
|
|
42
42
|
# committed either way: video is build-shaped output, and a repo that carries
|
|
43
43
|
# one run's footage is carrying the wrong artifact.
|
|
44
|
-
.
|
|
44
|
+
.volter/recordings/
|
|
45
45
|
# Run artifacts a driving script writes (screenshots a failure block points at,
|
|
46
46
|
# the last run's scratch). Overwritten every run — nothing here is worth
|
|
47
47
|
# committing.
|
|
48
|
-
.
|
|
48
|
+
.volter/prev-run/
|
|
49
49
|
# The idiom scanner's last findings (check-idioms.ts writes it every run, and
|
|
50
|
-
# `
|
|
50
|
+
# `volter-game-editor status` reads it so open ERROR findings surface from the first status
|
|
51
51
|
# call instead of at handoff). A cache of a fact recomputable in under a
|
|
52
52
|
# second — machine-local, never project state.
|
|
53
|
-
.
|
|
53
|
+
.volter/check-idioms.json
|
|
54
54
|
# Rebuildable Scene/Canvas Content preview images. Authored framing remains in
|
|
55
|
-
# .
|
|
56
|
-
.
|
|
55
|
+
# .volter/thumbnails.json; only these generated pixels are machine-local.
|
|
56
|
+
.volter/cache/document-previews/
|
|
57
57
|
# The build-discipline tripwires' announce gate (which step each tripwire has
|
|
58
58
|
# already announced, keyed on what makes it go quiet). Persisted so a dev-server
|
|
59
59
|
# restart cannot re-arm a long dirty batch at "nothing announced" — machine-local
|
|
60
60
|
# by nature, and it MUST stay untracked: a tracked gate file would add itself to
|
|
61
61
|
# the very dirty-file count the commit-cadence tripwire reports.
|
|
62
|
-
.
|
|
62
|
+
.volter/tripwire-gate.json
|
|
63
63
|
|
|
64
|
-
# `
|
|
64
|
+
# `volter-game-editor play`'s run logs (logs/play-*.jsonl)
|
|
65
65
|
logs/
|
|
66
66
|
*.jsonl
|
|
67
67
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/* THE GAME EDITOR'S OWN SPLASH — what this product draws into the kit's opening cover
|
|
2
|
-
(`
|
|
2
|
+
(`VolterProduct.cover`, `packages/editor-core/workbench/src/volterCover.ts`).
|
|
3
3
|
|
|
4
4
|
IT SPELLS CLASSIC'S PALETTE, for the same reason the model editor's spells Blender's: the
|
|
5
5
|
cover paints BEFORE any theme extension is registered — the web workbench's first frame is
|
|
6
6
|
the page config's `initialColorTheme` — so a splash written against `--vscode-*` would wear
|
|
7
7
|
the workbench's default dark for exactly the seconds it exists instead of this product's
|
|
8
8
|
look. Classic is the editor's own Graphite and it ships no theme extension at all, so these
|
|
9
|
-
values come from `@
|
|
9
|
+
values come from `@volter/editor-sdk`'s `widgets/theme.ts`, named beside them:
|
|
10
10
|
|
|
11
11
|
#1a1a1a GRAPHITE_BG[0] surface.shell — the window's outermost band
|
|
12
12
|
#242424 GRAPHITE_BG[1] surface.panel
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
Nothing here names a font: Classic is the workbench's own UI font, which is what this
|
|
19
19
|
product wearing no look extension means. */
|
|
20
20
|
|
|
21
|
-
.
|
|
21
|
+
.volter-game-cover {
|
|
22
22
|
position: absolute;
|
|
23
23
|
inset: 0;
|
|
24
24
|
display: flex;
|
|
@@ -33,26 +33,26 @@
|
|
|
33
33
|
/* THE MARK: a play triangle inside the panel surface — the one glyph this product's whole
|
|
34
34
|
transport is built around. Inline SVG in the product's own markup, so there is no image to
|
|
35
35
|
fetch and the first frame is the first frame. */
|
|
36
|
-
.
|
|
36
|
+
.volter-game-cover-mark {
|
|
37
37
|
width: 56px;
|
|
38
38
|
height: 56px;
|
|
39
39
|
opacity: 0.92;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
.
|
|
42
|
+
.volter-game-cover-title {
|
|
43
43
|
font-size: 26px;
|
|
44
44
|
font-weight: 600;
|
|
45
45
|
letter-spacing: 0.02em;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
.
|
|
48
|
+
.volter-game-cover-folder {
|
|
49
49
|
font-size: 12px;
|
|
50
50
|
color: #9aa0a6;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/* Indeterminate ON PURPOSE: this product knows WHAT it is waiting for and not how far along it
|
|
54
54
|
is, and a bar that invented a percentage would be a lie a person can see. */
|
|
55
|
-
.
|
|
55
|
+
.volter-game-cover-rail {
|
|
56
56
|
position: relative;
|
|
57
57
|
width: 220px;
|
|
58
58
|
height: 2px;
|
|
@@ -61,22 +61,22 @@
|
|
|
61
61
|
background: #333333;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
.
|
|
64
|
+
.volter-game-cover-rail::after {
|
|
65
65
|
content: "";
|
|
66
66
|
position: absolute;
|
|
67
67
|
top: 0;
|
|
68
68
|
bottom: 0;
|
|
69
69
|
width: 40%;
|
|
70
70
|
background: #579eff;
|
|
71
|
-
animation:
|
|
71
|
+
animation: volter-game-cover-travel 1.25s ease-in-out infinite;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
@keyframes
|
|
74
|
+
@keyframes volter-game-cover-travel {
|
|
75
75
|
0% { left: -40%; }
|
|
76
76
|
100% { left: 100%; }
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
.
|
|
79
|
+
.volter-game-cover-state {
|
|
80
80
|
font-size: 11px;
|
|
81
81
|
min-height: 14px;
|
|
82
82
|
color: #9aa0a6;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* It is the counterpart of `packages/game-editor/src/index.ts`, which composes the SAME
|
|
10
10
|
* product in the editor's own realm. There is exactly one piece of workbench code that is a
|
|
11
|
-
* game editor's and not any editor's, and it is `
|
|
11
|
+
* game editor's and not any editor's, and it is `volterGameSkew.ts` beside this file: what the
|
|
12
12
|
* frame must answer for a GAME layout — immersive Play, the semantic dock commands, and the
|
|
13
13
|
* surface-keyboard probe. Everything else a game editor draws is the kit's.
|
|
14
14
|
*
|
|
@@ -19,19 +19,19 @@
|
|
|
19
19
|
*
|
|
20
20
|
* IT DOES SHIP ONE STYLESHEET, and only one: `media/game-cover.css`, this product's own
|
|
21
21
|
* opening splash. It spells Classic's palette because the cover paints before any theme is
|
|
22
|
-
* registered at all — see that file's header, and `
|
|
22
|
+
* registered at all — see that file's header, and `volterProduct.ts`'s `cover`.
|
|
23
23
|
*--------------------------------------------------------------------------------------------*/
|
|
24
24
|
|
|
25
25
|
import './media/game-cover.css';
|
|
26
26
|
import { $ } from '../../../../base/browser/dom.js';
|
|
27
27
|
import { mainWindow } from '../../../../base/browser/window.js';
|
|
28
28
|
import { localize } from '../../../../nls.js';
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
29
|
+
import { registerVolterProduct, type VolterProductCover, type VolterProductCoverContext, type VolterProductMountContext } from '../../volter/browser/volterProduct.js';
|
|
30
|
+
import { VolterGameSkew, type VolterGameBridge } from './volterGameSkew.js';
|
|
31
31
|
|
|
32
32
|
/** What this product reads off the mount to know its Game document is open and drawn — a
|
|
33
|
-
* MIRROR of the kit's `
|
|
34
|
-
* `
|
|
33
|
+
* MIRROR of the kit's `VolterDocumentsBridge`, declared here for the same reason
|
|
34
|
+
* `VolterGameBridge` is: a product declares the shape it expects (`volterProduct.ts`'s header),
|
|
35
35
|
* and a door this build's kit does not have reads as missing rather than as a crash. */
|
|
36
36
|
interface DocumentsRegistry {
|
|
37
37
|
whenRestored?(): Promise<void>;
|
|
@@ -73,13 +73,13 @@ const GAME_OPEN_BUDGET_MS = 60_000;
|
|
|
73
73
|
* cover it drew. Set by `cover`, cleared by the handle's `dispose`. */
|
|
74
74
|
let splash: { say(text: string): void } | undefined;
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
registerVolterProduct({
|
|
77
77
|
id: 'game-editor',
|
|
78
78
|
layout: {
|
|
79
79
|
sidebarWidth: 260,
|
|
80
80
|
containers: [
|
|
81
81
|
{
|
|
82
|
-
id: 'workbench.view.
|
|
82
|
+
id: 'workbench.view.volter',
|
|
83
83
|
title: 'Game',
|
|
84
84
|
location: 'sidebar',
|
|
85
85
|
views: [
|
|
@@ -88,39 +88,39 @@ registerVgaiProduct({
|
|
|
88
88
|
],
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
|
-
id: 'workbench.view.
|
|
91
|
+
id: 'workbench.view.volter.inspector',
|
|
92
92
|
title: 'Inspector',
|
|
93
93
|
location: 'auxiliarybar',
|
|
94
94
|
views: [{ part: 'properties', title: 'Inspector', weight: 100 }],
|
|
95
95
|
},
|
|
96
96
|
],
|
|
97
97
|
},
|
|
98
|
-
title: localize('
|
|
98
|
+
title: localize('volterGameTitle', "Volter Game Editor"),
|
|
99
99
|
// The workbench's own trust prompt, in this product's words: a game project runs its own
|
|
100
100
|
// code the moment it opens — its contributions from its `node_modules`, its dev server, and
|
|
101
101
|
// the game itself in the pane.
|
|
102
|
-
trustSentence: localize('
|
|
102
|
+
trustSentence: localize('volterGameTrustRequest', "Volter Game Editor runs this project's own code — its editor contributions, its dev server and its game. Trust this folder to open it."),
|
|
103
103
|
// THIS PRODUCT'S OWN SPLASH (F4). The kit owns the cover's mechanism — when it goes up,
|
|
104
104
|
// that it comes away whole, what a refusal looks like; this is the picture inside it, in
|
|
105
105
|
// Classic's own palette and this product's own words, drawn with no image to fetch so the
|
|
106
106
|
// first painted frame is already this.
|
|
107
|
-
cover(host: HTMLElement, context:
|
|
108
|
-
const root = $('.
|
|
107
|
+
cover(host: HTMLElement, context: VolterProductCoverContext): VolterProductCover {
|
|
108
|
+
const root = $('.volter-game-cover');
|
|
109
109
|
// THE MARK, built as ELEMENTS. Not `innerHTML` — the page carries a Trusted Types
|
|
110
110
|
// policy and the workbench's own code never assigns markup — and not a file either,
|
|
111
111
|
// because an image to fetch is a frame to wait for.
|
|
112
|
-
const mark = $.SVG<SVGElement>('svg', { class: '
|
|
112
|
+
const mark = $.SVG<SVGElement>('svg', { class: 'volter-game-cover-mark', viewBox: '0 0 48 48', 'aria-hidden': 'true' });
|
|
113
113
|
mark.append(
|
|
114
114
|
$.SVG<SVGElement>('rect', { x: '4', y: '4', width: '40', height: '40', rx: '9', fill: '#242424', stroke: '#333333' }),
|
|
115
115
|
$.SVG<SVGElement>('path', { d: 'M20 16 L34 24 L20 32 Z', fill: '#579eff' }),
|
|
116
116
|
);
|
|
117
|
-
const title = $('.
|
|
118
|
-
title.textContent = localize('
|
|
119
|
-
const folder = $('.
|
|
117
|
+
const title = $('.volter-game-cover-title');
|
|
118
|
+
title.textContent = localize('volterGameCoverTitle', "Game");
|
|
119
|
+
const folder = $('.volter-game-cover-folder');
|
|
120
120
|
folder.textContent = context.folderName;
|
|
121
|
-
const state = $('.
|
|
122
|
-
state.textContent = localize('
|
|
123
|
-
root.append(mark, title, folder, $('.
|
|
121
|
+
const state = $('.volter-game-cover-state');
|
|
122
|
+
state.textContent = localize('volterGameCoverStarting', "Starting the editor…");
|
|
123
|
+
root.append(mark, title, folder, $('.volter-game-cover-rail'), state);
|
|
124
124
|
host.appendChild(root);
|
|
125
125
|
splash = { say: (text: string) => { state.textContent = text; } };
|
|
126
126
|
return {
|
|
@@ -134,7 +134,7 @@ registerVgaiProduct({
|
|
|
134
134
|
// mount resolving is the EDITOR being assembled — the project's own modules still have to
|
|
135
135
|
// load and the scene still has to draw, and the editor's own "No document open yet" is
|
|
136
136
|
// what a person would otherwise watch in that window.
|
|
137
|
-
async ready(context:
|
|
137
|
+
async ready(context: VolterProductMountContext): Promise<void> {
|
|
138
138
|
const registry = context.mount['documents'] as DocumentsRegistry | undefined;
|
|
139
139
|
// A bridge without the door is a MISSING door: with nothing to watch, the mount
|
|
140
140
|
// resolving is the answer, which is what this product did before `ready` existed.
|
|
@@ -144,7 +144,7 @@ registerVgaiProduct({
|
|
|
144
144
|
if (registry.list().length === 0) { return; }
|
|
145
145
|
const open = (): boolean => openDocument(registry);
|
|
146
146
|
if (!open()) {
|
|
147
|
-
splash?.say(localize('
|
|
147
|
+
splash?.say(localize('volterGameCoverWaiting', "Opening the game…"));
|
|
148
148
|
await new Promise<void>((resolve, reject) => {
|
|
149
149
|
let unsubscribe: (() => void) | undefined;
|
|
150
150
|
let timer: number | undefined;
|
|
@@ -158,7 +158,7 @@ registerVgaiProduct({
|
|
|
158
158
|
};
|
|
159
159
|
timer = mainWindow.setTimeout(() => {
|
|
160
160
|
stop();
|
|
161
|
-
reject(new Error(localize('
|
|
161
|
+
reject(new Error(localize('volterGameCoverTimedOut', "No document opened within {0}s. The project's own modules load through the editor session; `volter-game-editor console` is where it says why.", Math.round(GAME_OPEN_BUDGET_MS / 1000))));
|
|
162
162
|
}, GAME_OPEN_BUDGET_MS);
|
|
163
163
|
unsubscribe = registry.subscribe?.(() => { if (open()) { stop(); resolve(); } });
|
|
164
164
|
// One more read after subscribing: the document can land between the check
|
|
@@ -169,16 +169,16 @@ registerVgaiProduct({
|
|
|
169
169
|
// DRAWN, not merely registered — the pane paints the active document on the frame
|
|
170
170
|
// after the registry names it, so the cover lifts onto the game and not onto the empty
|
|
171
171
|
// pane it was covering.
|
|
172
|
-
splash?.say(localize('
|
|
172
|
+
splash?.say(localize('volterGameCoverDrawing', "Drawing…"));
|
|
173
173
|
await new Promise<void>((resolve) => mainWindow.requestAnimationFrame(() => mainWindow.requestAnimationFrame(() => resolve())));
|
|
174
174
|
},
|
|
175
|
-
mount(context:
|
|
176
|
-
// THE GAME SKEW'S THREE FRAME ANSWERS (
|
|
175
|
+
mount(context: VolterProductMountContext): void {
|
|
176
|
+
// THE GAME SKEW'S THREE FRAME ANSWERS (volterGameSkew.ts, U2). The bridge publishes its
|
|
177
177
|
// half beside the kit's doors; a bridge without it is a missing door rather than a
|
|
178
178
|
// crash, which is the same rule every other door here follows.
|
|
179
|
-
const bridge = context.mount['game'] as
|
|
179
|
+
const bridge = context.mount['game'] as VolterGameBridge | undefined;
|
|
180
180
|
if (!bridge) { return; }
|
|
181
|
-
context.store.add(context.instantiationService.createInstance(
|
|
181
|
+
context.store.add(context.instantiationService.createInstance(VolterGameSkew, bridge, {
|
|
182
182
|
pane: context.ids.pane,
|
|
183
183
|
hierarchyView: context.ids.hierarchyView,
|
|
184
184
|
inspectorView: context.ids.inspectorView,
|