@volter/editor-game 0.5.65 → 0.5.67
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/contributions/audio-unlock.service.ts +2 -2
- package/contributions/autoplay.service.ts +1 -1
- package/contributions/bridge.command.ts +3 -3
- package/contributions/canvas/component-board.service.ts +16 -0
- package/contributions/canvas/design-time-mount.service.ts +45 -0
- package/contributions/canvas-story-capture.service.ts +12 -0
- package/contributions/edit-mode-audio.service.ts +2 -2
- package/contributions/edit-mode-networking.service.ts +1 -1
- package/contributions/gameplay.command.ts +4 -4
- package/contributions/generation.service.ts +3 -3
- package/contributions/generations.status.tsx +1 -1
- package/contributions/godot.palette.json +99 -0
- package/contributions/godot.style.ts +82 -0
- package/contributions/godot.view.ts +75 -0
- package/contributions/ingest.service.ts +4 -4
- package/contributions/instances.command.ts +1 -1
- package/contributions/navmesh.menu.ts +1 -1
- package/contributions/network-observer.service.ts +14 -0
- package/contributions/play.command.ts +11 -5
- package/contributions/react/component-board.service.ts +1 -1
- package/contributions/react/design-time-mount.service.ts +1 -1
- package/contributions/react/react-inspector.service.ts +2 -2
- package/contributions/scene-document.service.ts +5 -5
- package/contributions/state-watch.menu.ts +1 -1
- package/contributions/state-watch.utility.tsx +1 -1
- package/contributions/team-playtest.service.ts +4 -4
- package/contributions/three/component-board.service.ts +1 -1
- package/contributions/three/component-verbs.command.ts +8 -8
- package/contributions/three/three-authoring.service.ts +8 -5
- package/contributions/three-story-capture.service.ts +12 -0
- package/contributions/unity.palette.json +102 -0
- package/contributions/unity.style.ts +72 -0
- package/contributions/unity.view.ts +82 -0
- package/contributions/unreal.palette.json +105 -0
- package/contributions/unreal.style.ts +66 -0
- package/contributions/unreal.view.ts +93 -0
- package/dist-node/serving.mjs +16 -0
- package/package.json +33 -16
- package/serving/index.ts +27 -0
- package/src/asset-budget/AssetBudgetPanel.tsx +1 -1
- package/src/asset-budget/asset-budget-model.ts +4 -4
- package/src/asset-budget/optimize-apply.ts +7 -7
- package/src/audio/AudioDebuggerPanel.tsx +1 -1
- package/src/bridge/dispatch.ts +16 -16
- package/src/bridge/live-frames.ts +1 -1
- package/src/bridge/screenshot.ts +6 -6
- package/src/build/BuildProfilesPanel.tsx +3 -3
- package/src/canvas/canvas-board/CanvasBoardDocument.tsx +676 -0
- package/src/canvas/canvas-board/canvas-board-model.ts +407 -0
- package/src/canvas/canvas-board/canvas-component-board.ts +56 -0
- package/src/canvas/canvas-design-mount.ts +524 -0
- package/src/canvas/design-time-canvas-mount.ts +79 -0
- package/src/coverage/live-authoring-surface.ts +6 -6
- package/src/coverage/live-project-verbs.ts +2 -2
- package/src/coverage/native-system-coverage.ts +6 -6
- package/src/coverage/root-coverage.ts +1 -1
- package/src/coverage/session-coverage.ts +5 -5
- package/src/design-system-stories/ApplicationChrome.stories.tsx +5 -5
- package/src/design-system-stories/InspectorNarrowBodies.stories.tsx +13 -53
- package/src/edit-mode/edit-mode-audio.ts +4 -4
- package/src/edit-mode/edit-mode-networking.ts +2 -2
- package/src/game-document/GameCaptureFrameButton.tsx +2 -2
- package/src/game-document/GameDocument.tsx +2 -2
- package/src/game-document/GamePanel.tsx +8 -8
- package/src/game-document/InstanceInspectorPicker.tsx +2 -2
- package/src/game-document/crowd-debug.ts +1 -1
- package/src/game-document/device-preview.ts +10 -11
- package/src/game-document/physics-debug.ts +1 -1
- package/src/generation/GenerationActivity.tsx +6 -8
- package/src/generation/generation-documents.tsx +8 -8
- package/src/generation/generation-jobs.ts +2 -2
- package/src/generation/generation-presentation.ts +1 -1
- package/src/host/adapter-reach.ts +1 -1
- package/src/host/adapter-runtime-bindings.ts +97 -6
- package/src/host/api/configurations.ts +2 -2
- package/src/host/authoring/babylon-authoring-adapter.ts +8 -8
- package/src/host/authoring/contract-hierarchy-authoring.ts +1 -1
- package/src/host/authoring/contract-scenes-stories.ts +1 -1
- package/src/host/authoring/creation-site-related.ts +2 -2
- package/src/host/authoring/ephemeral-persistence.ts +1 -1
- package/src/host/authoring/gesture-persist.ts +2 -2
- package/src/host/authoring/ingest-data-writer.ts +1 -1
- package/src/host/authoring/ingest-source-persistence.ts +8 -8
- package/src/host/authoring/mount-isolated-pixi-screen.ts +1 -1
- package/src/host/authoring/mounted-authoring.ts +4 -4
- package/src/host/authoring/phaser-live-authoring-adapter.ts +4 -4
- package/src/host/authoring/pixi-authoring-adapter.ts +42 -17
- package/src/host/authoring/pixi-creation-site-write-target.ts +2 -2
- package/src/host/authoring/pixi-live-write-target.ts +7 -7
- package/src/host/authoring/pixi-source-identity.ts +3 -3
- package/src/host/authoring/pixi-source-write-target.ts +1614 -0
- package/src/host/authoring/pixi-still-presentation.ts +2 -2
- package/src/host/authoring/pixi-structure-history.ts +3 -3
- package/src/host/authoring/pixi-transform-channels.ts +16 -14
- package/src/host/authoring/source-persistence-backend.ts +6 -6
- package/src/host/authoring/struct-write-pipe.ts +3 -3
- package/src/host/binding-resolver.ts +8 -9
- package/src/host/browser-transpile.ts +2 -2
- package/src/host/canvas-entry-runtime.ts +59 -48
- package/src/host/canvas-preview-frames.ts +482 -0
- package/src/host/components/CameraAuthoringOverlay.tsx +1 -1
- package/src/host/components/HeaderTelemetry.tsx +9 -16
- package/src/host/components/PixiIsolationSceneContent.tsx +17 -16
- package/src/host/components/ThreeIsolationSceneContent.tsx +5 -5
- package/src/host/components/frame-debugger-model.ts +2 -2
- package/src/host/components/header-telemetry-model.ts +2 -2
- package/src/host/components/scene-document.tsx +29 -61
- package/src/host/components/utility-view-state.ts +1 -1
- package/src/host/components/world-root-stage-binding.tsx +17 -26
- package/src/host/components/world-root-stage.ts +130 -63
- package/src/host/coverage/capability-coverage.ts +13 -1
- package/src/host/coverage/game-contract-seam-evidence.ts +1 -1
- package/src/host/coverage/project-verb-coverage.ts +2 -17
- package/src/host/coverage/system-adapter-coverage.ts +4 -5
- package/src/host/design-system-stories/fixtures/editor-runtime.tsx +14 -8
- package/src/host/document-preview-three.ts +2 -2
- package/src/host/entry-adjudication.ts +6 -6
- package/src/host/game-css-scope-transform.ts +4 -0
- package/src/host/game-module-access.ts +1 -1
- package/src/host/game-realm-page.ts +16 -8
- package/src/host/game-realm-reclaim.ts +1 -1
- package/src/host/gameplay-export.ts +25 -14
- package/src/host/gameplay-recording.ts +5 -5
- package/src/host/gated-globals.ts +6 -6
- package/src/host/history/json-history-resource.ts +3 -3
- package/src/host/instance-extract-actions.ts +1 -1
- package/src/host/instance-fork-actions.ts +1 -1
- package/src/host/projection/dom.ts +2 -2
- package/src/host/projection/pixi.ts +25 -3
- package/src/host/r3f-entry-runtime.ts +65 -34
- package/src/host/react-mount-runtime.ts +8 -49
- package/src/host/realm-services.ts +2 -2
- package/src/host/roots/canvas-root.tsx +361 -0
- package/src/host/roots/module-root.ts +1 -1
- package/src/host/roots/r3f-root.tsx +473 -0
- package/src/host/roots/react-root.ts +9 -43
- package/src/host/scene-view-drawability.ts +2 -2
- package/src/host/served-bundle-runtime-modules.ts +1 -19
- package/src/host/server-log-bridge.ts +3 -3
- package/src/host/stories/mounted-story-viewport-source.ts +1 -1
- package/src/host/stories/pixi-story-model.ts +30 -0
- package/src/host/stories/story-media-captures.ts +46 -0
- package/src/host/stories/story-media-presence.ts +3 -3
- package/src/host/stories/story-pixi-preview.ts +408 -0
- package/src/host/stories/story-three-preview.ts +806 -0
- package/src/host/stories/three-story-captures.ts +35 -0
- package/src/host/story-three-preview-runtime.ts +56 -0
- package/src/host/three-ingest-runtime.ts +1 -1
- package/src/host/use-active-performance-source.ts +3 -3
- package/src/host/viewport-pose-memory.ts +1 -1
- package/src/host/viewport-root-presentation.ts +6 -5
- package/src/ingest/active-ingest.ts +2 -2
- package/src/ingest/authoring/ingest-dom-surface-authoring.ts +4 -4
- package/src/ingest/authoring/ingest-root-adapter.ts +13 -13
- package/src/ingest/capture-wait-report.ts +1 -1
- package/src/ingest/deferred-ingest-play.ts +11 -10
- package/src/ingest/discovery-public-ingest.ts +2 -2
- package/src/ingest/ingest-boot-viewport.ts +6 -8
- package/src/ingest/ingest-canvas-scene-document.tsx +17 -16
- package/src/ingest/ingest-canvas-scene.ts +5 -8
- package/src/ingest/ingest-evidence-hook.ts +1 -1
- package/src/ingest/ingest-frame-snapshot.ts +1 -1
- package/src/ingest/ingest-play-control.ts +4 -4
- package/src/ingest/ingest-render-debug.ts +11 -11
- package/src/ingest/ingest-siblings.ts +16 -28
- package/src/ingest/module-mode.ts +18 -19
- package/src/ingest/mount-canvas-ingest-root.ts +27 -27
- package/src/ingest/mount-coverage.ts +4 -4
- package/src/ingest/mount-dom-ingest-root.ts +16 -16
- package/src/ingest/mount-ingest-root.ts +14 -14
- package/src/ingest/mount-three-ingest-root.ts +12 -12
- package/src/ingest/resolve-canvas.ts +1 -1
- package/src/ingest/served-html-boot.ts +1 -1
- package/src/ingest/surface-canvas.ts +1 -1
- package/src/ingest/unmount-ingest-root.ts +7 -7
- package/src/navmesh/navmesh-handler.ts +24 -16
- package/src/network/NetworkInspectorPanel.tsx +449 -14
- package/src/network/network-inspector-model.ts +14 -2
- package/src/play/play-log-events.ts +1 -1
- package/src/play/play-mode.ts +99 -142
- package/src/play/play-recording.ts +2 -2
- package/src/play/react-play-live-authoring.ts +3 -3
- package/src/play/run-selection.ts +93 -0
- package/src/play-bar/PlayBar.tsx +20 -39
- package/src/profiler/FrameDebuggerPanel.tsx +1 -1
- package/src/profiler/PerformancePanel.tsx +4 -4
- package/src/react/design-time-react-mount.ts +37 -85
- package/src/react/dom-authoring-adapter.ts +11 -11
- package/src/react/react-inspector-section.tsx +13 -13
- package/src/react/react-world-authoring-adapter.ts +31 -143
- package/src/react/story-documents/story-documents.tsx +18 -22
- package/src/react/ui-board-document.tsx +10 -11
- package/src/react/ui-component-board.ts +5 -5
- package/src/runtime/adapter/audio-meter.ts +21 -0
- package/src/runtime/adapter/first-party-audio-system.ts +230 -0
- package/src/runtime/adapter/ingest/contract-debug-adapter.ts +114 -0
- package/src/runtime/adapter/ingest/contract-system-adapters.ts +256 -0
- package/src/runtime/adapter/ingest/merge-debug-adapters.ts +197 -0
- package/src/runtime/adapter/ingest/observation-debug-adapter.ts +162 -0
- package/src/runtime/adapter/ingest/upstream-pin.ts +51 -0
- package/src/runtime/adapter/native-debug-module.ts +498 -0
- package/src/runtime/audio/bus-mixer.ts +161 -0
- package/src/runtime/audio/pose-guard.ts +80 -0
- package/src/runtime/core/frame-pacing.ts +126 -0
- package/src/runtime/core/game-loop.ts +225 -0
- package/src/runtime/core/game-scoped-slot.ts +28 -0
- package/src/runtime/core/seeded-random.ts +162 -0
- package/src/runtime/core/sim-clock.ts +391 -0
- package/src/runtime/core/system-runner.ts +269 -0
- package/src/runtime/core/types.ts +104 -0
- package/src/runtime/create-runtime.ts +1128 -0
- package/src/runtime/debug-bridge.ts +570 -0
- package/src/runtime/debug-registry.ts +899 -0
- package/src/runtime/dev/chrome-trace.ts +153 -0
- package/src/runtime/dev/instruments.ts +403 -0
- package/src/runtime/dev/logger.ts +119 -0
- package/src/runtime/dev/performance-profiler.ts +367 -0
- package/src/runtime/dev/register-render-vitals.ts +276 -0
- package/src/runtime/dev/render-census.ts +354 -0
- package/src/runtime/dev/render-debug-adapter.ts +218 -0
- package/src/runtime/dev/render-memory.ts +226 -0
- package/src/runtime/dev/render-vitals.ts +338 -0
- package/src/runtime/dev/static-batch-advisor.ts +188 -0
- package/src/runtime/dev/webgl-frame-capture.ts +366 -0
- package/src/runtime/dev/webgl-gpu-timer.ts +53 -0
- package/src/runtime/dev-build.ts +47 -0
- package/src/runtime/game.ts +1636 -0
- package/src/runtime/gameplay-rng-trap.ts +135 -0
- package/src/runtime/host-context.ts +64 -0
- package/src/runtime/input-router.ts +169 -0
- package/src/runtime/mount-manifest.ts +480 -0
- package/src/runtime/pixi/authoring.ts +706 -0
- package/src/runtime/pixi/ingest.ts +116 -0
- package/src/runtime/pixi/physics-registry.ts +49 -0
- package/src/runtime/pixi/render-pass-bracket.ts +117 -0
- package/src/runtime/pixi/scene-capture.ts +179 -0
- package/src/runtime/pixi/system-adapters.ts +69 -0
- package/src/runtime/playtest.ts +22 -0
- package/src/runtime/presentation.ts +141 -0
- package/src/runtime/render-control.ts +642 -0
- package/src/runtime/render-seed.ts +77 -0
- package/src/runtime/run-ticks-settled.ts +73 -0
- package/src/runtime/setup/setup-audio.ts +72 -0
- package/src/services/audio-pose-guard.ts +2 -2
- package/src/services/game-audio.ts +152 -0
- package/src/services/game-network.ts +657 -0
- package/src/services/game-physics.ts +334 -0
- package/src/state-watch/StateWatchPanel.tsx +1 -1
- package/src/three/authoring/camera-runtime-inspector-section.tsx +4 -3
- package/src/three/authoring/constraint-inspector-section.tsx +8 -7
- package/src/three/authoring/model-asset-inspector-section.tsx +14 -17
- package/src/three/authoring/oid-source-persistence.ts +13 -13
- package/src/three/authoring/r3f-design-session.ts +79 -61
- package/src/three/authoring/r3f-source-authoring-adapter.ts +112 -108
- package/src/three/authoring/reflection-probe-inspector-section.tsx +5 -4
- package/src/three/authoring/spatial-joint-handles.ts +1 -1
- package/src/three/authoring/spatial-lod-handles.ts +1 -1
- package/src/three/authoring/spatial-particle-handles.ts +1 -1
- package/src/three/authoring/three-authoring-adapter.ts +33 -33
- package/src/three/component-verbs/extract-menu.ts +8 -7
- package/src/three/component-verbs/fork-menu.ts +8 -7
- package/src/three/component-verbs/internals-menu.ts +3 -3
- package/src/three/drei-asset-caches.ts +13 -0
- package/src/three/story-documents/three-story-documents.tsx +24 -34
- package/src/three/three-board/ThreeBoardDocument.tsx +25 -25
- package/src/three/three-board/board-scene.ts +7 -7
- package/src/three/three-board/three-component-board.ts +5 -5
- package/contributions/react/pasteboard.action.ts +0 -41
- package/contributions/xstate-behavior.action.ts +0 -42
- package/contributions/xstate-behavior.document.tsx +0 -73
- package/contributions/xstate-behavior.inspector.tsx +0 -28
- package/contributions/xstate-behavior.menu.ts +0 -23
- package/src/react/pasteboard-materialize.ts +0 -154
- package/src/services/game-audio-unlock.ts +0 -48
- package/src/xstate/XStateBehaviorSection.tsx +0 -130
- package/src/xstate/XStateMachineInspector.tsx +0 -566
- package/src/xstate/character-animation-machine.fixture.ts +0 -74
- package/src/xstate/live-behaviors.ts +0 -106
- package/src/xstate/use-live-actor-state.ts +0 -44
- package/src/xstate/xstate-graph.ts +0 -235
- package/src/xstate/xstate-layout.ts +0 -76
|
@@ -29,16 +29,16 @@
|
|
|
29
29
|
* subject, and it is the HUMAN-facing sentence that has to be a union.
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
|
-
import { mountedRootSubjects } from '@volter/editor-
|
|
32
|
+
import { mountedRootSubjects } from '@volter/editor-sdk/kit/authoring/mounted-root-subjects';
|
|
33
33
|
import {
|
|
34
34
|
type CoveragePart,
|
|
35
35
|
formatCapabilityCoverageBlocks,
|
|
36
36
|
unionCoverageReport,
|
|
37
37
|
} from '../host/coverage/capability-coverage';
|
|
38
|
-
import { editorConsole } from '@volter/editor-
|
|
39
|
-
import { editorIsPlaying } from '@volter/editor-
|
|
40
|
-
import { projectAdapterFacet } from '@volter/editor-
|
|
41
|
-
import { getCurrentProject } from '@volter/editor-
|
|
38
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
39
|
+
import { editorIsPlaying } from '@volter/editor-sdk/kit/editor-session-mode';
|
|
40
|
+
import { projectAdapterFacet } from '@volter/editor-sdk/kit/project-adapter';
|
|
41
|
+
import { getCurrentProject } from '@volter/editor-sdk/kit/active-project';
|
|
42
42
|
import { authoringSurfaceCoverage } from './live-authoring-surface';
|
|
43
43
|
import { projectVerbCoverage } from './live-project-verbs';
|
|
44
44
|
import { nativeSystemCoverage } from './native-system-coverage';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { ensureCoreUtilitiesRegistered } from '@volter/editor-
|
|
2
|
-
import { ProjectHeader } from '@volter/editor-
|
|
3
|
-
import { ensureCoreStatusContributionsRegistered } from '@volter/editor-
|
|
1
|
+
import { ensureCoreUtilitiesRegistered } from '@volter/editor-sdk/kit/components/core-utilities';
|
|
2
|
+
import { ProjectHeader } from '@volter/editor-sdk/kit/components/ProjectHeader';
|
|
3
|
+
import { ensureCoreStatusContributionsRegistered } from '@volter/editor-sdk/kit/components/status-contributions';
|
|
4
4
|
import {
|
|
5
5
|
installStoryWorkspaceUtilityController,
|
|
6
6
|
StoryEditorRuntime,
|
|
7
7
|
} from '../host/design-system-stories/fixtures/editor-runtime';
|
|
8
8
|
import { DesignSystemPage, StorySection } from '../host/design-system-stories/StoryLayout';
|
|
9
|
-
import { useEditorStore } from '@volter/editor-
|
|
10
|
-
import { getCurrentProject, setActiveProject } from '@volter/editor-
|
|
9
|
+
import { useEditorStore } from '@volter/editor-sdk/kit/editor-runtime';
|
|
10
|
+
import { getCurrentProject, setActiveProject } from '@volter/editor-sdk/kit/active-project';
|
|
11
11
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
12
12
|
import { useLayoutEffect, useState } from 'react';
|
|
13
13
|
// The transport is `@volter/editor-game`'s; this gallery story shows its view over
|
|
@@ -14,9 +14,6 @@
|
|
|
14
14
|
* subject wrapping them is synthetic (a live react/DOM subject needs a
|
|
15
15
|
* running document session + OID index, not constructible in a bounded
|
|
16
16
|
* story).
|
|
17
|
-
* - State machine — the REAL `XStateMachineInspector` over the REAL
|
|
18
|
-
* `characterAnimationMachine` fixture. Fully real; no live actor is needed
|
|
19
|
-
* (the static graph view is the design-time state).
|
|
20
17
|
* - Ingest coverage — the REAL `ingestCoverageSection(deriveCapabilityCoverage(…))`
|
|
21
18
|
* section, the exact one the Game Inspector composes.
|
|
22
19
|
* - Typed-three groups — a REAL composed subject: `AuthoringInspectorSurface`
|
|
@@ -30,21 +27,21 @@
|
|
|
30
27
|
*/
|
|
31
28
|
|
|
32
29
|
import { UNCAPTURED_REACH } from '../host/adapter-reach';
|
|
33
|
-
import { SourceObject3DAuthoringAdapter } from '@volter/editor-
|
|
34
|
-
import {
|
|
30
|
+
import { SourceObject3DAuthoringAdapter } from '@volter/editor-threejs/kit/authoring/source-object3d-authoring-adapter';
|
|
31
|
+
import { faPalette } from '@fortawesome/free-solid-svg-icons';
|
|
35
32
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
36
33
|
import { type ReactNode, useState } from 'react';
|
|
37
34
|
import * as THREE from 'three';
|
|
38
35
|
// Side-effect: registers the model-asset section contributions (Geometry,
|
|
39
36
|
// Animation, Materials, Source) into the inspector-section registry.
|
|
40
|
-
import '
|
|
41
|
-
import { ingestCoverageSection } from '@volter/editor-
|
|
42
|
-
import { InspectionProjectionView } from '@volter/editor-
|
|
43
|
-
import { AuthoringInspectorSurface } from '@volter/editor-
|
|
37
|
+
import '../three/authoring/model-asset-inspector-section';
|
|
38
|
+
import { ingestCoverageSection } from '@volter/editor-sdk/kit/CapabilityCoverageSection';
|
|
39
|
+
import { InspectionProjectionView } from '@volter/editor-sdk/kit/components/InspectionProjection';
|
|
40
|
+
import { AuthoringInspectorSurface } from '@volter/editor-sdk/kit/components/Inspector';
|
|
44
41
|
import { deriveCapabilityCoverage } from '../host/coverage/capability-coverage';
|
|
45
42
|
import { createAuthoringFixture } from '../host/design-system-stories/fixtures/authoring';
|
|
46
|
-
import { StoryEditorRuntime } from '../host/design-system-stories/fixtures/editor-runtime';
|
|
47
|
-
import type { InspectionSection, InspectionSubject } from '@volter/editor-
|
|
43
|
+
import { StoryEditorRuntime, storyThreeStore } from '../host/design-system-stories/fixtures/editor-runtime';
|
|
44
|
+
import type { InspectionSection, InspectionSubject } from '@volter/editor-sdk/kit/inspection-model';
|
|
48
45
|
import {
|
|
49
46
|
AlignmentGrid,
|
|
50
47
|
type AlignmentValue,
|
|
@@ -65,8 +62,6 @@ import {
|
|
|
65
62
|
uniformBorder,
|
|
66
63
|
uniformRadius,
|
|
67
64
|
} from '@volter/editor-sdk/widgets';
|
|
68
|
-
import { characterAnimationMachine } from '../xstate/character-animation-machine.fixture';
|
|
69
|
-
import { XStateMachineInspector } from '../xstate/XStateMachineInspector';
|
|
70
65
|
|
|
71
66
|
/** The narrow column's target width. `overflow: hidden` so a body that was
|
|
72
67
|
* built wider than the rail SPILLS visibly instead of scrolling. */
|
|
@@ -208,28 +203,6 @@ const cssSubject = columnSubject({
|
|
|
208
203
|
],
|
|
209
204
|
});
|
|
210
205
|
|
|
211
|
-
// ---- State machine (real inspector + real fixture machine) ---------------
|
|
212
|
-
|
|
213
|
-
const stateMachineSubject = columnSubject({
|
|
214
|
-
id: 'asset:character-animation',
|
|
215
|
-
title: 'Character Animation',
|
|
216
|
-
kindLabel: 'State machine',
|
|
217
|
-
sections: [
|
|
218
|
-
customSection(
|
|
219
|
-
'state-machine',
|
|
220
|
-
'State machine',
|
|
221
|
-
faBrain,
|
|
222
|
-
4000,
|
|
223
|
-
<div style={{ height: 300, minHeight: 0 }}>
|
|
224
|
-
<XStateMachineInspector
|
|
225
|
-
machine={characterAnimationMachine}
|
|
226
|
-
currentStateId="character-animation.idle"
|
|
227
|
-
/>
|
|
228
|
-
</div>,
|
|
229
|
-
),
|
|
230
|
-
],
|
|
231
|
-
});
|
|
232
|
-
|
|
233
206
|
// ---- Ingest coverage (the real composed section) -------------------------
|
|
234
207
|
|
|
235
208
|
const coverageReport = deriveCapabilityCoverage({
|
|
@@ -295,7 +268,7 @@ const coverageSubject = columnSubject({
|
|
|
295
268
|
|
|
296
269
|
/** A real THREE model scene → the source-object3d model adapter, the same
|
|
297
270
|
* fixture the model-asset workflow exercises. */
|
|
298
|
-
function buildModelAdapter(store:
|
|
271
|
+
function buildModelAdapter(store: ConstructorParameters<typeof SourceObject3DAuthoringAdapter>[0]) {
|
|
299
272
|
const scene = new THREE.Scene();
|
|
300
273
|
const root = new THREE.Group();
|
|
301
274
|
root.name = 'Ship';
|
|
@@ -337,20 +310,7 @@ export const CssEditorsColumn: Story = {
|
|
|
337
310
|
),
|
|
338
311
|
};
|
|
339
312
|
|
|
340
|
-
/** (2) The real
|
|
341
|
-
export const StateMachineColumn: Story = {
|
|
342
|
-
render: () => (
|
|
343
|
-
<RailColumn>
|
|
344
|
-
<InspectionProjectionView
|
|
345
|
-
subject={stateMachineSubject}
|
|
346
|
-
presentation="column"
|
|
347
|
-
surface="asset-lab"
|
|
348
|
-
/>
|
|
349
|
-
</RailColumn>
|
|
350
|
-
),
|
|
351
|
-
};
|
|
352
|
-
|
|
353
|
-
/** (3) The real ingest coverage section. */
|
|
313
|
+
/** (2) The real ingest coverage section. */
|
|
354
314
|
export const IngestCoverageColumn: Story = {
|
|
355
315
|
render: () => (
|
|
356
316
|
<RailColumn>
|
|
@@ -359,7 +319,7 @@ export const IngestCoverageColumn: Story = {
|
|
|
359
319
|
),
|
|
360
320
|
};
|
|
361
321
|
|
|
362
|
-
/** (
|
|
322
|
+
/** (3) Typed-three grouped descriptor bodies — a real composed mesh subject
|
|
363
323
|
* (Material / Gameplay groups + loose fields). */
|
|
364
324
|
export const TypedThreeGroupsColumn: Story = {
|
|
365
325
|
render: () => {
|
|
@@ -382,13 +342,13 @@ export const TypedThreeGroupsColumn: Story = {
|
|
|
382
342
|
},
|
|
383
343
|
};
|
|
384
344
|
|
|
385
|
-
/** (
|
|
345
|
+
/** (4) Model-asset sections — a real composed subject (Geometry / Animation /
|
|
386
346
|
* Materials / Source) from a hand-authored THREE scene. */
|
|
387
347
|
export const ModelAssetColumn: Story = {
|
|
388
348
|
render: () => (
|
|
389
349
|
<StoryEditorRuntime>
|
|
390
350
|
{(runtime) => {
|
|
391
|
-
const adapter = buildModelAdapter(runtime
|
|
351
|
+
const adapter = buildModelAdapter(storyThreeStore(runtime));
|
|
392
352
|
return (
|
|
393
353
|
<RailColumn>
|
|
394
354
|
<AuthoringInspectorSurface
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* while Play is active; on Stop, `getActiveAudio()` falls back to this graph.
|
|
7
7
|
*
|
|
8
8
|
* It lives in `@volter/editor-game` because it IS the engine's audio runtime — the
|
|
9
|
-
* mixer, the bus graph and the pose guard behind `@volter/game
|
|
9
|
+
* mixer, the bus graph and the pose guard behind `@volter/editor-game/runtime/setup/setup-audio` —
|
|
10
10
|
* and the host was installing all of it at boot for every project, including a
|
|
11
11
|
* models project that plays nothing and has no sound (WORK.md §The open-source
|
|
12
12
|
* launch, phase 1 unit 7). The one host surface that reads it, the header
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
* unit 2. Same shape as `edit-mode-networking.ts` beside it.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { setEditModeAudio } from '@volter/editor-
|
|
18
|
+
import { setEditModeAudio } from '@volter/editor-sdk/kit/authoring/active-systems';
|
|
19
19
|
import {
|
|
20
20
|
createAudioSystemAdapter,
|
|
21
21
|
releaseAudioMeters,
|
|
22
|
-
} from '
|
|
23
|
-
import { setupAudio } from '
|
|
22
|
+
} from '../runtime/adapter/first-party-audio-system';
|
|
23
|
+
import { setupAudio } from '../runtime/setup/setup-audio';
|
|
24
24
|
import * as THREE from 'three';
|
|
25
25
|
|
|
26
26
|
export function installEditModeAudio(camera: THREE.Camera = new THREE.Camera()): () => void {
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
* active; on Stop, `getActiveNetworking()` falls back to this one.
|
|
31
31
|
*/
|
|
32
32
|
|
|
33
|
-
import { setEditModeNetworking } from '@volter/editor-
|
|
34
|
-
import { getCurrentProject } from '@volter/editor-
|
|
33
|
+
import { setEditModeNetworking } from '@volter/editor-sdk/kit/authoring/active-systems';
|
|
34
|
+
import { getCurrentProject } from '@volter/editor-sdk/kit/active-project';
|
|
35
35
|
import type {
|
|
36
36
|
ConnectionState,
|
|
37
37
|
NetPeer,
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* host module: the host imports no package (WORKBENCH.md §The invariants), so
|
|
11
11
|
* the button stays on this side of the line with the store and model it reads.
|
|
12
12
|
*/
|
|
13
|
-
import { getInspectedRenderDebug } from '@volter/editor-
|
|
14
|
-
import { useAvailabilitySelector } from '@volter/editor-
|
|
13
|
+
import { getInspectedRenderDebug } from '@volter/editor-sdk/kit/authoring/active-systems';
|
|
14
|
+
import { useAvailabilitySelector } from '@volter/editor-sdk/kit/availability-tick';
|
|
15
15
|
import { deriveRenderDebugCapabilities } from '../host/components/frame-debugger-model';
|
|
16
16
|
import { profilerView } from '../host/components/utility-view-state';
|
|
17
17
|
import { Button } from '@volter/editor-sdk/widgets';
|
|
@@ -12,8 +12,8 @@ import { PlayBar } from '../play-bar/PlayBar';
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import { ResolutionPicker } from '../host/components/ResolutionPicker';
|
|
15
|
-
import { useEditorStore } from '@volter/editor-
|
|
16
|
-
import { getCurrentProject, onProjectChange } from '@volter/editor-
|
|
15
|
+
import { useEditorStore } from '@volter/editor-sdk/kit/editor-runtime';
|
|
16
|
+
import { getCurrentProject, onProjectChange } from '@volter/editor-sdk/kit/active-project';
|
|
17
17
|
import type { LiveDocumentContentProps } from '@volter/editor-sdk/host';
|
|
18
18
|
import {
|
|
19
19
|
AnchoredMenu,
|
|
@@ -13,21 +13,21 @@
|
|
|
13
13
|
import {
|
|
14
14
|
getMountFailureReports,
|
|
15
15
|
subscribeToMountFailures,
|
|
16
|
-
} from '@volter/editor-
|
|
17
|
-
import { SurfaceStateOverlay } from '@volter/editor-
|
|
18
|
-
import { editorConsole } from '@volter/editor-
|
|
19
|
-
import { useEditorStore } from '@volter/editor-
|
|
20
|
-
import { getCurrentProject, onProjectChange } from '@volter/editor-
|
|
21
|
-
import { readinessFacet, subscribeRootReadiness } from '@volter/editor-
|
|
16
|
+
} from '@volter/editor-sdk/kit/mount-failure-report';
|
|
17
|
+
import { SurfaceStateOverlay } from '@volter/editor-sdk/kit/components/SurfaceStateOverlay';
|
|
18
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
19
|
+
import { useEditorStore } from '@volter/editor-sdk/kit/editor-runtime';
|
|
20
|
+
import { getCurrentProject, onProjectChange } from '@volter/editor-sdk/kit/active-project';
|
|
21
|
+
import { readinessFacet, subscribeRootReadiness } from '@volter/editor-sdk/kit/readiness';
|
|
22
22
|
import { domHasRenderableContent } from '../host/surface-content';
|
|
23
|
-
import { explainSurface } from '@volter/editor-
|
|
23
|
+
import { explainSurface } from '@volter/editor-sdk/kit/surface-state';
|
|
24
24
|
import { editorHost } from '@volter/editor-sdk/host';
|
|
25
25
|
import { themeVars } from '@volter/editor-sdk/widgets';
|
|
26
26
|
import {
|
|
27
27
|
fitPresentation,
|
|
28
28
|
type PresentedSize,
|
|
29
29
|
resolvePresentedSize,
|
|
30
|
-
} from '
|
|
30
|
+
} from '../runtime/presentation';
|
|
31
31
|
import {
|
|
32
32
|
type ReactNode,
|
|
33
33
|
useCallback,
|
|
@@ -4,8 +4,8 @@ import {
|
|
|
4
4
|
inspectedInstanceVersion,
|
|
5
5
|
setInspectedInstance,
|
|
6
6
|
subscribeInspectedInstance,
|
|
7
|
-
} from '@volter/editor-
|
|
8
|
-
import { useEditorStore } from '@volter/editor-
|
|
7
|
+
} from '@volter/editor-sdk/kit/authoring/active-systems';
|
|
8
|
+
import { useEditorStore } from '@volter/editor-sdk/kit/editor-runtime';
|
|
9
9
|
import { gameRealmDiagnostics } from '../host/gated-globals';
|
|
10
10
|
import { faEye } from '@fortawesome/free-solid-svg-icons';
|
|
11
11
|
import {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* the active-document debug-control pattern there.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
import { getActiveSystems } from '@volter/editor-
|
|
16
|
+
import { getActiveSystems } from '@volter/editor-sdk/kit/authoring/active-systems';
|
|
17
17
|
import type { NavCrowdAgentState } from '@volter/editor-project/adapter';
|
|
18
18
|
import { setUserData } from '@volter/threejs-runtime/ecs/user-data';
|
|
19
19
|
import * as THREE from 'three';
|
|
@@ -27,14 +27,13 @@
|
|
|
27
27
|
* game registered (raw canvas listeners, gated `window`/`document`
|
|
28
28
|
* listeners via `gated-globals.ts` — the clone bubbles to the real window
|
|
29
29
|
* exactly like the original would, so the T6.3 input gate still applies)
|
|
30
|
-
* sees touch.
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* than sequenced input, and hover-dependent logic that breaks on device
|
|
30
|
+
* sees touch. A game listening for compatibility `mouse*` events on
|
|
31
|
+
* `window` still hears them: the browser still fires them (we never
|
|
32
|
+
* `preventDefault()` the pointer event). Fidelity limits, recorded: real
|
|
33
|
+
* mobile fires compat mousedown/up AFTER a tap completes and never streams
|
|
34
|
+
* hover mousemove — here a game sees desktop-timed mouse events alongside
|
|
35
|
+
* the touch clones, so games mixing pointer handlers with mouse state get
|
|
36
|
+
* simultaneous rather than sequenced input, and hover-dependent logic that breaks on device
|
|
38
37
|
* still works in emulation. No `TouchEvent` (`touchstart`/`touchmove`)
|
|
39
38
|
* synthesis (Chrome device mode does synthesize these) — raw-touch-event
|
|
40
39
|
* games see nothing. A game capture-phase window/document pointer
|
|
@@ -47,7 +46,7 @@
|
|
|
47
46
|
* everyone who opens it.
|
|
48
47
|
*/
|
|
49
48
|
|
|
50
|
-
import { projectSettings, updateProjectSettings } from '@volter/editor-
|
|
49
|
+
import { projectSettings, updateProjectSettings } from '@volter/editor-sdk/kit/settings-store';
|
|
51
50
|
|
|
52
51
|
export type DevicePresetKind = 'fit' | 'phone' | 'tablet' | 'desktop';
|
|
53
52
|
|
|
@@ -253,8 +252,8 @@ function interceptPointer(e: Event): void {
|
|
|
253
252
|
// listeners, gated window/document listeners) …
|
|
254
253
|
e.stopImmediatePropagation();
|
|
255
254
|
// … and deliver the identical gesture as touch. Compat mouse events are
|
|
256
|
-
// deliberately NOT suppressed (no preventDefault):
|
|
257
|
-
//
|
|
255
|
+
// deliberately NOT suppressed (no preventDefault): a game listening for
|
|
256
|
+
// window `mouse*` keeps working, exactly as on a real
|
|
258
257
|
// mobile browser where compat mouse events accompany touches.
|
|
259
258
|
const clone = new PointerEvent(e.type, {
|
|
260
259
|
bubbles: true,
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* destroyed, so nothing leaks into the next session.
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
|
-
import { getActiveSystems } from '@volter/editor-
|
|
26
|
+
import { getActiveSystems } from '@volter/editor-sdk/kit/authoring/active-systems';
|
|
27
27
|
import { nodeKeyedPhysics, type PhysicsAdapter } from '@volter/editor-project/adapter';
|
|
28
28
|
import { setUserData } from '@volter/threejs-runtime/ecs/user-data';
|
|
29
29
|
import * as THREE from 'three';
|
|
@@ -12,12 +12,11 @@ import { faFile, faFileLines, faTriangleExclamation } from '@fortawesome/free-so
|
|
|
12
12
|
import type { GenerationJob } from '@volter/editor-sdk/generations';
|
|
13
13
|
import { useState, useSyncExternalStore } from 'react';
|
|
14
14
|
import './GenerationGallery.css';
|
|
15
|
-
import { assetCapabilities, assetDocumentKind } from '@volter/editor-
|
|
16
|
-
import { openAssetDocument } from '@volter/editor-
|
|
17
|
-
import { AudioAssetThumb, ModelThumbnail } from '@volter/editor-
|
|
18
|
-
import { editorConsole } from '@volter/editor-
|
|
19
|
-
import {
|
|
20
|
-
import { modelThumbnailFormat } from '@volter/editor-core/model-thumbnail';
|
|
15
|
+
import { assetCapabilities, assetDocumentKind } from '@volter/editor-sdk/kit/asset-capabilities';
|
|
16
|
+
import { openAssetDocument } from '@volter/editor-sdk/kit/components/asset-documents';
|
|
17
|
+
import { AudioAssetThumb, ModelThumbnail } from '@volter/editor-sdk/kit/components/asset-thumbnails';
|
|
18
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
19
|
+
import { modelThumbnailFormat } from '@volter/editor-threejs/kit/model-thumbnail';
|
|
21
20
|
import {
|
|
22
21
|
Button,
|
|
23
22
|
EditorBadge,
|
|
@@ -238,7 +237,6 @@ function GenerationCard({
|
|
|
238
237
|
error: string | null;
|
|
239
238
|
run: (action: () => Promise<void>) => void;
|
|
240
239
|
}) {
|
|
241
|
-
const store = useEditorStore();
|
|
242
240
|
const state = generationCardState(job);
|
|
243
241
|
const outputs = generationOutputs(job);
|
|
244
242
|
const prompt = generationPrompt(job);
|
|
@@ -247,7 +245,7 @@ function GenerationCard({
|
|
|
247
245
|
if (!output.url) return undefined;
|
|
248
246
|
const kind = assetDocumentKind(assetCapabilities(output.name));
|
|
249
247
|
if (!kind) return undefined;
|
|
250
|
-
return () => openAssetDocument(
|
|
248
|
+
return () => openAssetDocument(output.url as string, kind);
|
|
251
249
|
};
|
|
252
250
|
|
|
253
251
|
return (
|
|
@@ -6,26 +6,26 @@ import {
|
|
|
6
6
|
accountVersion,
|
|
7
7
|
contributionAccount,
|
|
8
8
|
subscribeAccount,
|
|
9
|
-
} from '@volter/editor-
|
|
10
|
-
import { toolContributionSurfaces } from '@volter/editor-
|
|
11
|
-
import { ToolErrorBoundary } from '@volter/editor-
|
|
12
|
-
import { openToolDocument } from '@volter/editor-
|
|
9
|
+
} from '@volter/editor-sdk/kit/account-client';
|
|
10
|
+
import { toolContributionSurfaces } from '@volter/editor-sdk/kit/components/ToolContributionSurfaces';
|
|
11
|
+
import { ToolErrorBoundary } from '@volter/editor-sdk/kit/components/ToolHost';
|
|
12
|
+
import { openToolDocument } from '@volter/editor-sdk/kit/components/tool-documents';
|
|
13
13
|
import {
|
|
14
14
|
subscribeToolContributionPlay,
|
|
15
15
|
toolContributionPlay,
|
|
16
16
|
toolContributionPlayKey,
|
|
17
|
-
} from '@volter/editor-
|
|
17
|
+
} from '@volter/editor-sdk/kit/tool-contribution-play';
|
|
18
18
|
import {
|
|
19
19
|
getGenerationResultContribution,
|
|
20
20
|
getGlobalToolContributions,
|
|
21
21
|
getToolContributionClient,
|
|
22
22
|
subscribeToolContributions,
|
|
23
|
-
} from '@volter/editor-
|
|
23
|
+
} from '@volter/editor-sdk/kit/tool-loader';
|
|
24
24
|
import {
|
|
25
25
|
closeWorkspaceDocument,
|
|
26
26
|
openWorkspaceDocument,
|
|
27
27
|
type WorkspaceDocumentContentProps,
|
|
28
|
-
} from '@volter/editor-
|
|
28
|
+
} from '@volter/editor-sdk/kit/workspace-document-registry';
|
|
29
29
|
import { Button, TextInput } from '@volter/editor-sdk/widgets';
|
|
30
30
|
import {
|
|
31
31
|
acceptGenerationJob,
|
|
@@ -134,7 +134,7 @@ export function GenerationCreateDocumentContent() {
|
|
|
134
134
|
variant="ghost"
|
|
135
135
|
className="vgai-generation-create-card"
|
|
136
136
|
key={contribution.id}
|
|
137
|
-
onClick={() => openToolDocument(
|
|
137
|
+
onClick={() => openToolDocument(contribution.id)}
|
|
138
138
|
>
|
|
139
139
|
<strong>{contribution.title}</strong>
|
|
140
140
|
<span>{contribution.tool?.summary}</span>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { assertEditorServerResponse, editorServerJson } from '@volter/editor-
|
|
2
|
-
import { runProjectTool } from '@volter/editor-
|
|
1
|
+
import { assertEditorServerResponse, editorServerJson } from '@volter/editor-sdk/kit/editor-server-response';
|
|
2
|
+
import { runProjectTool } from '@volter/editor-sdk/kit/project-tools';
|
|
3
3
|
import type { GenerationJob, GenerationJobsDocument } from '@volter/editor-sdk/generations';
|
|
4
4
|
|
|
5
5
|
const EMPTY: GenerationJobsDocument = { version: 1, jobs: [] };
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* plus the small amount of text (state, model, charge) that frames them.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import { ASSET_ROOTS, assetRootServingUrl } from '@volter/editor-
|
|
10
|
+
import { ASSET_ROOTS, assetRootServingUrl } from '@volter/editor-sdk/kit/project-asset-roots';
|
|
11
11
|
import type { GenerationBilling, GenerationJob } from '@volter/editor-sdk/generations';
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -55,7 +55,7 @@ import { probeAuthoringReads } from './coverage/authoring-read-probe';
|
|
|
55
55
|
import {
|
|
56
56
|
authoringAdapterEpoch,
|
|
57
57
|
inspectAuthoringAdapterSeams,
|
|
58
|
-
} from '@volter/editor-
|
|
58
|
+
} from '@volter/editor-sdk/kit/authoring-seam-evidence';
|
|
59
59
|
|
|
60
60
|
/** Re-exported so consumers of a coverage row need one import, not two. */
|
|
61
61
|
export type { AuthoringProviderKey };
|
|
@@ -8,15 +8,15 @@
|
|
|
8
8
|
import {
|
|
9
9
|
installNativeDebugBindings,
|
|
10
10
|
installNativeSystemsBindings,
|
|
11
|
-
} from '
|
|
12
|
-
import { publishDevInstruments } from '
|
|
11
|
+
} from '../runtime/adapter/native-debug-module';
|
|
12
|
+
import { publishDevInstruments } from '../runtime/dev/instruments';
|
|
13
13
|
import {
|
|
14
14
|
DebugError,
|
|
15
15
|
type DebugRegistry,
|
|
16
16
|
type DebugVirtualInputTarget,
|
|
17
17
|
getDebugRegistry,
|
|
18
|
-
} from '
|
|
19
|
-
import type { Game } from '
|
|
18
|
+
} from '../runtime/debug-registry';
|
|
19
|
+
import type { Game } from '../runtime/game';
|
|
20
20
|
import {
|
|
21
21
|
ADAPTER_INPUT_VALUE_TYPES,
|
|
22
22
|
type AdapterInputAction,
|
|
@@ -26,7 +26,13 @@ import {
|
|
|
26
26
|
type ObservationDeclaration,
|
|
27
27
|
} from '@volter/editor-project/adapter/adapter-module';
|
|
28
28
|
import type { ObservationBinding } from '@volter/editor-project/adapter/binding';
|
|
29
|
-
import { adapterInputBinding, adapterObservations } from '@volter/editor-
|
|
29
|
+
import { adapterInputBinding, adapterObservations } from '@volter/editor-sdk/kit/adapter-observation';
|
|
30
|
+
import { observedGameAudio } from '../services/game-audio';
|
|
31
|
+
import { observedGameNetwork } from '../services/game-network';
|
|
32
|
+
import { observedRapierPhysics, rapierContextFor } from '../services/game-physics';
|
|
33
|
+
import { projectDependencyNames, projectVerbFacts } from '../coverage/live-project-verbs';
|
|
34
|
+
import type * as THREE from 'three';
|
|
35
|
+
import type { NativeSystemsBinding } from '@volter/editor-project/adapter/native-entry-surface';
|
|
30
36
|
|
|
31
37
|
const ADAPTER_REGISTRATION_ID = '__adapter__';
|
|
32
38
|
const installedGames = new WeakSet<Game>();
|
|
@@ -52,6 +58,88 @@ function entryBindings<K extends 'entryDebug' | 'entrySystems'>(
|
|
|
52
58
|
return out;
|
|
53
59
|
}
|
|
54
60
|
|
|
61
|
+
/**
|
|
62
|
+
* A game that says nothing about its audio is heard through the editor's observer of the
|
|
63
|
+
* page's Web Audio (`services/game-audio.ts`), on every root, so each world's pause gate and the
|
|
64
|
+
* editor's mute reach the one page-wide adapter. A game whose roots declare audio, or its
|
|
65
|
+
* absence, has spoken for it and gets no observer beside its own.
|
|
66
|
+
*/
|
|
67
|
+
function withObservedAudio(game: Game, bindings: NativeSystemsBinding[]): NativeSystemsBinding[] {
|
|
68
|
+
if (bindings.some((binding) => binding.slots.audio || binding.absent.some((slot) => slot.slot === 'audio'))) {
|
|
69
|
+
return bindings;
|
|
70
|
+
}
|
|
71
|
+
return game.roots.map((root) => {
|
|
72
|
+
const own = bindings.find((binding) => binding.rootId === root.id);
|
|
73
|
+
return { rootId: root.id, slots: { ...own?.slots, audio: observedGameAudio }, absent: own?.absent ?? [] };
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** The libraries whose presence says a project joins Colyseus rooms. */
|
|
78
|
+
const COLYSEUS_CLIENT_LIBRARIES = ['@colyseus/sdk', 'colyseus.js'];
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* A game that says nothing about its networking, and ships a Colyseus client, is inspected
|
|
82
|
+
* through the editor's observer of the page's room sockets (`services/game-network.ts`), on its
|
|
83
|
+
* first root: the page has one set of sockets, and the inspector reads one adapter. A game that
|
|
84
|
+
* declares networking, or its absence, has spoken for it; a project known to ship no Colyseus
|
|
85
|
+
* client gets nothing that pretends.
|
|
86
|
+
*/
|
|
87
|
+
function withObservedNetworking(game: Game, bindings: NativeSystemsBinding[]): NativeSystemsBinding[] {
|
|
88
|
+
const declared = bindings.some(
|
|
89
|
+
(binding) => binding.slots.networking || binding.absent.some((slot) => slot.slot === 'networking'),
|
|
90
|
+
);
|
|
91
|
+
// While the project's dependency list is still loading the answer is unknown, not no (Play
|
|
92
|
+
// starts that read and mounts in the same breath), so the observer is attached; it answers
|
|
93
|
+
// `disconnected` until the game joins a room.
|
|
94
|
+
projectVerbFacts();
|
|
95
|
+
const dependencies = projectDependencyNames();
|
|
96
|
+
const shipsClient = dependencies === null || dependencies.some((name) => COLYSEUS_CLIENT_LIBRARIES.includes(name));
|
|
97
|
+
const first = game.roots[0];
|
|
98
|
+
if (declared || !shipsClient || !first) return bindings;
|
|
99
|
+
const index = bindings.findIndex((binding) => binding.rootId === first.id);
|
|
100
|
+
const own = index >= 0 ? bindings[index] : undefined;
|
|
101
|
+
const binding: NativeSystemsBinding = {
|
|
102
|
+
rootId: first.id,
|
|
103
|
+
slots: { ...own?.slots, networking: observedGameNetwork },
|
|
104
|
+
absent: own?.absent ?? [],
|
|
105
|
+
};
|
|
106
|
+
const out = [...bindings];
|
|
107
|
+
if (index >= 0) out[index] = binding;
|
|
108
|
+
else out.push(binding);
|
|
109
|
+
return out;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** The libraries whose presence says a project simulates Rapier physics. */
|
|
113
|
+
const RAPIER_LIBRARIES = ['@react-three/rapier', '@dimforge/rapier3d-compat'];
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* A three world that declares no physics, and whose own mount carries none, is edited through
|
|
117
|
+
* the editor's observer of its `@react-three/rapier` world (`services/game-physics.ts`) when the
|
|
118
|
+
* world has one: a `<Physics>` already mounted, or a project that ships Rapier (its provider
|
|
119
|
+
* mounts only once the WASM loads). A world with neither gets nothing that pretends. While the
|
|
120
|
+
* project's dependency list is still loading (`projectVerbFacts` starts that read) the answer is
|
|
121
|
+
* unknown, not no, so the observer is attached; it answers `unresolved` until a world mounts.
|
|
122
|
+
*/
|
|
123
|
+
export function withObservedPhysics(game: Game, bindings: NativeSystemsBinding[]): NativeSystemsBinding[] {
|
|
124
|
+
projectVerbFacts();
|
|
125
|
+
const dependencies = projectDependencyNames();
|
|
126
|
+
const shipsRapier = dependencies === null || dependencies.some((name) => RAPIER_LIBRARIES.includes(name));
|
|
127
|
+
const out = [...bindings];
|
|
128
|
+
for (const root of game.roots) {
|
|
129
|
+
if (root.mounted.kind !== 'three' || root.mounted.systems?.physics) continue;
|
|
130
|
+
const index = out.findIndex((binding) => binding.rootId === root.id);
|
|
131
|
+
const own = index >= 0 ? out[index] : undefined;
|
|
132
|
+
if (own && (own.slots.physics || own.absent.some((slot) => slot.slot === 'physics'))) continue;
|
|
133
|
+
const scene = root.mounted.scene as THREE.Object3D;
|
|
134
|
+
if (!shipsRapier && !rapierContextFor(scene)) continue;
|
|
135
|
+
const physics = observedRapierPhysics(scene);
|
|
136
|
+
const binding: NativeSystemsBinding = { rootId: root.id, slots: { ...own?.slots, physics }, absent: own?.absent ?? [] };
|
|
137
|
+
if (index >= 0) out[index] = binding;
|
|
138
|
+
else out.push(binding);
|
|
139
|
+
}
|
|
140
|
+
return out;
|
|
141
|
+
}
|
|
142
|
+
|
|
55
143
|
function installObservations(
|
|
56
144
|
game: Game,
|
|
57
145
|
registry: DebugRegistry,
|
|
@@ -275,7 +363,10 @@ function installInput(game: Game, registry: DebugRegistry, binding: AdapterInput
|
|
|
275
363
|
export function installAdapterRuntimeBindings(game: Game): void {
|
|
276
364
|
if (installedGames.has(game)) return;
|
|
277
365
|
installNativeDebugBindings(game, entryBindings(game, 'entryDebug'));
|
|
278
|
-
installNativeSystemsBindings(
|
|
366
|
+
installNativeSystemsBindings(
|
|
367
|
+
game,
|
|
368
|
+
withObservedNetworking(game, withObservedPhysics(game, withObservedAudio(game, entryBindings(game, 'entrySystems')))),
|
|
369
|
+
);
|
|
279
370
|
// The engine's universal instruments (time scale, pause/frame-step,
|
|
280
371
|
// collider draw, frame time) — HOST-published, so every game gets them for
|
|
281
372
|
// zero lines and no in-world mount. The disposer is deliberately dropped:
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* verbs the transport's picker and `vgai run` share.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { assertEditorServerResponse, editorServerJson } from '@volter/editor-
|
|
8
|
-
import { BASE } from '@volter/editor-
|
|
7
|
+
import { assertEditorServerResponse, editorServerJson } from '@volter/editor-sdk/kit/editor-server-response';
|
|
8
|
+
import { BASE } from '@volter/editor-sdk/kit/api-base';
|
|
9
9
|
|
|
10
10
|
export interface ConfigurationStatus {
|
|
11
11
|
readonly id: string;
|