@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
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
* neither matters to a project that plays nothing.
|
|
8
8
|
*/
|
|
9
9
|
import { installAudioPoseGuard } from '../src/services/audio-pose-guard';
|
|
10
|
-
import {
|
|
10
|
+
import { installGameAudio } from '../src/services/game-audio';
|
|
11
11
|
|
|
12
12
|
export const point = 'workspace.service';
|
|
13
13
|
|
|
14
14
|
export function start(): void {
|
|
15
|
-
|
|
15
|
+
installGameAudio();
|
|
16
16
|
installAudioPoseGuard();
|
|
17
17
|
}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* It reports its failure to the editor console — `vgai console` is what reads
|
|
16
16
|
* it — rather than leaving a stopped surface with no reason on it.
|
|
17
17
|
*/
|
|
18
|
-
import { onShellStore } from '@volter/editor-
|
|
18
|
+
import { onShellStore } from '@volter/editor-sdk/kit/shell-store-door';
|
|
19
19
|
import { editorHost } from '@volter/editor-sdk/host';
|
|
20
20
|
import { enterPlayMode } from '../src/play/play-mode';
|
|
21
21
|
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
* imports when they move. Nothing here is host API.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
import { getActiveSystems } from '@volter/editor-
|
|
24
|
+
import { getActiveSystems } from '@volter/editor-sdk/kit/authoring/active-systems';
|
|
25
25
|
import {
|
|
26
26
|
activeGameplayRecordingTimeline,
|
|
27
27
|
startGameplayRecording,
|
|
28
28
|
stopGameplayRecording,
|
|
29
29
|
} from '../src/host/gameplay-recording';
|
|
30
|
-
import { captureGameplayReplay, exportGameplayReplay } from '@volter/editor-
|
|
30
|
+
import { captureGameplayReplay, exportGameplayReplay } from '@volter/editor-sdk/kit/gameplay-replay';
|
|
31
31
|
import type { CommandContribution } from '@volter/editor-sdk/commands';
|
|
32
32
|
import { handleBridgeCall } from '../src/bridge/call';
|
|
33
33
|
import { hasLiveDebugPlane } from '../src/bridge/dispatch';
|
|
@@ -140,7 +140,7 @@ export const commands: CommandContribution['commands'] = {
|
|
|
140
140
|
appendGameplayRecordingChunk,
|
|
141
141
|
finishGameplayRecordingSink,
|
|
142
142
|
abortGameplayRecordingSink,
|
|
143
|
-
} = await import('@volter/editor-
|
|
143
|
+
} = await import('@volter/editor-sdk/kit/editor-api');
|
|
144
144
|
const sink = await beginGameplayRecordingSink({
|
|
145
145
|
startedAt: new Date().toISOString(),
|
|
146
146
|
mimeType: 'video/webm',
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE CANVAS MEDIUM'S COMPONENT BOARD (`@volter/editor-sdk/services`, a
|
|
3
|
+
* `workspace.service` contribution): `@volter/editor-game`'s canvas medium tells the host's component
|
|
4
|
+
* board registry that this project's `canvas` stories have a `2D` board.
|
|
5
|
+
*
|
|
6
|
+
* The same shape as `contributions/react/component-board.service.ts`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { registerComponentBoard } from '@volter/editor-sdk/kit/component-board-registry';
|
|
10
|
+
import { canvasComponentBoard } from '../../src/canvas/canvas-board/canvas-component-board';
|
|
11
|
+
|
|
12
|
+
export const point = 'workspace.service';
|
|
13
|
+
|
|
14
|
+
export function start(): () => void {
|
|
15
|
+
return registerComponentBoard(canvasComponentBoard);
|
|
16
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE CANVAS MEDIUM'S DESIGN-TIME MOUNT (a `workspace.service` contribution):
|
|
3
|
+
* tells the SDK's design-time mount registry how a `canvas` world mounts in
|
|
4
|
+
* Edit. The same shape as `contributions/react/design-time-mount.service.ts`;
|
|
5
|
+
* the mount itself stays behind a dynamic `import()` so `pixi.js` and
|
|
6
|
+
* `@pixi/react` load only for a project that declares a canvas root.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { registerDesignTimeMount } from '@volter/editor-sdk/kit/authoring/design-time-mount-registry';
|
|
10
|
+
|
|
11
|
+
export const point = 'workspace.service';
|
|
12
|
+
|
|
13
|
+
export function start(): () => void {
|
|
14
|
+
return registerDesignTimeMount({
|
|
15
|
+
kind: 'canvas',
|
|
16
|
+
owner: '@volter/editor-game/canvas/design-time-mount',
|
|
17
|
+
// The `ResolvedAdapter['identity']` a mount failure is reported under —
|
|
18
|
+
// the literal the host's own catch block used to spell.
|
|
19
|
+
identity: 'default-pixi',
|
|
20
|
+
// A canvas layer is always interactive: its content IS the document's
|
|
21
|
+
// whole subject (the game's 2D scene), and a click on it is how you
|
|
22
|
+
// select in it. The dom medium declares the opposite, because its
|
|
23
|
+
// design-time hover/press testing competes with authoring gestures.
|
|
24
|
+
alwaysInteractive: true,
|
|
25
|
+
mount: async (candidate, layer, context) => {
|
|
26
|
+
const { mountCanvasDesignTimeLayer } = await import('../../src/canvas/design-time-canvas-mount');
|
|
27
|
+
return mountCanvasDesignTimeLayer(candidate, layer, context);
|
|
28
|
+
},
|
|
29
|
+
remountWhen: (invalidate) => {
|
|
30
|
+
let stopped = false;
|
|
31
|
+
let stop: (() => void) | null = null;
|
|
32
|
+
// Loaded here for the same reason the mount is: the host calls this only when a canvas
|
|
33
|
+
// candidate exists.
|
|
34
|
+
void import('../../src/canvas/design-time-canvas-mount').then((module) => {
|
|
35
|
+
if (stopped) return;
|
|
36
|
+
stop = module.remountWhenSourceIsWritten(invalidate);
|
|
37
|
+
});
|
|
38
|
+
return () => {
|
|
39
|
+
stopped = true;
|
|
40
|
+
stop?.();
|
|
41
|
+
stop = null;
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The canvas medium's captures, installed at boot (`workspace.service`): story thumbnails for a
|
|
3
|
+
* canvas story in an offscreen Pixi application, and Pixi's same-frame canvas pixels
|
|
4
|
+
* (`src/host/stories/story-media-captures.ts`). They are the game's, because Pixi is.
|
|
5
|
+
*/
|
|
6
|
+
import { registerStoryMediaCaptures } from '../src/host/stories/story-media-captures';
|
|
7
|
+
|
|
8
|
+
export const point = 'workspace.service';
|
|
9
|
+
|
|
10
|
+
export function start(): () => void {
|
|
11
|
+
return registerStoryMediaCaptures();
|
|
12
|
+
}
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
*
|
|
11
11
|
* It was `components/EditModeAudioBootstrap.tsx`, a component that rendered
|
|
12
12
|
* `null` so the shell's layout could run an effect, and through it the host
|
|
13
|
-
* imported `@volter/game
|
|
14
|
-
* `@volter/game
|
|
13
|
+
* imported `@volter/editor-game/runtime/setup/setup-audio`, `@volter/editor-game/runtime/audio/bus-mixer` and
|
|
14
|
+
* `@volter/editor-game/runtime/audio/pose-guard` — the engine's audio RUNTIME — into every editor
|
|
15
15
|
* boot (WORK.md §The open-source launch, phase 1 unit 7).
|
|
16
16
|
*/
|
|
17
17
|
import { installEditModeAudio } from '../src/edit-mode/edit-mode-audio';
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* that always was, and the shell no longer names it (WORK.md §The workbench,
|
|
13
13
|
* P3b).
|
|
14
14
|
*/
|
|
15
|
-
import { onProjectChange } from '@volter/editor-
|
|
15
|
+
import { onProjectChange } from '@volter/editor-sdk/kit/active-project';
|
|
16
16
|
import { installEditModeNetworking } from '../src/edit-mode/edit-mode-networking';
|
|
17
17
|
|
|
18
18
|
export const point = 'workspace.service';
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* All eight read/actuate the LIVE play session's game-scoped debug registry
|
|
7
7
|
* (`SystemAdapters.debug`, installed by `setActiveSystems` on play enter) or
|
|
8
|
-
* its
|
|
8
|
+
* its input door/GameLoop (via `getPlayRuntimeAccess`). A stopped session
|
|
9
9
|
* answers with a structured failure, never a fabricated success; a running
|
|
10
10
|
* game that exposes NO debug adapter (a non-first-party mount) degrades to
|
|
11
11
|
* the honest empty/null shape.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* when they move. Nothing here is host API.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
import { getActiveSystems } from '@volter/editor-
|
|
20
|
+
import { getActiveSystems } from '@volter/editor-sdk/kit/authoring/active-systems';
|
|
21
21
|
import type { CommandContribution } from '@volter/editor-sdk/commands';
|
|
22
22
|
import { notPlayingResult, structuredErrorResult } from '../src/command-results';
|
|
23
23
|
import { getPlayRuntimeAccess, isPlayModeActive } from '../src/play/play-mode';
|
|
@@ -111,7 +111,7 @@ export const commands: CommandContribution['commands'] = {
|
|
|
111
111
|
if (!input) {
|
|
112
112
|
return {
|
|
113
113
|
ok: false,
|
|
114
|
-
error: 'this play session has no
|
|
114
|
+
error: 'this play session has no input door: no root entry exports `debug.input`',
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
117
|
try {
|
|
@@ -122,7 +122,7 @@ export const commands: CommandContribution['commands'] = {
|
|
|
122
122
|
// bindings, so `delivered` here means "the source was written").
|
|
123
123
|
if (cmd['kind'] === 'action') {
|
|
124
124
|
const atTick = cmd['atTick'];
|
|
125
|
-
// D15/T-D15.5 — `atTick` defers to
|
|
125
|
+
// D15/T-D15.5 — `atTick` defers to the target's scheduleActionAtTick
|
|
126
126
|
// instead of an immediate setVirtualAction. scheduleActionAtTick
|
|
127
127
|
// throws InputActionError/a valueType mismatch (same as
|
|
128
128
|
// setVirtualAction) or InputTickError ('TICK_ALREADY_PASSED',
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
* routes over HTTP exactly as it did when it lived in the host.
|
|
31
31
|
*/
|
|
32
32
|
|
|
33
|
-
import { registerDocumentOpener } from '@volter/editor-
|
|
34
|
-
import { CONTRIBUTED_WORKSPACE_UTILITIES } from '@volter/editor-
|
|
35
|
-
import { registerWorkspaceUtility } from '@volter/editor-
|
|
33
|
+
import { registerDocumentOpener } from '@volter/editor-sdk/kit/document-open-registry';
|
|
34
|
+
import { CONTRIBUTED_WORKSPACE_UTILITIES } from '@volter/editor-sdk/kit/workspace-core-utilities';
|
|
35
|
+
import { registerWorkspaceUtility } from '@volter/editor-sdk/kit/workspace-utility-registry';
|
|
36
36
|
import { GenerationActivity } from '../src/generation/GenerationActivity';
|
|
37
37
|
import {
|
|
38
38
|
openGenerationCreateDocument,
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* concern).
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import { CONTRIBUTED_WORKSPACE_UTILITIES } from '@volter/editor-
|
|
12
|
+
import { CONTRIBUTED_WORKSPACE_UTILITIES } from '@volter/editor-sdk/kit/workspace-core-utilities';
|
|
13
13
|
import { editorHost } from '@volter/editor-sdk/host';
|
|
14
14
|
import { Button } from '@volter/editor-sdk/widgets';
|
|
15
15
|
import { useSyncExternalStore } from 'react';
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 3,
|
|
3
|
+
"name": "Godot",
|
|
4
|
+
"theme": {
|
|
5
|
+
"id": "godot",
|
|
6
|
+
"color": {
|
|
7
|
+
"surface": {
|
|
8
|
+
"shell": "#1d2229",
|
|
9
|
+
"panel": "#21262e",
|
|
10
|
+
"chrome": "#252b34",
|
|
11
|
+
"raised": "#363d4a",
|
|
12
|
+
"inset": "#1d2229",
|
|
13
|
+
"overlay": "rgba(33,38,46,0.96)"
|
|
14
|
+
},
|
|
15
|
+
"boundary": {
|
|
16
|
+
"default": "#363d4a",
|
|
17
|
+
"strong": "#4a5263",
|
|
18
|
+
"area": "#1d2229",
|
|
19
|
+
"indent": "#4a5263",
|
|
20
|
+
"divider": "#2c323c"
|
|
21
|
+
},
|
|
22
|
+
"content": {
|
|
23
|
+
"primary": "#e0e0e0",
|
|
24
|
+
"muted": "#c0c3c8",
|
|
25
|
+
"dim": "#8a8e96",
|
|
26
|
+
"onAccent": "#ffffff",
|
|
27
|
+
"menu": "#e0e0e0",
|
|
28
|
+
"status": "#9a9ea6",
|
|
29
|
+
"placeholder": "#6a6d73",
|
|
30
|
+
"active": "#70bafa",
|
|
31
|
+
"selected": "#70bafa",
|
|
32
|
+
"onBright": {
|
|
33
|
+
"primary": "#1d2229",
|
|
34
|
+
"muted": "rgba(29,34,41,0.82)",
|
|
35
|
+
"dim": "rgba(29,34,41,0.7)"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"accent": {
|
|
39
|
+
"default": "#70bafa",
|
|
40
|
+
"muted": "#374f66"
|
|
41
|
+
},
|
|
42
|
+
"widget": {
|
|
43
|
+
"regular": "#363d4a",
|
|
44
|
+
"menu": "#21262e",
|
|
45
|
+
"field": "#1d2229",
|
|
46
|
+
"emboss": "rgba(0,0,0,0.12)"
|
|
47
|
+
},
|
|
48
|
+
"viewport": {
|
|
49
|
+
"background": "#4d4d4d",
|
|
50
|
+
"grid": "#6e6964",
|
|
51
|
+
"axisX": "#f53352",
|
|
52
|
+
"axisY": "#87d603",
|
|
53
|
+
"axisZ": "#298cf5",
|
|
54
|
+
"selection": "#ff8000",
|
|
55
|
+
"active": "#ff8000"
|
|
56
|
+
},
|
|
57
|
+
"gizmo": {
|
|
58
|
+
"x": "#f53352",
|
|
59
|
+
"y": "#87d603",
|
|
60
|
+
"z": "#298cf5"
|
|
61
|
+
},
|
|
62
|
+
"region": {
|
|
63
|
+
"outliner": "#21262e",
|
|
64
|
+
"properties": "#21262e"
|
|
65
|
+
},
|
|
66
|
+
"category": {
|
|
67
|
+
"object": "#fc7f7f",
|
|
68
|
+
"modifier": "#8da5f3",
|
|
69
|
+
"material": "#ff5d5d",
|
|
70
|
+
"data": "#8eef97",
|
|
71
|
+
"scene": "#e0e0e0",
|
|
72
|
+
"collection": "#e0e0e0",
|
|
73
|
+
"tool": "#e0e0e0",
|
|
74
|
+
"operator": "#8eef97"
|
|
75
|
+
},
|
|
76
|
+
"semantic": {
|
|
77
|
+
"danger": "#ff786b",
|
|
78
|
+
"dangerMuted": "rgba(255,120,107,0.28)",
|
|
79
|
+
"dangerFaint": "rgba(255,120,107,0.12)",
|
|
80
|
+
"warning": "#ffdd65",
|
|
81
|
+
"warningMuted": "rgba(255,221,101,0.28)",
|
|
82
|
+
"success": "#45ff8b",
|
|
83
|
+
"successMuted": "rgba(69,255,139,0.28)",
|
|
84
|
+
"dynamic": "#ffdd65",
|
|
85
|
+
"dynamicMuted": "rgba(255,221,101,0.18)",
|
|
86
|
+
"instance": "#70bafa"
|
|
87
|
+
},
|
|
88
|
+
"neutralOverlay": {
|
|
89
|
+
"hover": "rgba(255,255,255,0.07)",
|
|
90
|
+
"active": "rgba(255,255,255,0.13)"
|
|
91
|
+
},
|
|
92
|
+
"scrim": "rgba(0,0,0,0.6)"
|
|
93
|
+
},
|
|
94
|
+
"typography": {
|
|
95
|
+
"sans": "'Noto Sans', 'Inter', system-ui, sans-serif",
|
|
96
|
+
"mono": "'JetBrains Mono', 'Hack', Menlo, monospace"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE GODOT LOOK — Godot 4.4's default editor theme and its 3D viewport's
|
|
3
|
+
* colours, made only of values (`docs/VIEWPORT-STAGE.md`, the Godot column).
|
|
4
|
+
*
|
|
5
|
+
* The viewport group transcribes Godot's axis colours (`theme_modern.cpp`): X (0.96, 0.20,
|
|
6
|
+
* 0.32), Y (0.53, 0.84, 0.01) and Z (0.16, 0.55, 0.96), named by the world's axes; and the selection
|
|
7
|
+
* box (1.0, 0.5, 0). The fill is Godot's `default_clear_color` (0.3, 0.3, 0.3),
|
|
8
|
+
* what shows with the preview environment off. The grid's minor and major
|
|
9
|
+
* levels are the primary/secondary grid colours at alpha 0.5, fitted against
|
|
10
|
+
* `engine-reference/godot/tuto_3d3.png` over the preview sky's ground: a line
|
|
11
|
+
* there peaks near (95, 91, 87) over a (62, 51, 40) floor.
|
|
12
|
+
* Light, sky and overlays are the VIEW's presentation, not this look's.
|
|
13
|
+
*/
|
|
14
|
+
import type { StyleContribution } from '@volter/editor-sdk/looks';
|
|
15
|
+
import palette from './godot.palette.json';
|
|
16
|
+
|
|
17
|
+
export const point = 'workspace.style';
|
|
18
|
+
export const style: StyleContribution = {
|
|
19
|
+
id: 'godot',
|
|
20
|
+
title: 'Godot',
|
|
21
|
+
paletteId: 'godot',
|
|
22
|
+
materialId: 'godot',
|
|
23
|
+
material: {
|
|
24
|
+
id: 'godot',
|
|
25
|
+
title: 'Godot',
|
|
26
|
+
description: 'Flat blue-grey panels, three-pixel corners, a soft shadow under popups.',
|
|
27
|
+
shape: { small: '3px', medium: '3px', large: '4px', full: '9999px' },
|
|
28
|
+
elevation: {
|
|
29
|
+
small: 'none',
|
|
30
|
+
medium: '0 3px 10px rgba(0,0,0,0.45)',
|
|
31
|
+
large: '0 6px 18px rgba(0,0,0,0.5)',
|
|
32
|
+
},
|
|
33
|
+
stage: {
|
|
34
|
+
// THE VIEWPORT'S OWN CHROME (`tuto_3d3.png`): the 3D editor's toolbar is a flush band
|
|
35
|
+
// over the view, the tools at its start and the view's controls after them; inside the
|
|
36
|
+
// view only the "⋮ Perspective" pill at the top-left, which opens the view menu.
|
|
37
|
+
// The transform controls (local space, snap) follow the tools on the band, as Godot's do.
|
|
38
|
+
chrome: { bar: 'strip', viewName: 'menu', tools: 'bar-start', display: 'bar-end', transformControls: 'bar' },
|
|
39
|
+
// Godot's display modes and its View menu, where the gizmos are switched.
|
|
40
|
+
words: {
|
|
41
|
+
shading: {
|
|
42
|
+
solid: 'Display Normal',
|
|
43
|
+
wireframe: 'Display Wireframe',
|
|
44
|
+
overdraw: 'Display Overdraw',
|
|
45
|
+
unlit: 'Display Unshaded',
|
|
46
|
+
},
|
|
47
|
+
helpers: 'View',
|
|
48
|
+
},
|
|
49
|
+
// The stage's ring radius in CSS px. Godot's gizmo unit is `manipulator_gizmo_size` (80)
|
|
50
|
+
// px on screen (`gizmo_scale = gizmo_size / dd`, `node_3d_editor_plugin.cpp`, at EDSCALE 1
|
|
51
|
+
// in a viewport at least 400 px tall) and its ring stands at `GIZMO_CIRCLE_SIZE` 1.1 of
|
|
52
|
+
// it: 88 px, as `engine-reference/godot/tuto_3d5.png`'s ~90 px ring.
|
|
53
|
+
gizmoSize: 88,
|
|
54
|
+
// The move arrows' tips stand at `GIZMO_ARROW_OFFSET` + `GIZMO_ARROW_SIZE` (1.4 + 0.35)
|
|
55
|
+
// units, 1.6 ring radii, with a head about half again three's (`tuto_3d5.png`: a 142 px
|
|
56
|
+
// tip against a 90 px ring, a 25 px head).
|
|
57
|
+
gizmoArrowLength: 1.6,
|
|
58
|
+
gizmoArrowHead: 1.5,
|
|
59
|
+
// Its rotation rings are about twice three's thickness (`tuto_3d5.png`).
|
|
60
|
+
gizmoRingWidth: 2,
|
|
61
|
+
// `manipulator_gizmo_opacity` 0.9; the highlight is the axis colour at a quarter of its
|
|
62
|
+
// saturation and full value (`node_3d_editor_plugin.cpp`).
|
|
63
|
+
gizmoOpacity: 0.9,
|
|
64
|
+
// Its orientation gizmo is its own (`ViewportRotationControl::_draw_axis`): opacity by
|
|
65
|
+
// depth, darkened negatives, no mix toward the viewport (the editor's `godot` form).
|
|
66
|
+
navigationGizmo: 'godot',
|
|
67
|
+
gizmoHighlightSaturation: 0.25,
|
|
68
|
+
gizmoHighlightValue: 1,
|
|
69
|
+
// Godot's grid lines are hairlines at both levels.
|
|
70
|
+
gridLineWidth: 1,
|
|
71
|
+
gridMajorWidth: 1,
|
|
72
|
+
gridMajorContrast: 1.3,
|
|
73
|
+
// Godot's selection is the whole AABB. Its edge is one solid pixel at 1x
|
|
74
|
+
// (`tuto_3d5.png`); our screen-space line needs 2 to cover one captured pixel.
|
|
75
|
+
selectionBox: 'edges',
|
|
76
|
+
// Godot's box turns with the object: its AABB in the object's own frame.
|
|
77
|
+
selectionBoxFrame: 'object',
|
|
78
|
+
selectionBoxWidth: 2,
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
palette,
|
|
82
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GODOT'S DEFAULT 3D VIEWPORT: its preview sun and procedural sky (the kit's sky, which is
|
|
3
|
+
* Godot's own `ProceduralSkyMaterial` default) under its Filmic curve, the sky as backdrop, an
|
|
4
|
+
* 8-cell grid, all three axis lines with Y vertical, the full selection box, and its Select
|
|
5
|
+
* gizmo's arrows and rings without the extra handles. Judged against `tuto_3d3.png`/`tuto_3d5.png`.
|
|
6
|
+
* A named view (`@volter/editor-sdk/kit/viewport-presentation` `ViewPreset`): what the view does
|
|
7
|
+
* and how it is lit, never its look — pair it with the Godot style for the whole target.
|
|
8
|
+
*/
|
|
9
|
+
import type { ViewPreset } from '@volter/editor-sdk/kit/viewport-presentation';
|
|
10
|
+
|
|
11
|
+
export const point = 'workspace.view';
|
|
12
|
+
export const view: ViewPreset = {
|
|
13
|
+
id: 'godot',
|
|
14
|
+
title: 'Godot',
|
|
15
|
+
layer: {
|
|
16
|
+
// Godot's editor camera: `editors/3d/default_fov` 70 (`editor_settings.cpp`), vertical — the
|
|
17
|
+
// editor's Camera3D keeps its height.
|
|
18
|
+
camera: { fov: { degrees: 70, axis: 'vertical' } },
|
|
19
|
+
all: {
|
|
20
|
+
lighting: {
|
|
21
|
+
source: 'preview',
|
|
22
|
+
preview: {
|
|
23
|
+
sun: {
|
|
24
|
+
enabled: true,
|
|
25
|
+
color: '#ffffff',
|
|
26
|
+
energy: 1,
|
|
27
|
+
altitude: 60,
|
|
28
|
+
azimuth: 150,
|
|
29
|
+
shadowDistance: 100,
|
|
30
|
+
},
|
|
31
|
+
environment: {
|
|
32
|
+
enabled: true,
|
|
33
|
+
energy: 1,
|
|
34
|
+
rotation: 0,
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
tone: {
|
|
38
|
+
mapper: 'filmic',
|
|
39
|
+
exposure: 1,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
backdrop: {
|
|
43
|
+
source: 'environment',
|
|
44
|
+
opacity: 1,
|
|
45
|
+
blur: 0,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
overlays: {
|
|
49
|
+
// No zoom and pan buttons under the gizmo and no camera readout: the engine draws neither.
|
|
50
|
+
navigationControls: false,
|
|
51
|
+
cameraReadout: false,
|
|
52
|
+
grid: {
|
|
53
|
+
visible: true,
|
|
54
|
+
majorEvery: 8,
|
|
55
|
+
},
|
|
56
|
+
selection: {
|
|
57
|
+
outline: false,
|
|
58
|
+
wire: false,
|
|
59
|
+
box: true,
|
|
60
|
+
},
|
|
61
|
+
axes: {
|
|
62
|
+
x: true,
|
|
63
|
+
y: true,
|
|
64
|
+
z: true,
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
interaction: {
|
|
68
|
+
transformHandles: {
|
|
69
|
+
scale: false,
|
|
70
|
+
viewRotate: false,
|
|
71
|
+
freeMove: false,
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
};
|
|
@@ -40,12 +40,12 @@
|
|
|
40
40
|
* `mount-ingest-root.ts` binds itself on — read at launch time rather than
|
|
41
41
|
* captured, so neither ordering can leave the launch holding `null`.
|
|
42
42
|
*/
|
|
43
|
-
import { editorConsole } from '@volter/editor-
|
|
43
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
44
44
|
import { importIngestAdapterModule, ingestAdapterModulePath } from '../src/host/ingest/registry';
|
|
45
|
-
import { registerAdapterDefinitionSource } from '@volter/editor-
|
|
46
|
-
import { shellStoreForHost } from '@volter/editor-core/shell-store-door';
|
|
45
|
+
import { registerAdapterDefinitionSource } from '@volter/editor-sdk/kit/project-adapter';
|
|
47
46
|
import { editorHost } from '@volter/editor-sdk/host';
|
|
48
47
|
import { autoLaunchIngest } from '../src/ingest/mount-ingest-root';
|
|
48
|
+
import { threeStoreForHost } from '@volter/editor-threejs/kit/three-state';
|
|
49
49
|
|
|
50
50
|
export const point = 'workspace.service';
|
|
51
51
|
|
|
@@ -60,7 +60,7 @@ export function start(): () => void {
|
|
|
60
60
|
importModule: async (rootId) => await importIngestAdapterModule(rootId),
|
|
61
61
|
});
|
|
62
62
|
const stopReady = editorHost().project.onReady(async () => {
|
|
63
|
-
const store =
|
|
63
|
+
const store = threeStoreForHost();
|
|
64
64
|
if (!store) {
|
|
65
65
|
// The store arrives with `AppRoot`, long before any boot chain reaches
|
|
66
66
|
// ready, so this cannot happen quietly — say so rather than skipping an
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* when they move. Nothing here is host API.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import { liveInstanceIds } from '@volter/editor-
|
|
13
|
+
import { liveInstanceIds } from '@volter/editor-sdk/kit/authoring/active-systems';
|
|
14
14
|
import type { CommandContribution } from '@volter/editor-sdk/commands';
|
|
15
15
|
import {
|
|
16
16
|
instanceEntries,
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* on its availability tick while a menu is open, so they follow the mounted
|
|
12
12
|
* game's `NavigationAdapter` and a bake in flight.
|
|
13
13
|
*/
|
|
14
|
-
import { getActiveSystems } from '@volter/editor-
|
|
14
|
+
import { getActiveSystems } from '@volter/editor-sdk/kit/authoring/active-systems';
|
|
15
15
|
import type { MenuContribution } from '@volter/editor-sdk/chrome';
|
|
16
16
|
import { dispatchNavMeshBake, dispatchNavMeshClear } from '../src/navmesh/navmesh-actions';
|
|
17
17
|
import { navBakeBusy, navMeshBaked } from '../src/navmesh/navmesh-workflow-store';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The page-level observer of a RUNNING game's Colyseus rooms (`@volter/editor-sdk/services`, a
|
|
3
|
+
* `workspace.service` contribution): wraps the page's WebSocket and fetch once, before any game
|
|
4
|
+
* joins a room, so the Network inspector reads a game that declares no networking adapter
|
|
5
|
+
* (`src/services/game-network.ts`). Page-wide and idempotent; a game that joins nothing is not
|
|
6
|
+
* affected.
|
|
7
|
+
*/
|
|
8
|
+
import { installGameNetwork } from '../src/services/game-network';
|
|
9
|
+
|
|
10
|
+
export const point = 'workspace.service';
|
|
11
|
+
|
|
12
|
+
export function start(): void {
|
|
13
|
+
installGameNetwork();
|
|
14
|
+
}
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
* it, and no contribution point injects a panel's header component.
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
|
-
import { getActiveSystems } from '@volter/editor-
|
|
32
|
-
import { setGameplayExportActive } from '@volter/editor-
|
|
31
|
+
import { getActiveSystems } from '@volter/editor-sdk/kit/authoring/active-systems';
|
|
32
|
+
import { setGameplayExportActive } from '@volter/editor-sdk/kit/gameplay-export-state';
|
|
33
33
|
import { stopGameplayRecording } from '../src/host/gameplay-recording';
|
|
34
|
-
import { liveInstanceContainer } from '@volter/editor-
|
|
34
|
+
import { liveInstanceContainer } from '@volter/editor-sdk/kit/live-session-registry';
|
|
35
35
|
import type { CommandContribution } from '@volter/editor-sdk/commands';
|
|
36
36
|
import { editorHost } from '@volter/editor-sdk/host';
|
|
37
37
|
import type { OfflineAudioRenderer } from '@volter/editor-project/adapter';
|
|
@@ -46,6 +46,7 @@ import {
|
|
|
46
46
|
stepPlayMode,
|
|
47
47
|
} from '../src/play/play-mode';
|
|
48
48
|
import { beginPlayRecording, endPlayRecording, notePlayActivity } from '../src/play/play-recording';
|
|
49
|
+
import { startSelectedRunConfiguration, stopStartedRunConfiguration } from '../src/play/run-selection';
|
|
49
50
|
|
|
50
51
|
export const point = 'workspace.command';
|
|
51
52
|
|
|
@@ -55,7 +56,7 @@ export const point = 'workspace.command';
|
|
|
55
56
|
async function captureLiveCanvasFrame(
|
|
56
57
|
canvas: HTMLCanvasElement,
|
|
57
58
|
): Promise<CanvasImageSource | null> {
|
|
58
|
-
const { liveCanvasFrame } = await import('@volter/editor-
|
|
59
|
+
const { liveCanvasFrame } = await import('@volter/editor-sdk/kit/live-canvas-frame');
|
|
59
60
|
return liveCanvasFrame(canvas);
|
|
60
61
|
}
|
|
61
62
|
|
|
@@ -134,6 +135,10 @@ export const commands: CommandContribution['commands'] = {
|
|
|
134
135
|
// field on the relayed command, slugified server-side into this run's
|
|
135
136
|
// log filename and journal line. Absent, everything is unchanged.
|
|
136
137
|
const runName = cmd['name'];
|
|
138
|
+
// What Play runs beside the host starts first, exactly as the Play button starts it: a
|
|
139
|
+
// `play + server` project's room server is up before its game joins.
|
|
140
|
+
const start = await startSelectedRunConfiguration();
|
|
141
|
+
if (!start.ok) return { ok: false, error: `${start.title}: ${start.detail}` };
|
|
137
142
|
await enterPlayMode(
|
|
138
143
|
typeof seed === 'number' ? seed : undefined,
|
|
139
144
|
undefined,
|
|
@@ -208,6 +213,7 @@ export const commands: CommandContribution['commands'] = {
|
|
|
208
213
|
// someone stopping the run wanted to look at.
|
|
209
214
|
const capture = await endPlayRecording('stop');
|
|
210
215
|
exitPlayMode();
|
|
216
|
+
await stopStartedRunConfiguration();
|
|
211
217
|
return { ok: true, ...(capture ? { data: { recording: capture } } : {}) };
|
|
212
218
|
},
|
|
213
219
|
},
|
|
@@ -303,7 +309,7 @@ export const commands: CommandContribution['commands'] = {
|
|
|
303
309
|
appendGameplayRecordingChunk,
|
|
304
310
|
finishGameplayRecordingSink,
|
|
305
311
|
abortGameplayRecordingSink,
|
|
306
|
-
} = await import('@volter/editor-
|
|
312
|
+
} = await import('@volter/editor-sdk/kit/editor-api');
|
|
307
313
|
controller.signal.throwIfAborted();
|
|
308
314
|
const sink = await beginGameplayRecordingSink(
|
|
309
315
|
{
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* candidate appears: a promise cannot answer a verdict thunk.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import { registerComponentBoard } from '@volter/editor-
|
|
14
|
+
import { registerComponentBoard } from '@volter/editor-sdk/kit/component-board-registry';
|
|
15
15
|
import { uiComponentBoard } from '../../src/react/ui-component-board';
|
|
16
16
|
|
|
17
17
|
export const point = 'workspace.service';
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* the build's eager graph.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
import { registerDesignTimeMount } from '@volter/editor-
|
|
24
|
+
import { registerDesignTimeMount } from '@volter/editor-sdk/kit/authoring/design-time-mount-registry';
|
|
25
25
|
|
|
26
26
|
export const point = 'workspace.service';
|
|
27
27
|
|
|
@@ -64,9 +64,9 @@
|
|
|
64
64
|
* structural write pipe (`authoring/r3f-source-authoring-adapter.ts`,
|
|
65
65
|
* `@vgai/canvas/pixi-source-write-target.ts`); the breakpoint state
|
|
66
66
|
* (`components/BoardRulers.tsx`); `authoring/react-story-board.ts`, the
|
|
67
|
-
* board's geometry, which
|
|
67
|
+
* board's geometry, which three host surfaces read
|
|
68
68
|
* (`components/RootSelectionOverlay.tsx:98`,
|
|
69
|
-
* `components/ReactCanvasControls.tsx:15`,
|
|
69
|
+
* `components/ReactCanvasControls.tsx:15`,
|
|
70
70
|
* `canvas-board/CanvasBoardDocument.tsx:57`) because they draw chrome OVER
|
|
71
71
|
* the board. Each is its own unit with its own seam; none of them is in the
|
|
72
72
|
* host's EAGER closure, which is what these cuts buy.
|
|
@@ -7,19 +7,19 @@
|
|
|
7
7
|
*
|
|
8
8
|
* The session store arrives after the contribution pass, and a project switch
|
|
9
9
|
* brings a new one, so the document binds on each store's ARRIVAL
|
|
10
|
-
* (`@volter/editor-
|
|
10
|
+
* (`@volter/editor-sdk/kit/shell-store-door`'s `onShellStore`, as Play's
|
|
11
11
|
* autoplay entry does) and unbinds the previous store's binding first.
|
|
12
12
|
*/
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { SCENE_DOCUMENT_ID } from '@volter/editor-core/workspace-document-ids';
|
|
13
|
+
import { unregisterAvailableWorkspaceDocument } from '@volter/editor-sdk/kit/workspace-available-documents';
|
|
14
|
+
import { SCENE_DOCUMENT_ID } from '@volter/editor-sdk/kit/workspace-document-ids';
|
|
16
15
|
import { bindSceneDocument } from '../src/host/components/scene-document';
|
|
16
|
+
import { onThreeStore } from '@volter/editor-threejs/kit/three-state';
|
|
17
17
|
|
|
18
18
|
export const point = 'workspace.service';
|
|
19
19
|
|
|
20
20
|
export function start(): () => void {
|
|
21
21
|
let unbind: (() => void) | null = null;
|
|
22
|
-
const stopStore =
|
|
22
|
+
const stopStore = onThreeStore((store) => {
|
|
23
23
|
unbind?.();
|
|
24
24
|
unbind = bindSceneDocument(store);
|
|
25
25
|
});
|