@vgai/editor 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +35 -0
- package/dist/a/b/c/test-nested.json +1 -0
- package/dist/assets/CCDIKSolver-Dz-ysxZF.js +1 -0
- package/dist/assets/SelectionBox-BXsv_6aH.js +1 -0
- package/dist/assets/browser-project-scripts-DOru4L1x.js +2 -0
- package/dist/assets/browserAll-CEkWYlFk.js +1 -0
- package/dist/assets/collision-world-DniMB0qq.glb +0 -0
- package/dist/assets/create-runtime-DYIWr3va.js +1 -0
- package/dist/assets/data-asset-Bb9sIM7i.js +5 -0
- package/dist/assets/esbuild-BHljloGq.wasm +0 -0
- package/dist/assets/fake-three-BMTQ9rl_.js +1 -0
- package/dist/assets/game-8SDZPPgH.js +1 -0
- package/dist/assets/game-BI111o5f.js +10 -0
- package/dist/assets/game-CevorxyV.js +1 -0
- package/dist/assets/game-Di1H0gFj.js +1 -0
- package/dist/assets/game-Di7XlywD.js +1 -0
- package/dist/assets/game-DjnCaw8R.js +1 -0
- package/dist/assets/game-Q9A0aXSV.js +1 -0
- package/dist/assets/game-pt_1lQLv.js +1 -0
- package/dist/assets/game-source-CvidN7AB.js +1 -0
- package/dist/assets/game-xsOho_wg.js +83 -0
- package/dist/assets/index-Bp5cecD6.js +12 -0
- package/dist/assets/index-CPVV6pjw.js +1 -0
- package/dist/assets/index-CpOnYyeD.js +213 -0
- package/dist/assets/index-Cs8xwv3e.js +1 -0
- package/dist/assets/index-DL7RcQ0n.js +27 -0
- package/dist/assets/index-Dr8H_6Rl.js +1 -0
- package/dist/assets/index-_bCaipUk.js +13650 -0
- package/dist/assets/ingest-siblings-Dz8eEqrV.js +1 -0
- package/dist/assets/mount-manifest-Bhk0ohsl.js +1 -0
- package/dist/assets/recast-navigation.wasm-compat-CvP4UGK6.js +1 -0
- package/dist/assets/scene-query-BivAHhJu.js +1 -0
- package/dist/assets/stats.module--VATS4Kh.js +1 -0
- package/dist/assets/webworkerAll-BLrH0F6F.js +1 -0
- package/dist/assets/xstate-animation-binding-1NGLmw6y.js +1 -0
- package/dist/assets/xstate.esm-BgUD33nl.js +3 -0
- package/dist/index.html +37 -0
- package/dist/ingest/racing-game/UPSTREAM.md +68 -0
- package/dist/ingest/racing-game/a/Inter-Black.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-Black.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-BlackItalic.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-BlackItalic.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-Bold.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-Bold.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-BoldItalic.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-BoldItalic.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-ExtraBold.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-ExtraBold.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-ExtraBoldItalic.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-ExtraBoldItalic.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-ExtraLight.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-ExtraLight.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-ExtraLightItalic.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-ExtraLightItalic.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-Italic.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-Italic.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-Light.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-Light.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-LightItalic.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-LightItalic.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-Medium.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-Medium.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-MediumItalic.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-MediumItalic.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-Regular.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-Regular.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-SemiBold.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-SemiBold.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-SemiBoldItalic.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-SemiBoldItalic.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-Thin.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-Thin.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-ThinItalic.woff +0 -0
- package/dist/ingest/racing-game/a/Inter-ThinItalic.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-italic.var.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter-roman.var.woff2 +0 -0
- package/dist/ingest/racing-game/a/Inter.var.woff2 +0 -0
- package/dist/ingest/racing-game/a/index.css +1 -0
- package/dist/ingest/racing-game/images/bronze.png +0 -0
- package/dist/ingest/racing-game/images/gold.png +0 -0
- package/dist/ingest/racing-game/images/silver.png +0 -0
- package/dist/ingest/racing-game/index.html +15 -0
- package/dist/ingest/racing-game/models/chassis-draco.glb +0 -0
- package/dist/ingest/racing-game/models/track-draco.glb +0 -0
- package/dist/ingest/racing-game/models/wheel-draco.glb +0 -0
- package/dist/ingest/racing-game/rg-entry.js +1 -0
- package/dist/ingest/racing-game/sounds/accelerate.mp3 +0 -0
- package/dist/ingest/racing-game/sounds/boost.mp3 +0 -0
- package/dist/ingest/racing-game/sounds/crash.mp3 +0 -0
- package/dist/ingest/racing-game/sounds/engine.mp3 +0 -0
- package/dist/ingest/racing-game/sounds/honk.mp3 +0 -0
- package/dist/ingest/racing-game/sounds/tire-brake.mp3 +0 -0
- package/dist/ingest/racing-game/sounds/train.mp3 +0 -0
- package/dist/ingest/racing-game/sounds/water.mp3 +0 -0
- package/dist/ingest/racing-game/textures/cursor.svg +3 -0
- package/dist/ingest/racing-game/textures/dikhololo_night_1k.hdr +0 -0
- package/dist/ingest/racing-game/textures/heightmap_1024.png +0 -0
- package/dist/ingest/racing-game/textures/mask.svg +11 -0
- package/dist/ingest/racing-game/textures/no_sound.png +0 -0
- package/dist/ingest/racing-game/three-r139.module.js +50617 -0
- package/dist/ingest/racing-game/vendor.js +179 -0
- package/dist/ingest/racing-game/vgai.game.json +20 -0
- package/dist/ingest/simcity/UPSTREAM.md +65 -0
- package/dist/ingest/simcity/favicon.ico +0 -0
- package/dist/ingest/simcity/fonts/Bebas-Regular.otf +0 -0
- package/dist/ingest/simcity/fonts/Digitalt.otf +0 -0
- package/dist/ingest/simcity/fonts/Stanberry.ttf +0 -0
- package/dist/ingest/simcity/icons/bulldozer-color.png +0 -0
- package/dist/ingest/simcity/icons/bulldozer.png +0 -0
- package/dist/ingest/simcity/icons/calendar.png +0 -0
- package/dist/ingest/simcity/icons/factory-color.png +0 -0
- package/dist/ingest/simcity/icons/factory.png +0 -0
- package/dist/ingest/simcity/icons/house-color.png +0 -0
- package/dist/ingest/simcity/icons/house.png +0 -0
- package/dist/ingest/simcity/icons/job.png +0 -0
- package/dist/ingest/simcity/icons/office.png +0 -0
- package/dist/ingest/simcity/icons/pause-color.png +0 -0
- package/dist/ingest/simcity/icons/pause.png +0 -0
- package/dist/ingest/simcity/icons/person.png +0 -0
- package/dist/ingest/simcity/icons/play-color.png +0 -0
- package/dist/ingest/simcity/icons/play.png +0 -0
- package/dist/ingest/simcity/icons/power-color.png +0 -0
- package/dist/ingest/simcity/icons/power-line-color.png +0 -0
- package/dist/ingest/simcity/icons/power.png +0 -0
- package/dist/ingest/simcity/icons/road-color.png +0 -0
- package/dist/ingest/simcity/icons/road.png +0 -0
- package/dist/ingest/simcity/icons/select-color.png +0 -0
- package/dist/ingest/simcity/icons/select.png +0 -0
- package/dist/ingest/simcity/icons/store-color.png +0 -0
- package/dist/ingest/simcity/index.html +94 -0
- package/dist/ingest/simcity/index.js +58 -0
- package/dist/ingest/simcity/main.css +233 -0
- package/dist/ingest/simcity/models/armored-truck.glb +0 -0
- package/dist/ingest/simcity/models/building-block-4floor-corner.glb +0 -0
- package/dist/ingest/simcity/models/building-block-4floor-short.glb +0 -0
- package/dist/ingest/simcity/models/building-block-5floor.glb +0 -0
- package/dist/ingest/simcity/models/building-burger-joint.glb +0 -0
- package/dist/ingest/simcity/models/building-cafe.glb +0 -0
- package/dist/ingest/simcity/models/building-casino.glb +0 -0
- package/dist/ingest/simcity/models/building-cinema.glb +0 -0
- package/dist/ingest/simcity/models/building-house-block-big.glb +0 -0
- package/dist/ingest/simcity/models/building-house-family-large.glb +0 -0
- package/dist/ingest/simcity/models/building-house-family-small.glb +0 -0
- package/dist/ingest/simcity/models/building-office-balcony.glb +0 -0
- package/dist/ingest/simcity/models/building-office-big.glb +0 -0
- package/dist/ingest/simcity/models/building-office-pyramid.glb +0 -0
- package/dist/ingest/simcity/models/building-office-tall.glb +0 -0
- package/dist/ingest/simcity/models/building-office.glb +0 -0
- package/dist/ingest/simcity/models/building-restaurant.glb +0 -0
- package/dist/ingest/simcity/models/building-skyscraper.glb +0 -0
- package/dist/ingest/simcity/models/car-ambulance-pickup.glb +0 -0
- package/dist/ingest/simcity/models/car-baywatch.glb +0 -0
- package/dist/ingest/simcity/models/car-hippie-van.glb +0 -0
- package/dist/ingest/simcity/models/car-passenger-race.glb +0 -0
- package/dist/ingest/simcity/models/car-passenger.glb +0 -0
- package/dist/ingest/simcity/models/car-police.glb +0 -0
- package/dist/ingest/simcity/models/car-taxi.glb +0 -0
- package/dist/ingest/simcity/models/car-tow-truck.glb +0 -0
- package/dist/ingest/simcity/models/car-truck-dump.glb +0 -0
- package/dist/ingest/simcity/models/car-veteran.glb +0 -0
- package/dist/ingest/simcity/models/construction-small.glb +0 -0
- package/dist/ingest/simcity/models/data-center.glb +0 -0
- package/dist/ingest/simcity/models/industry-factory-old.glb +0 -0
- package/dist/ingest/simcity/models/industry-factory.glb +0 -0
- package/dist/ingest/simcity/models/industry-refinery.glb +0 -0
- package/dist/ingest/simcity/models/industry-warehouse.glb +0 -0
- package/dist/ingest/simcity/models/power_line_pole_modified.glb +0 -0
- package/dist/ingest/simcity/models/tile-plain_grass.glb +0 -0
- package/dist/ingest/simcity/models/tile-road-curve.glb +0 -0
- package/dist/ingest/simcity/models/tile-road-end.glb +0 -0
- package/dist/ingest/simcity/models/tile-road-intersection-t.glb +0 -0
- package/dist/ingest/simcity/models/tile-road-intersection.glb +0 -0
- package/dist/ingest/simcity/models/tile-road-straight.glb +0 -0
- package/dist/ingest/simcity/models/truck.glb +0 -0
- package/dist/ingest/simcity/statusIcons/no-power.png +0 -0
- package/dist/ingest/simcity/statusIcons/no-road-access.png +0 -0
- package/dist/ingest/simcity/textures/base.png +0 -0
- package/dist/ingest/simcity/textures/grid.png +0 -0
- package/dist/ingest/simcity/textures/specular.png +0 -0
- package/dist/ingest/simcity/three-r155.module.js +51466 -0
- package/dist/ingest/simcity/vgai.game.json +20 -0
- package/dist/ingest/tanks/UPSTREAM.md +69 -0
- package/dist/ingest/tanks/index.html +214 -0
- package/dist/ingest/tanks/models/pixelTank.fbx +0 -0
- package/dist/ingest/tanks/tanks-entry.js +92 -0
- package/dist/ingest/tanks/three-r170.module.js +54571 -0
- package/dist/ingest/tanks/vgai.game.json +20 -0
- package/dist/inputmaps/default.inputmap.json +41 -0
- package/dist/jsm/libs/draco/gltf/draco_decoder.js +33 -0
- package/dist/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/dist/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
- package/dist/scenes/untitled.vscn.json +29 -0
- package/dist/textures/waternormals.jpg +0 -0
- package/dist-server/packaged.mjs +18155 -0
- package/package.json +36 -0
- package/server/asset-library-routes.ts +833 -0
- package/server/canonical-path.ts +50 -0
- package/server/cloud-asset-catalog.ts +101 -0
- package/server/dev.ts +350 -0
- package/server/editor-server.ts +1537 -0
- package/server/editor-sse.ts +73 -0
- package/server/game-globals-shadow.ts +58 -0
- package/server/local-asset-catalog.ts +163 -0
- package/server/packaged.ts +571 -0
- package/server/prod.ts +75 -0
- package/server/project-optimize-deps-entries.ts +149 -0
- package/server/project-view.ts +65 -0
- package/server/server-utils.ts +430 -0
- package/server/session-registry.ts +93 -0
- package/src/EditorContext.tsx +87 -0
- package/src/achieved-tier.ts +126 -0
- package/src/action-registry.ts +268 -0
- package/src/adapter-resolver.ts +1858 -0
- package/src/asset-events.ts +100 -0
- package/src/authoring/active-adapter.ts +98 -0
- package/src/authoring/active-systems.ts +50 -0
- package/src/authoring/boundary-authoring-adapter.ts +178 -0
- package/src/authoring/composite-authoring-adapter.ts +891 -0
- package/src/authoring/design-time-layers.ts +776 -0
- package/src/authoring/edit-mode-authoring.ts +643 -0
- package/src/authoring/embed-only-adapter.ts +57 -0
- package/src/authoring/ephemeral-persistence.ts +26 -0
- package/src/authoring/eyedropper-session.ts +69 -0
- package/src/authoring/first-party-hierarchy-menu.ts +74 -0
- package/src/authoring/first-party-inspector/AddSectionMenu.tsx +118 -0
- package/src/authoring/first-party-inspector/EnvironmentSection.tsx +550 -0
- package/src/authoring/first-party-inspector/HeaderSection.tsx +329 -0
- package/src/authoring/first-party-inspector/is-first-party-selection.ts +44 -0
- package/src/authoring/first-party-inspector/register.tsx +108 -0
- package/src/authoring/ingest-authoring-adapter.ts +475 -0
- package/src/authoring/ingest-capture.ts +94 -0
- package/src/authoring/ingest-game-adapter.ts +291 -0
- package/src/authoring/ingest-iframe-adapter.ts +38 -0
- package/src/authoring/ingest-iframe-reachable-adapter.ts +401 -0
- package/src/authoring/ingest-overlay.ts +193 -0
- package/src/authoring/layered-pick.ts +87 -0
- package/src/authoring/mount-failure-report.ts +112 -0
- package/src/authoring/overlay-report.ts +52 -0
- package/src/authoring/project-scenes.ts +111 -0
- package/src/authoring/react-dom-authoring-adapter.ts +795 -0
- package/src/authoring/react-inspector-section.tsx +1041 -0
- package/src/authoring/react-world-authoring-adapter.ts +2400 -0
- package/src/authoring/root-activation.ts +61 -0
- package/src/authoring/scene-ui-layer.ts +485 -0
- package/src/authoring/story-overlay.ts +48 -0
- package/src/authoring/ui-authoring-adapter.ts +325 -0
- package/src/authoring/ui-hierarchy-menu.ts +40 -0
- package/src/authoring/ui-inspector-sections.tsx +156 -0
- package/src/authoring/undo-timeline.ts +145 -0
- package/src/authoring/vgai-scene-authoring-adapter.ts +746 -0
- package/src/authoring/viewport-pick-context.ts +31 -0
- package/src/authoring/viewport-raycast.ts +80 -0
- package/src/authoring/world-overlay.ts +76 -0
- package/src/authoring/world-pan-state.ts +115 -0
- package/src/authoring/world-session-state.ts +102 -0
- package/src/authoring/world2d-authoring-adapter.ts +313 -0
- package/src/browser-external-watch.ts +98 -0
- package/src/browser-play-entry.ts +112 -0
- package/src/browser-project-scripts.ts +112 -0
- package/src/browser-transpile.ts +246 -0
- package/src/browser-watch-reload.ts +100 -0
- package/src/command-listener.ts +326 -0
- package/src/components/AlignToolbar.tsx +189 -0
- package/src/components/AppRoot.tsx +73 -0
- package/src/components/AssetBrowser.tsx +502 -0
- package/src/components/BottomPanel.tsx +326 -0
- package/src/components/BuildPanel.tsx +455 -0
- package/src/components/CameraInfo.tsx +56 -0
- package/src/components/CommandPalette.tsx +265 -0
- package/src/components/ConsolePanel.tsx +272 -0
- package/src/components/DataPanel.tsx +1268 -0
- package/src/components/DefaultEditorLayout.tsx +509 -0
- package/src/components/FolderTree.tsx +179 -0
- package/src/components/GameHierarchy.tsx +1349 -0
- package/src/components/Inspector.tsx +671 -0
- package/src/components/InspectorToolSection.tsx +74 -0
- package/src/components/MountFailureBanner.tsx +110 -0
- package/src/components/NetworkSection.tsx +109 -0
- package/src/components/OnlineAssetBrowser.tsx +448 -0
- package/src/components/OverlayReportBanner.tsx +122 -0
- package/src/components/PlayBar.tsx +356 -0
- package/src/components/PrefabSaveDialog.tsx +201 -0
- package/src/components/ProjectHeader.tsx +174 -0
- package/src/components/ProjectScreen.tsx +1004 -0
- package/src/components/RightPanel.tsx +166 -0
- package/src/components/RootActivateDialog.tsx +105 -0
- package/src/components/SaveDialog.tsx +197 -0
- package/src/components/SaveStatus.tsx +69 -0
- package/src/components/StatsOverlay.tsx +35 -0
- package/src/components/ToolHost.tsx +80 -0
- package/src/components/Toolbar.tsx +307 -0
- package/src/components/ViewportOverlay.tsx +234 -0
- package/src/components/ViewportPanel.tsx +369 -0
- package/src/components/WorldContextMenu.tsx +257 -0
- package/src/components/WorldSelectionOverlay.tsx +2003 -0
- package/src/components/WorldTextEditor.tsx +86 -0
- package/src/components/asset-viewers/AssetViewer.tsx +38 -0
- package/src/components/asset-viewers/AudioViewer.tsx +149 -0
- package/src/components/asset-viewers/GenericJsonViewer.tsx +77 -0
- package/src/components/asset-viewers/ImageViewer.tsx +65 -0
- package/src/components/asset-viewers/InputMapViewer.tsx +206 -0
- package/src/components/asset-viewers/ModelViewer.tsx +180 -0
- package/src/components/asset-viewers/OnlineAssetDetail.tsx +236 -0
- package/src/components/data-csv.ts +301 -0
- package/src/components/entity-name-commit.ts +18 -0
- package/src/components/inspector-property-grouping.ts +65 -0
- package/src/components/inspector-widgets/AlignmentGrid.tsx +188 -0
- package/src/components/inspector-widgets/BorderEditor.tsx +305 -0
- package/src/components/inspector-widgets/ColorPicker.tsx +548 -0
- package/src/components/inspector-widgets/FilterEditor.tsx +108 -0
- package/src/components/inspector-widgets/FontPicker.tsx +196 -0
- package/src/components/inspector-widgets/GradientEditor.tsx +277 -0
- package/src/components/inspector-widgets/ScrubbableInput.tsx +152 -0
- package/src/components/inspector-widgets/ShadowEditor.tsx +332 -0
- package/src/components/inspector-widgets/color-utils.ts +202 -0
- package/src/components/inspector-widgets/gallery-main.tsx +167 -0
- package/src/components/inspector-widgets/index.ts +22 -0
- package/src/components/inspector-widgets/shared.tsx +135 -0
- package/src/components/inspectors/AnimationSection.tsx +143 -0
- package/src/components/inspectors/AudioSection.tsx +215 -0
- package/src/components/inspectors/BoneAttachmentSection.tsx +82 -0
- package/src/components/inspectors/CameraSection.tsx +105 -0
- package/src/components/inspectors/ComponentsSection.tsx +358 -0
- package/src/components/inspectors/JointsSection.tsx +255 -0
- package/src/components/inspectors/LightSection.tsx +116 -0
- package/src/components/inspectors/MaterialSection.tsx +1189 -0
- package/src/components/inspectors/MeshSection.tsx +99 -0
- package/src/components/inspectors/NavigationSection.tsx +58 -0
- package/src/components/inspectors/ParticleSection.tsx +681 -0
- package/src/components/inspectors/PhysicsSection.tsx +326 -0
- package/src/components/inspectors/PostProcessingSection.tsx +1290 -0
- package/src/components/inspectors/RenderingSection.tsx +109 -0
- package/src/components/inspectors/ShadowSection.tsx +84 -0
- package/src/components/inspectors/SplineSection.tsx +191 -0
- package/src/components/inspectors/TransformSection.tsx +191 -0
- package/src/components/inspectors/json-schema-fields.ts +281 -0
- package/src/components/inspectors/multi-edit-utils.ts +49 -0
- package/src/components/inspectors/zod-fields.ts +184 -0
- package/src/components/primitives/ColorInput.tsx +109 -0
- package/src/components/primitives/JsonInput.tsx +98 -0
- package/src/components/primitives/NumberInput.tsx +164 -0
- package/src/components/primitives/Panel.tsx +68 -0
- package/src/components/primitives/SectionHeader.tsx +45 -0
- package/src/components/primitives/Tooltip.tsx +82 -0
- package/src/components/primitives/Vec3Input.tsx +62 -0
- package/src/components/world-overlay-gestures.ts +1438 -0
- package/src/doctor/data-checks.ts +285 -0
- package/src/doctor/report.ts +386 -0
- package/src/editor-api.ts +700 -0
- package/src/editor-console.ts +194 -0
- package/src/editor-hotkeys.ts +441 -0
- package/src/editor-layers.ts +2 -0
- package/src/editor-mode.ts +28 -0
- package/src/editor-store.ts +2225 -0
- package/src/editor-viewport.ts +1924 -0
- package/src/entity-factory.ts +221 -0
- package/src/game-globals-prelude.ts +27 -0
- package/src/gated-globals.ts +131 -0
- package/src/generated/setup-by-example.generated.ts +53 -0
- package/src/gizmo-registry.ts +608 -0
- package/src/handle-system.ts +221 -0
- package/src/hierarchy-menu-registry.ts +70 -0
- package/src/hierarchy-rows.ts +73 -0
- package/src/hosted-example.ts +160 -0
- package/src/hotkeys.ts +142 -0
- package/src/ingest/discovery-react.ts +132 -0
- package/src/ingest/discovery.ts +205 -0
- package/src/ingest/discovery2d.ts +204 -0
- package/src/ingest/esm-entry-resolution.ts +102 -0
- package/src/ingest/games/bloom-composer/game.js +99 -0
- package/src/ingest/games/bloom-composer/vgai.game.json +21 -0
- package/src/ingest/games/embed-bundle/embed.html +10 -0
- package/src/ingest/games/embed-bundle/vgai.game.json +21 -0
- package/src/ingest/games/games-fps/assets/collision-world.glb +0 -0
- package/src/ingest/games/games-fps/game.js +479 -0
- package/src/ingest/games/games-fps/vgai.game.json +24 -0
- package/src/ingest/games/iframe-reachable/game-source.js +58 -0
- package/src/ingest/games/iframe-reachable/vgai.game.json +21 -0
- package/src/ingest/games/interactive-cubes/game.js +139 -0
- package/src/ingest/games/interactive-cubes/vgai.game.json +21 -0
- package/src/ingest/games/mismatched-three/fake-three.js +38 -0
- package/src/ingest/games/mismatched-three/game.js +10 -0
- package/src/ingest/games/mismatched-three/vgai.game.json +22 -0
- package/src/ingest/games/own-three-bundled/game.js +43 -0
- package/src/ingest/games/own-three-bundled/vgai.game.json +21 -0
- package/src/ingest/games/pointerlock-maze/game.js +288 -0
- package/src/ingest/games/pointerlock-maze/vgai.game.json +22 -0
- package/src/ingest/games-2d/_fixtures/first-party-scene.scn2d.json +124 -0
- package/src/ingest/games-2d/bubbo-bubbo/vgai.game.json +25 -0
- package/src/ingest/games-2d/bunnymark/game.ts +88 -0
- package/src/ingest/games-2d/bunnymark/vgai.game.json +21 -0
- package/src/ingest/games-2d/flappy/game.ts +148 -0
- package/src/ingest/games-2d/flappy/vgai.game.json +21 -0
- package/src/ingest/games-2d/flappy-pixi/vgai.game.json +25 -0
- package/src/ingest/games-2d/puzzling-potions/vgai.game.json +25 -0
- package/src/ingest/games-2d/tilemap-camera/game.ts +115 -0
- package/src/ingest/games-2d/tilemap-camera/vgai.game.json +21 -0
- package/src/ingest/games-react/react-rpg/entry.tsx +185 -0
- package/src/ingest/games-react/react-rpg/shims.d.ts +26 -0
- package/src/ingest/games-react/react-rpg/src/ui/game-state.tsx +129 -0
- package/src/ingest/games-react/react-rpg/vgai.game.json +21 -0
- package/src/ingest/host-namespace-registry.ts +196 -0
- package/src/ingest/types.ts +127 -0
- package/src/ingest-hierarchy-rows.ts +207 -0
- package/src/ingest-mode.ts +2092 -0
- package/src/ingest-siblings.ts +466 -0
- package/src/initial-scene.ts +194 -0
- package/src/inspector-section-registry.ts +117 -0
- package/src/interactive-edit-scope.ts +34 -0
- package/src/main.tsx +23 -0
- package/src/manifest-project.ts +43 -0
- package/src/model-thumbnail.ts +156 -0
- package/src/module-mode.ts +513 -0
- package/src/navmesh-handler.ts +94 -0
- package/src/packaged-runtime.ts +49 -0
- package/src/play-mode.ts +1148 -0
- package/src/playground/main.ts +206 -0
- package/src/project-manager.ts +173 -0
- package/src/scene-diff.ts +112 -0
- package/src/scene-serializer.ts +144 -0
- package/src/scene-sync.ts +587 -0
- package/src/scene-ui-mode/active-scene-ui.ts +58 -0
- package/src/scene-ui-mode/scene-ui-palette-panel.tsx +152 -0
- package/src/scene-ui-mode/scene-ui-timeline-tab.tsx +29 -0
- package/src/scene-ui-mode/ui-prefab-dialog-host.tsx +74 -0
- package/src/scene-ui-mode/ui-prefab-hierarchy-menu.ts +49 -0
- package/src/scene-ui-mode/ui-prefab-io.ts +76 -0
- package/src/script-loader.ts +143 -0
- package/src/storage/fsa-storage.ts +55 -0
- package/src/storage/handle-storage.ts +150 -0
- package/src/storage/handle-store.ts +116 -0
- package/src/storage/http-storage.ts +137 -0
- package/src/storage/index.ts +147 -0
- package/src/storage/mem-storage.ts +135 -0
- package/src/storage/opfs-storage.ts +25 -0
- package/src/storage/paths.ts +26 -0
- package/src/storage/seed.ts +106 -0
- package/src/storage/types.ts +110 -0
- package/src/tool-loader.ts +291 -0
- package/src/ui-editor/inspector.tsx +563 -0
- package/src/ui-editor/node-ops.ts +266 -0
- package/src/ui-editor/overlay.tsx +380 -0
- package/src/ui-editor/palette.tsx +114 -0
- package/src/ui-editor/react-store.ts +78 -0
- package/src/ui-editor/timeline-panel.tsx +443 -0
- package/src/ui-editor/ui-edit-store.ts +552 -0
- package/src/ui-editor/ui-prefab.ts +95 -0
- package/src/ui-source/inspect.ts +544 -0
- package/src/ui-source/oid-transform.ts +133 -0
- package/src/ui-source/source-write-backend.ts +203 -0
- package/src/ui-source/tailwind-map.ts +174 -0
- package/src/ui-source/writer.ts +1175 -0
- package/src/widgets/index.ts +73 -0
- package/template/.claude/skills/editor/SKILL.md +252 -0
- package/template/CLAUDE.md +512 -0
- package/template/LICENSE +30 -0
- package/template/emit-schemas.ts +42 -0
- package/template/index.html +17 -0
- package/template/package.json +53 -0
- package/template/project.json +9 -0
- package/template/public/audio/ambient-arena.wav +0 -0
- package/template/public/audio/ambient-music.wav +0 -0
- package/template/public/audio/ambient-nature.wav +0 -0
- package/template/public/audio/ambient-wind.wav +0 -0
- package/template/public/inputmaps/default.inputmap.json +41 -0
- package/template/public/jsm/libs/draco/gltf/draco_decoder.js +33 -0
- package/template/public/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/template/public/jsm/libs/draco/gltf/draco_encoder.js +33 -0
- package/template/public/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
- package/template/public/scenes/default.vscn.json +43 -0
- package/template/public/scenes/untitled.vscn.json +29 -0
- package/template/public/textures/waternormals.jpg +0 -0
- package/template/server/colyseus-setup.ts +85 -0
- package/template/server/main.ts +34 -0
- package/template/server/rooms/arena-room.ts +420 -0
- package/template/server/rooms/game-room.ts +162 -0
- package/template/server/rooms.ts +15 -0
- package/template/server/tsconfig.json +19 -0
- package/template/src/data/README.md +40 -0
- package/template/src/data/assets.ts +31 -0
- package/template/src/data/tuning.data.json +5 -0
- package/template/src/data/tuning.schema.json +21 -0
- package/template/src/data/tuning.schema.ts +34 -0
- package/template/src/data/tuning.ts +24 -0
- package/template/src/main.ts +157 -0
- package/template/src/scripts/components/data-spinner.ts +45 -0
- package/template/src/scripts/components/scene-camera.ts +40 -0
- package/template/src/scripts/main.ts +94 -0
- package/template/src/scripts/registry.ts +46 -0
- package/template/src/tools/README.md +14 -0
- package/template/src/tools/example.tool.tsx +91 -0
- package/template/src/tools/spin.tool.tsx +101 -0
- package/template/src/ui/Button.tsx +27 -0
- package/template/src/ui/DefaultHud.tsx +40 -0
- package/template/src/ui/KeyHint.tsx +25 -0
- package/template/src/ui/Panel.tsx +52 -0
- package/template/src/ui/RebindPanel.tsx +129 -0
- package/template/src/ui/Slider.tsx +28 -0
- package/template/src/ui/StatusDot.tsx +22 -0
- package/template/src/ui/Toggle.tsx +19 -0
- package/template/src/ui/game-state.tsx +37 -0
- package/template/src/ui/index.ts +7 -0
- package/template/src/ui/mount-default-hud.tsx +19 -0
- package/template/src/ui/mount-ui.ts +15 -0
- package/template/tsconfig.json +36 -0
- package/template/validate-asset-content.ts +78 -0
- package/template/validate-manifest.ts +55 -0
- package/template/validate-scenes.ts +211 -0
- package/template/vgai.game.json +21 -0
- package/template/vite.config.ts +128 -0
- package/vite-plugin-example-assets.ts +60 -0
- package/vite-plugin-game-globals.ts +46 -0
- package/vite-plugin-game-static.ts +71 -0
- package/vite-plugin-project-game-static.ts +84 -0
- package/vite-plugin-react-game-static.ts +98 -0
- package/vite-plugin-react-world-provider.ts +81 -0
- package/vite-plugin-react-world-runtime.ts +76 -0
- package/vite-plugin-ui-oid.ts +561 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@editor/widgets` — the editor's widget kit + design tokens, promoted to a
|
|
3
|
+
* public export for PROJECT tools (W3 of `docs/DATA-TOOLS-DESIGN.md`, §3.4:
|
|
4
|
+
* "tools are editor citizens"). The same reference-implementation-becomes-
|
|
5
|
+
* shipped-API move as the R3F bridge: these are the editor's OWN widgets —
|
|
6
|
+
* the exact components its inspector renders — so a project tool built from
|
|
7
|
+
* them looks native to the editor and re-skins with it.
|
|
8
|
+
*
|
|
9
|
+
* Import it from a `src/tools/*.tool.tsx` file:
|
|
10
|
+
*
|
|
11
|
+
* ```tsx
|
|
12
|
+
* import { NumberInput, SectionHeader, THEME } from '@editor/widgets';
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* What's here:
|
|
16
|
+
* - **Tokens**: `THEME` (editor dark-panel palette), `FONT` / `FONT_MONO`,
|
|
17
|
+
* and the shared style helpers (`inputStyle`, `rowStyle`,
|
|
18
|
+
* `miniButtonStyle`, `toggleButtonStyle`).
|
|
19
|
+
* - **Structure**: `Panel` (titled panel container), `SectionHeader`
|
|
20
|
+
* (collapsible section title row), `Tooltip`.
|
|
21
|
+
* - **Inputs**: `NumberInput` (scrub-or-type), `Vec3Input`, `ColorInput`,
|
|
22
|
+
* `ScrubbableInput`, `ColorPicker`/`ColorSwatch`, `GradientEditor`,
|
|
23
|
+
* `FontPicker`, `AlignmentGrid`, `BorderEditor`, `ShadowEditor`,
|
|
24
|
+
* `FilterEditor`, `ToggleButton`.
|
|
25
|
+
*
|
|
26
|
+
* Contract notes:
|
|
27
|
+
* - The rich widgets share one change contract, `ChangeHandlers<T>`
|
|
28
|
+
* (`value` + `onChange` per interaction tick + optional `onChangeEnd`
|
|
29
|
+
* commit — see its doc comment).
|
|
30
|
+
* - Everything else a tool needs — layout, state, charts — is deliberately
|
|
31
|
+
* NOT API (§3.3): plain React, the project's choice.
|
|
32
|
+
* - This barrel is the ONLY sanctioned deep-import into editor source from
|
|
33
|
+
* project code. Its dependency closure is kept deliberately shallow
|
|
34
|
+
* (react + the widget files themselves) so a scaffolded project's `tsc`
|
|
35
|
+
* never drags the editor's internals along; `interactive-edit-scope.ts`
|
|
36
|
+
* exists precisely to keep `NumberInput`/`ColorInput` off `EditorContext`.
|
|
37
|
+
* Don't add re-exports here that import the editor store, adapters, or
|
|
38
|
+
* server code.
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
// --- Rich inspector widgets (spec 27 §5 C1 kit) ------------------------------
|
|
42
|
+
export * from '../components/inspector-widgets/AlignmentGrid';
|
|
43
|
+
export * from '../components/inspector-widgets/BorderEditor';
|
|
44
|
+
export * from '../components/inspector-widgets/ColorPicker';
|
|
45
|
+
export type { ColorFormat } from '../components/inspector-widgets/color-utils';
|
|
46
|
+
export * from '../components/inspector-widgets/FilterEditor';
|
|
47
|
+
export * from '../components/inspector-widgets/FontPicker';
|
|
48
|
+
export * from '../components/inspector-widgets/GradientEditor';
|
|
49
|
+
export * from '../components/inspector-widgets/ScrubbableInput';
|
|
50
|
+
export * from '../components/inspector-widgets/ShadowEditor';
|
|
51
|
+
// --- Tokens + shared helpers (the widget kit's design system) --------------
|
|
52
|
+
export {
|
|
53
|
+
type ChangeHandlers,
|
|
54
|
+
FONT,
|
|
55
|
+
FONT_MONO,
|
|
56
|
+
fireChange,
|
|
57
|
+
fireEnd,
|
|
58
|
+
inputStyle,
|
|
59
|
+
miniButtonStyle,
|
|
60
|
+
parseNumericValue,
|
|
61
|
+
rowStyle,
|
|
62
|
+
THEME,
|
|
63
|
+
ToggleButton,
|
|
64
|
+
toggleButtonStyle,
|
|
65
|
+
} from '../components/inspector-widgets/shared';
|
|
66
|
+
// --- Simple inputs (the primitives the built-in inspector uses) -------------
|
|
67
|
+
export { ColorInput } from '../components/primitives/ColorInput';
|
|
68
|
+
export { NumberInput } from '../components/primitives/NumberInput';
|
|
69
|
+
// --- Structure --------------------------------------------------------------
|
|
70
|
+
export { Panel } from '../components/primitives/Panel';
|
|
71
|
+
export { SectionHeader } from '../components/primitives/SectionHeader';
|
|
72
|
+
export { Tooltip } from '../components/primitives/Tooltip';
|
|
73
|
+
export { Vec3Input } from '../components/primitives/Vec3Input';
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
# Skill: Editor Control
|
|
2
|
+
|
|
3
|
+
Use the `vgai` CLI to create projects, launch the editor, and control it programmatically. The editor is a browser-based WebGL app; the CLI sends commands to it over HTTP.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
The CLI lives in the vgai monorepo checkout this project was scaffolded from
|
|
8
|
+
(the same checkout `@vgai/engine` symlinks back into). Build it once — plain
|
|
9
|
+
npm, no bun required (make sure the checkout root has had `npm install`):
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
cd <vgai-checkout>/packages/vgai-cli && npm run build
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Then invoke the built bundle with node — from any directory, including your
|
|
16
|
+
project (the CLI locates the engine checkout from its own file location, not
|
|
17
|
+
your cwd):
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
node <vgai-checkout>/packages/vgai-cli/dist/index.js <command>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
For a `vgai` command, add a shell alias:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
alias vgai="node <vgai-checkout>/packages/vgai-cli/dist/index.js"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Do **not** use `npm link`/`bun link`: invoked through a symlink the CLI's
|
|
30
|
+
entry-point check fails and the command exits silently doing nothing. Direct
|
|
31
|
+
`node dist/index.js` invocation (or the alias above) is the supported path.
|
|
32
|
+
|
|
33
|
+
## Quick Start
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
vgai create "My Game" # Scaffold a new project in ./my-game
|
|
37
|
+
cd my-game
|
|
38
|
+
vgai edit # Launch editor + open browser
|
|
39
|
+
vgai play # Enter play mode
|
|
40
|
+
vgai status # Check editor state
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Port cross-talk:** the default editor port (5173) is shared across every
|
|
44
|
+
vgai project on the machine. `vgai edit` never silently retargets a
|
|
45
|
+
DIFFERENT project's already-running editor — if one is already open
|
|
46
|
+
elsewhere, this one starts a second instance on a fresh free port and prints
|
|
47
|
+
that URL instead (use `--switch` to retarget the existing one on purpose).
|
|
48
|
+
If you might have another vgai project's tab open in the browser already,
|
|
49
|
+
don't assume it's this project: read the URL `vgai edit` actually prints
|
|
50
|
+
(check `vgai sessions` to see every live session's port → project), or pass
|
|
51
|
+
`vgai edit --port <n>` to pin an explicit port for this project so a stale
|
|
52
|
+
tab from a different project can't be mistaken for this session.
|
|
53
|
+
|
|
54
|
+
## Precondition: most verbs need a connected browser tab, not just `vgai edit` running
|
|
55
|
+
|
|
56
|
+
`vgai edit` starts the dev server and prints a URL — it does **not** by
|
|
57
|
+
itself give the CLI anything to talk to. Every control verb (`play`,
|
|
58
|
+
`select`, `focus`, `show`, `status`, ...) is relayed over HTTP/SSE to an
|
|
59
|
+
actual browser tab that has the editor page open and running; the dev
|
|
60
|
+
server just serves that page. Running `vgai edit` (or `vgai edit --no-open`,
|
|
61
|
+
the flag meant for headless/agent use) and then immediately calling `vgai
|
|
62
|
+
status` with **no tab ever opened** does not error — it returns the last
|
|
63
|
+
**cached** state from a previous session (or an empty default), and prints
|
|
64
|
+
a `⚠ No editor connected` warning to stderr. Read that warning: it means
|
|
65
|
+
the JSON below it is stale, not live. Before trusting `vgai status` (or
|
|
66
|
+
issuing `play`/`select`/etc. and expecting them to do anything), make sure
|
|
67
|
+
a tab is actually open on the printed URL — a real browser, or a
|
|
68
|
+
Playwright/Puppeteer page you navigated to it yourself.
|
|
69
|
+
|
|
70
|
+
**Driving the editor headlessly (e.g. from an agent or CI):**
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
vgai edit --no-open # start the dev server without launching a real browser
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
// then, in a Playwright script, open a page against the printed URL —
|
|
78
|
+
// use 'load', NOT 'networkidle': the editor dev server keeps a
|
|
79
|
+
// long-lived SSE/websocket connection open for live commands, so the
|
|
80
|
+
// network never goes idle and `waitUntil: 'networkidle'` hangs forever.
|
|
81
|
+
await page.goto('http://localhost:5173', { waitUntil: 'load' });
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Once that page has loaded, it registers as a connected client and `vgai
|
|
85
|
+
status`/`vgai play`/etc. from another shell will reach it for real.
|
|
86
|
+
|
|
87
|
+
## When to Use This Skill
|
|
88
|
+
|
|
89
|
+
- **`create` / `edit`** — bootstrap and launch projects
|
|
90
|
+
- **`play` / `stop` / `select` / `focus` / etc.** — show things to the user, control play mode
|
|
91
|
+
- You do NOT need the CLI for entity/asset/scene changes — those are just file edits (`.vscn.json` files in `public/`)
|
|
92
|
+
|
|
93
|
+
## CLI Reference
|
|
94
|
+
|
|
95
|
+
### Project Management (no running editor needed)
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
vgai create <name> [location] # Create project (default location: ./)
|
|
99
|
+
vgai create <name> [location] --template empty # Minimal empty project
|
|
100
|
+
vgai edit [project-path] # Launch editor for project (default: cwd).
|
|
101
|
+
# Reuses the session already serving THIS
|
|
102
|
+
# project; otherwise starts a NEW instance on
|
|
103
|
+
# a free port rather than silently retargeting
|
|
104
|
+
# a different project's editor (see the port
|
|
105
|
+
# cross-talk note above).
|
|
106
|
+
# --switch retarget an existing instance
|
|
107
|
+
# instead of starting a new one
|
|
108
|
+
# --port <n> force a port for a fresh instance
|
|
109
|
+
vgai sessions # List live editor sessions (port -> project)
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Scene & Project Info (needs running editor)
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
vgai scene <path> # Open a scene file (e.g. scenes/default.vscn.json)
|
|
116
|
+
vgai open <path> # Switch project in running editor
|
|
117
|
+
vgai project # Show current project info
|
|
118
|
+
vgai projects # List recent projects
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Play Control
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
vgai play # Enter play mode
|
|
125
|
+
vgai stop # Exit play mode
|
|
126
|
+
vgai pause # Pause (while playing)
|
|
127
|
+
vgai resume # Resume (while paused)
|
|
128
|
+
vgai step # Advance one frame (while paused)
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Navigation
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
vgai select <entityId> # Select an entity by ID
|
|
135
|
+
vgai select --all # Select all entities
|
|
136
|
+
vgai deselect # Clear selection
|
|
137
|
+
vgai focus <entityId> # Focus camera on a specific entity
|
|
138
|
+
vgai focus # Focus camera on current selection
|
|
139
|
+
vgai view top # Top-down camera
|
|
140
|
+
vgai view front # Front camera
|
|
141
|
+
vgai view right # Right camera
|
|
142
|
+
vgai view perspective # Default perspective camera
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Panels
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
vgai show viewport scene # Switch to Scene tab
|
|
149
|
+
vgai show viewport game # Switch to Game tab
|
|
150
|
+
vgai show inspector # Show the inspector panel
|
|
151
|
+
vgai show console # Toggle the console panel
|
|
152
|
+
vgai show build # Show the build panel
|
|
153
|
+
vgai open-asset <path> <kind> # Open an asset tab (kind: model|image|audio|scene|prefab|material|json|animation)
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Display Modes
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
vgai grid on # Show grid
|
|
160
|
+
vgai grid off # Hide grid
|
|
161
|
+
vgai helpers on # Show all helpers (lights, cameras, colliders, etc.)
|
|
162
|
+
vgai helpers off # Hide all helpers
|
|
163
|
+
vgai stats on # Show performance stats overlay
|
|
164
|
+
vgai stats off # Hide stats
|
|
165
|
+
vgai shading solid # Standard shading
|
|
166
|
+
vgai shading wireframe # Wireframe mode
|
|
167
|
+
vgai shading unlit # Unlit/flat shading
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### State
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
vgai status # Print full editor state as JSON
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
The `status` command returns:
|
|
177
|
+
- `playState` — `stopped`, `playing`, or `paused`
|
|
178
|
+
- `selectedEntityId` / `selectedEntityIds` — current selection
|
|
179
|
+
- `activeViewportTab` — `scene` or `game`
|
|
180
|
+
- `showGrid`, `showHelpers`, `showStats`, `shadingMode` — display state
|
|
181
|
+
- `transformMode`, `transformSpace`, `snapEnabled` — tool state
|
|
182
|
+
- `entityCount` — number of entities in the scene
|
|
183
|
+
- `savePath` — path to the currently open scene file
|
|
184
|
+
- `connected` — whether an editor browser tab is live right now; if
|
|
185
|
+
`false`, everything else in the payload is a cached snapshot (see the
|
|
186
|
+
precondition note above)
|
|
187
|
+
|
|
188
|
+
### Global Options
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
--url <url> # Editor URL (default: http://localhost:5173)
|
|
192
|
+
# Also: VGAI_EDITOR_URL env var
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Entity IDs
|
|
196
|
+
|
|
197
|
+
Entity IDs are UUIDs stored in `.vscn.json` scene files. To find an entity's ID:
|
|
198
|
+
|
|
199
|
+
1. Read the scene file (e.g., `public/scenes/default.vscn.json`)
|
|
200
|
+
2. Each entity object has an `"id"` field
|
|
201
|
+
3. Use that ID with `vgai select <id>` or `vgai focus <id>`
|
|
202
|
+
|
|
203
|
+
## Typical Workflows
|
|
204
|
+
|
|
205
|
+
### Start a new project from scratch
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
vgai create "My Platformer"
|
|
209
|
+
cd my-platformer
|
|
210
|
+
vgai edit
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Show the user an entity you just created/modified
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
# After editing a .vscn.json file:
|
|
217
|
+
vgai select <entity-id>
|
|
218
|
+
vgai focus <entity-id>
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Test gameplay
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
vgai play
|
|
225
|
+
# ... observe behavior ...
|
|
226
|
+
vgai stop
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Debug a specific view angle
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
vgai view top
|
|
233
|
+
vgai shading wireframe
|
|
234
|
+
vgai helpers on
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## SDK (Programmatic Access)
|
|
238
|
+
|
|
239
|
+
For TypeScript automation, use `@vgai/editor-sdk` directly:
|
|
240
|
+
|
|
241
|
+
```typescript
|
|
242
|
+
import { EditorClient } from '@vgai/editor-sdk';
|
|
243
|
+
|
|
244
|
+
const editor = new EditorClient(); // default: http://localhost:5173
|
|
245
|
+
await editor.play();
|
|
246
|
+
const state = await editor.getState();
|
|
247
|
+
await editor.select(state.selectedEntityId);
|
|
248
|
+
await editor.focusSelection();
|
|
249
|
+
await editor.stop();
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
The `EditorClient` has the same methods as the CLI: `play()`, `stop()`, `pause()`, `resume()`, `step()`, `select()`, `selectAll()`, `focusEntity()`, `focusSelection()`, `viewPreset()`, `showViewport()`, `showInspector()`, `setGrid()`, `setHelpers()`, `setShadingMode()`, `getState()`, `waitForState()`, `createProject()`, `openProject()`, `getProject()`, `listRecentProjects()`, etc.
|