@volter/editor-game 0.5.65 → 0.5.66
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/generation.service.ts +2 -2
- package/contributions/generations.status.tsx +1 -1
- package/contributions/godot.palette.json +99 -0
- package/contributions/godot.style.ts +62 -0
- package/contributions/godot.view.ts +69 -0
- package/contributions/ingest.service.ts +3 -3
- package/contributions/play.command.ts +1 -1
- package/contributions/react/react-inspector.service.ts +2 -2
- package/contributions/scene-document.service.ts +3 -3
- package/contributions/three/component-verbs.command.ts +3 -3
- package/contributions/unity.palette.json +102 -0
- package/contributions/unity.style.ts +62 -0
- package/contributions/unity.view.ts +76 -0
- package/contributions/unreal.palette.json +105 -0
- package/contributions/unreal.style.ts +58 -0
- package/contributions/unreal.view.ts +88 -0
- package/dist-node/serving.mjs +16 -0
- package/package.json +21 -14
- package/serving/index.ts +27 -0
- package/src/asset-budget/asset-budget-model.ts +3 -3
- package/src/asset-budget/optimize-apply.ts +7 -7
- package/src/bridge/dispatch.ts +2 -2
- package/src/bridge/screenshot.ts +3 -3
- package/src/coverage/live-authoring-surface.ts +1 -1
- package/src/coverage/live-project-verbs.ts +1 -1
- package/src/coverage/native-system-coverage.ts +1 -1
- package/src/coverage/session-coverage.ts +2 -2
- package/src/design-system-stories/InspectorNarrowBodies.stories.tsx +10 -50
- package/src/game-document/GameCaptureFrameButton.tsx +1 -1
- package/src/game-document/GamePanel.tsx +4 -4
- package/src/generation/GenerationActivity.tsx +3 -5
- package/src/generation/generation-documents.tsx +3 -3
- package/src/generation/generation-jobs.ts +1 -1
- package/src/generation/generation-presentation.ts +1 -1
- package/src/host/adapter-reach.ts +1 -1
- package/src/host/adapter-runtime-bindings.ts +1 -1
- package/src/host/api/configurations.ts +2 -2
- package/src/host/authoring/babylon-authoring-adapter.ts +2 -2
- 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 +1 -1
- package/src/host/authoring/ingest-source-persistence.ts +4 -4
- package/src/host/authoring/mount-isolated-pixi-screen.ts +1 -1
- package/src/host/authoring/pixi-authoring-adapter.ts +2 -2
- package/src/host/authoring/pixi-live-write-target.ts +3 -3
- package/src/host/authoring/pixi-still-presentation.ts +1 -1
- package/src/host/authoring/pixi-structure-history.ts +1 -1
- package/src/host/authoring/source-persistence-backend.ts +3 -3
- package/src/host/authoring/struct-write-pipe.ts +2 -2
- package/src/host/browser-transpile.ts +1 -1
- package/src/host/canvas-entry-runtime.ts +1 -1
- package/src/host/components/HeaderTelemetry.tsx +5 -12
- package/src/host/components/PixiIsolationSceneContent.tsx +8 -7
- package/src/host/components/ThreeIsolationSceneContent.tsx +2 -2
- package/src/host/components/scene-document.tsx +15 -47
- package/src/host/components/world-root-stage-binding.tsx +6 -15
- package/src/host/components/world-root-stage.ts +60 -14
- 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 +1 -1
- package/src/host/design-system-stories/fixtures/editor-runtime.tsx +9 -1
- package/src/host/document-preview-three.ts +1 -1
- package/src/host/game-module-access.ts +1 -1
- package/src/host/game-realm-page.ts +15 -7
- package/src/host/game-realm-reclaim.ts +1 -1
- package/src/host/gated-globals.ts +4 -4
- package/src/host/history/json-history-resource.ts +2 -2
- 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 +1 -1
- package/src/host/r3f-entry-runtime.ts +1 -1
- package/src/host/react-mount-runtime.ts +1 -1
- package/src/host/realm-services.ts +1 -1
- package/src/host/roots/module-root.ts +1 -1
- package/src/host/scene-view-drawability.ts +2 -2
- package/src/host/server-log-bridge.ts +1 -1
- package/src/host/three-ingest-runtime.ts +1 -1
- package/src/host/use-active-performance-source.ts +1 -1
- package/src/ingest/active-ingest.ts +1 -1
- package/src/ingest/authoring/ingest-root-adapter.ts +5 -5
- package/src/ingest/capture-wait-report.ts +1 -1
- package/src/ingest/deferred-ingest-play.ts +5 -4
- package/src/ingest/ingest-boot-viewport.ts +4 -6
- package/src/ingest/ingest-canvas-scene-document.tsx +9 -8
- package/src/ingest/ingest-canvas-scene.ts +2 -5
- package/src/ingest/ingest-play-control.ts +3 -3
- package/src/ingest/ingest-render-debug.ts +1 -1
- package/src/ingest/ingest-siblings.ts +3 -3
- package/src/ingest/module-mode.ts +4 -5
- package/src/ingest/mount-canvas-ingest-root.ts +6 -6
- package/src/ingest/mount-coverage.ts +2 -2
- package/src/ingest/mount-dom-ingest-root.ts +5 -5
- package/src/ingest/mount-ingest-root.ts +7 -7
- package/src/ingest/mount-three-ingest-root.ts +4 -4
- package/src/ingest/unmount-ingest-root.ts +2 -2
- package/src/play/play-mode.ts +30 -16
- package/src/play/play-recording.ts +1 -1
- package/src/profiler/PerformancePanel.tsx +1 -1
- package/src/react/design-time-react-mount.ts +17 -23
- package/src/react/dom-authoring-adapter.ts +2 -2
- package/src/react/react-inspector-section.tsx +8 -8
- package/src/react/react-world-authoring-adapter.ts +20 -132
- package/src/react/story-documents/story-documents.tsx +9 -13
- package/src/react/ui-board-document.tsx +3 -4
- package/src/react/ui-component-board.ts +3 -3
- package/src/three/authoring/camera-runtime-inspector-section.tsx +1 -1
- package/src/three/authoring/constraint-inspector-section.tsx +3 -3
- package/src/three/authoring/model-asset-inspector-section.tsx +7 -11
- package/src/three/authoring/oid-source-persistence.ts +6 -6
- package/src/three/authoring/r3f-design-session.ts +21 -7
- package/src/three/authoring/r3f-source-authoring-adapter.ts +17 -17
- package/src/three/authoring/reflection-probe-inspector-section.tsx +3 -3
- 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 +4 -4
- package/src/three/component-verbs/extract-menu.ts +1 -1
- package/src/three/component-verbs/fork-menu.ts +1 -1
- package/src/three/component-verbs/internals-menu.ts +1 -1
- package/src/three/drei-asset-caches.ts +13 -0
- package/src/three/story-documents/three-story-documents.tsx +11 -21
- package/src/three/three-board/ThreeBoardDocument.tsx +12 -13
- package/src/three/three-board/board-scene.ts +1 -1
- package/src/three/three-board/three-component-board.ts +3 -3
- 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/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
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
* ingest keeps its own lifecycle).
|
|
31
31
|
*/
|
|
32
32
|
|
|
33
|
-
import {
|
|
33
|
+
import { activateLiveDocument } from '@volter/editor-sdk/kit/live-document';
|
|
34
|
+
import { commandLine } from '@volter/editor-sdk/kit/product-command';
|
|
34
35
|
import { queueEditModeRebuild } from '@volter/editor-core/authoring/edit-mode-authoring';
|
|
35
36
|
import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
|
|
36
37
|
import { fetchGameManifest } from '@volter/editor-core/manifest-project';
|
|
@@ -188,8 +189,9 @@ export async function mountDeferredIngestForPlay(store: EditorShellStore): Promi
|
|
|
188
189
|
// the Scene tab because, until now, that mount WAS edit mode; a play-time
|
|
189
190
|
// mount belongs on the play surface — which is also what opens the input
|
|
190
191
|
// gate (`mount-three-ingest-root.ts`'s `ingestInputActive` requires the play
|
|
191
|
-
// tab), so the game is drivable rather than
|
|
192
|
-
|
|
192
|
+
// tab, which is the Game document having focus), so the game is drivable rather than
|
|
193
|
+
// merely visible.
|
|
194
|
+
activateLiveDocument();
|
|
193
195
|
getIngestPlayControl()?.play();
|
|
194
196
|
return true;
|
|
195
197
|
}
|
|
@@ -207,7 +209,6 @@ export function exitDeferredIngestPlay(store: EditorShellStore): boolean {
|
|
|
207
209
|
// the adopted scene, and resets the play surface.
|
|
208
210
|
exitActiveIngest();
|
|
209
211
|
store.setPlayState('stopped');
|
|
210
|
-
store.setActiveViewportTab('edit');
|
|
211
212
|
// Edit mode is rebuilt through the ONE authoritative reinstall path
|
|
212
213
|
// (`the world root's stage`'s `installAll`), which is what recreates the R3F design
|
|
213
214
|
// session over the world component.
|
|
@@ -15,19 +15,18 @@
|
|
|
15
15
|
* while it constructs, then explicitly releases the hold and flips to Game.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { editorConsole } from '@volter/editor-
|
|
19
|
-
import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
|
|
18
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
20
19
|
import { projectAdapterFacet } from '@volter/editor-core/project-adapter';
|
|
21
20
|
import { sceneDocumentId } from '@volter/editor-core/scene-document-plan';
|
|
22
|
-
import { CANVAS_SCENE_DOCUMENT_ID, SCENE_DOCUMENT_ID } from '@volter/editor-
|
|
21
|
+
import { CANVAS_SCENE_DOCUMENT_ID, SCENE_DOCUMENT_ID } from '@volter/editor-sdk/kit/workspace-document-ids';
|
|
23
22
|
import {
|
|
24
23
|
activateWorkspaceDocument,
|
|
25
24
|
openWorkspaceDocuments,
|
|
26
|
-
} from '@volter/editor-
|
|
25
|
+
} from '@volter/editor-sdk/kit/workspace-document-registry';
|
|
27
26
|
import { activeIngest } from './active-ingest';
|
|
28
27
|
import { activeIngestPauseGap, holdIngestContentTimeForMode } from './ingest-play-control';
|
|
29
28
|
|
|
30
|
-
export function landIngestBootInEdit(
|
|
29
|
+
export function landIngestBootInEdit(): void {
|
|
31
30
|
const active = activeIngest();
|
|
32
31
|
if (active) {
|
|
33
32
|
const held = holdIngestContentTimeForMode('edit');
|
|
@@ -42,7 +41,6 @@ export function landIngestBootInEdit(store: EditorShellStore): void {
|
|
|
42
41
|
'ingest',
|
|
43
42
|
);
|
|
44
43
|
}
|
|
45
|
-
store.setActiveViewportTab('edit');
|
|
46
44
|
const open = openWorkspaceDocuments();
|
|
47
45
|
const defaultId = projectAdapterFacet()?.scenes.default;
|
|
48
46
|
const isolationId = defaultId ? sceneDocumentId(defaultId) : undefined;
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
import {
|
|
18
18
|
getMountFailureReports,
|
|
19
19
|
subscribeToMountFailures,
|
|
20
|
-
} from '@volter/editor-
|
|
20
|
+
} from '@volter/editor-sdk/kit/mount-failure-report';
|
|
21
21
|
import { installCanvasSceneNavigation } from '@volter/editor-core/authoring/react-canvas-navigation';
|
|
22
|
-
import { createRootViewController } from '@volter/editor-
|
|
22
|
+
import { createRootViewController } from '@volter/editor-sdk/kit/world-pan-state';
|
|
23
23
|
import {
|
|
24
24
|
CANVAS_SCENE_BACKGROUND,
|
|
25
25
|
CanvasSceneBackdrop,
|
|
@@ -28,14 +28,14 @@ import {
|
|
|
28
28
|
import { RootSelectionOverlay } from '@volter/editor-core/components/RootSelectionOverlay';
|
|
29
29
|
import { SurfaceStateOverlay } from '@volter/editor-core/components/SurfaceStateOverlay';
|
|
30
30
|
import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
|
|
31
|
-
import { liveDocumentContainer } from '@volter/editor-
|
|
31
|
+
import { liveDocumentContainer } from '@volter/editor-sdk/kit/live-document';
|
|
32
32
|
import { projectAdapterFacet } from '@volter/editor-core/project-adapter';
|
|
33
|
-
import { readinessFacet, subscribeRootReadiness } from '@volter/editor-
|
|
34
|
-
import { explainSurface } from '@volter/editor-
|
|
33
|
+
import { readinessFacet, subscribeRootReadiness } from '@volter/editor-sdk/kit/readiness';
|
|
34
|
+
import { explainSurface } from '@volter/editor-sdk/kit/surface-state';
|
|
35
35
|
import {
|
|
36
36
|
registerWorkspaceDocumentSelection,
|
|
37
37
|
type WorkspaceDocumentContentProps,
|
|
38
|
-
} from '@volter/editor-
|
|
38
|
+
} from '@volter/editor-sdk/kit/workspace-document-registry';
|
|
39
39
|
import type { AuthoringAdapter } from '@volter/editor-project/adapter';
|
|
40
40
|
import { useEffect, useRef, useSyncExternalStore } from 'react';
|
|
41
41
|
import { activeIngest } from './active-ingest';
|
|
@@ -147,7 +147,7 @@ export function IngestCanvasSceneContent({
|
|
|
147
147
|
touchAction: 'none',
|
|
148
148
|
}}
|
|
149
149
|
>
|
|
150
|
-
<CanvasSceneBackdrop view={view} />
|
|
150
|
+
<CanvasSceneBackdrop view={view} documentId={documentId} />
|
|
151
151
|
<RootSelectionOverlay adapter={adapter} view={view} transformModeAware />
|
|
152
152
|
<SurfaceStateOverlay
|
|
153
153
|
explanation={surfaceExplanation}
|
|
@@ -159,6 +159,7 @@ export function IngestCanvasSceneContent({
|
|
|
159
159
|
adapter={adapter}
|
|
160
160
|
containerRef={containerRef}
|
|
161
161
|
view={view}
|
|
162
|
+
documentId={documentId}
|
|
162
163
|
/>
|
|
163
164
|
</div>
|
|
164
165
|
);
|
|
@@ -173,5 +174,5 @@ export function installIngestCanvasScene(store: EditorShellStore): () => void {
|
|
|
173
174
|
const Content = (props: WorkspaceDocumentContentProps) => (
|
|
174
175
|
<IngestCanvasSceneContent {...props} adapter={adapter} store={store} worldId={worldId} />
|
|
175
176
|
);
|
|
176
|
-
return installIngestCanvasSceneDocument(
|
|
177
|
+
return installIngestCanvasSceneDocument(Content);
|
|
177
178
|
}
|
|
@@ -4,22 +4,20 @@
|
|
|
4
4
|
* installer can be unit-tested without pulling Pixi/Three into jsdom.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
|
|
8
7
|
import { projectAdapterFacet } from '@volter/editor-core/project-adapter';
|
|
9
8
|
import { isolationTabsReplaceGenericScene } from '@volter/editor-core/scene-document-plan';
|
|
10
|
-
import { CANVAS_SCENE_DOCUMENT_ID } from '@volter/editor-
|
|
9
|
+
import { CANVAS_SCENE_DOCUMENT_ID } from '@volter/editor-sdk/kit/workspace-document-ids';
|
|
11
10
|
import {
|
|
12
11
|
activateWorkspaceDocument,
|
|
13
12
|
closeWorkspaceDocument,
|
|
14
13
|
openWorkspaceDocument,
|
|
15
14
|
type WorkspaceDocumentContentProps,
|
|
16
|
-
} from '@volter/editor-
|
|
15
|
+
} from '@volter/editor-sdk/kit/workspace-document-registry';
|
|
17
16
|
import { registerRootDocumentRoute } from '@volter/editor-core/world-document-routing';
|
|
18
17
|
import type { ReactNode } from 'react';
|
|
19
18
|
import { activeIngest } from './active-ingest';
|
|
20
19
|
|
|
21
20
|
export function installIngestCanvasSceneDocument(
|
|
22
|
-
store: EditorShellStore,
|
|
23
21
|
Content: (props: WorkspaceDocumentContentProps) => ReactNode,
|
|
24
22
|
): () => void {
|
|
25
23
|
const live = activeIngest();
|
|
@@ -38,7 +36,6 @@ export function installIngestCanvasSceneDocument(
|
|
|
38
36
|
Content,
|
|
39
37
|
closeable: false,
|
|
40
38
|
presentation: () => ({ kind: 'world', id: worldId }),
|
|
41
|
-
onActivate: () => store.setActiveViewportTab('edit'),
|
|
42
39
|
});
|
|
43
40
|
activateWorkspaceDocument(CANVAS_SCENE_DOCUMENT_ID);
|
|
44
41
|
const unregisterRoute = registerRootDocumentRoute(worldId, CANVAS_SCENE_DOCUMENT_ID);
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { gameContractEpoch } from '../host/coverage/game-contract-seam-evidence';
|
|
12
|
-
import { recordLiveSeamEvidence } from '@volter/editor-
|
|
13
|
-
import { editorConsole } from '@volter/editor-
|
|
14
|
-
import { activateLiveDocument } from '@volter/editor-
|
|
12
|
+
import { recordLiveSeamEvidence } from '@volter/editor-sdk/kit/live-seam-evidence';
|
|
13
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
14
|
+
import { activateLiveDocument } from '@volter/editor-sdk/kit/live-document';
|
|
15
15
|
import type { VgaiGameContract } from '@volter/editor-project/adapter/ingest/game-contract';
|
|
16
16
|
import { activeIngest, type IngestLifecycleControl } from './active-ingest';
|
|
17
17
|
import { readIngestGameContract } from './game-contract-realm';
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
* notice.
|
|
56
56
|
*/
|
|
57
57
|
|
|
58
|
-
import { adapterObservations } from '@volter/editor-
|
|
58
|
+
import { adapterObservations } from '@volter/editor-sdk/kit/adapter-observation';
|
|
59
59
|
import { createContractDebugAdapter } from '@volter/game-runtime/adapter/ingest/contract-debug-adapter';
|
|
60
60
|
import {
|
|
61
61
|
type ContractSurface,
|
|
@@ -46,14 +46,14 @@
|
|
|
46
46
|
import {
|
|
47
47
|
addMountFailureReport,
|
|
48
48
|
formatMountFailureMessage,
|
|
49
|
-
} from '@volter/editor-
|
|
49
|
+
} from '@volter/editor-sdk/kit/mount-failure-report';
|
|
50
50
|
import { withStoreSelection } from '../host/authoring/mounted-authoring';
|
|
51
51
|
import { makeNoAuthoringAdapter } from '@volter/editor-core/authoring/no-authoring-adapter';
|
|
52
52
|
import { PixiAuthoringAdapter } from '../host/authoring/pixi-authoring-adapter';
|
|
53
53
|
import { createLiveCanvasWriteTarget } from '../host/authoring/pixi-live-write-target';
|
|
54
54
|
import { resolveCanvasPixiForEditor } from '../host/canvas-entry-runtime';
|
|
55
|
-
import { CrashNullBoundary } from '@volter/editor-
|
|
56
|
-
import { editorConsole } from '@volter/editor-
|
|
55
|
+
import { CrashNullBoundary } from '@volter/editor-sdk/kit/crash-null-boundary';
|
|
56
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
57
57
|
import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
|
|
58
58
|
import { authoringJournal } from '../host/history/json-history-resource';
|
|
59
59
|
import { activeRealmServices } from '../host/realm-services';
|
|
@@ -12,10 +12,10 @@ import {
|
|
|
12
12
|
addMountFailureReport,
|
|
13
13
|
clearMountFailureReports,
|
|
14
14
|
formatMountFailureMessage,
|
|
15
|
-
} from '@volter/editor-
|
|
15
|
+
} from '@volter/editor-sdk/kit/mount-failure-report';
|
|
16
16
|
import { makeNoAuthoringAdapter } from '@volter/editor-core/authoring/no-authoring-adapter';
|
|
17
17
|
import { resolveAllRoots } from '../host/binding-resolver';
|
|
18
|
-
import { editorConsole } from '@volter/editor-
|
|
18
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
19
19
|
import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
|
|
20
20
|
import { fetchGameManifest } from '@volter/editor-core/manifest-project';
|
|
21
21
|
import { getCurrentProject } from '@volter/editor-core/project-manager';
|
|
@@ -146,7 +146,6 @@ export async function enterModuleModeFromManifestRoot(
|
|
|
146
146
|
}
|
|
147
147
|
setActiveAuthoring(activeAuthoring);
|
|
148
148
|
setActiveSystems(mounted.systems ?? {});
|
|
149
|
-
store.setActiveViewportTab('play');
|
|
150
149
|
store.notifyIngestEdit();
|
|
151
150
|
clearMountFailureReports(); // D-W3: mount succeeded
|
|
152
151
|
|
|
@@ -215,9 +214,9 @@ export async function tryManifestModuleRoute(store: EditorShellStore): Promise<b
|
|
|
215
214
|
return true;
|
|
216
215
|
}
|
|
217
216
|
|
|
218
|
-
import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-
|
|
217
|
+
import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-sdk/kit/live-document';
|
|
219
218
|
// THE MODULE LANE, as the host sees it (`live-session-registry.ts`).
|
|
220
|
-
import { registerLiveSession } from '@volter/editor-
|
|
219
|
+
import { registerLiveSession } from '@volter/editor-sdk/kit/live-session-registry';
|
|
221
220
|
|
|
222
221
|
registerLiveSession({
|
|
223
222
|
id: 'module',
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
type ContractScenesStories,
|
|
36
36
|
createContractScenesStories,
|
|
37
37
|
} from '../host/authoring/contract-scenes-stories';
|
|
38
|
-
import { clearMountFailureReports } from '@volter/editor-
|
|
38
|
+
import { clearMountFailureReports } from '@volter/editor-sdk/kit/mount-failure-report';
|
|
39
39
|
import { PhaserLiveAuthoringAdapter } from '../host/authoring/phaser-live-authoring-adapter';
|
|
40
40
|
import { PixiAuthoringAdapter } from '../host/authoring/pixi-authoring-adapter';
|
|
41
41
|
import { createCreationSiteCanvasWriteTarget } from '../host/authoring/pixi-creation-site-write-target';
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
capturePixiDisplayObjectThumbnail,
|
|
45
45
|
registerPresentedPixiApps,
|
|
46
46
|
} from '@volter/editor-core/canvas-preview-frames';
|
|
47
|
-
import { editorConsole } from '@volter/editor-
|
|
47
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
48
48
|
import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
|
|
49
49
|
import { GAME_SURFACE_CONTAINMENT_CSS } from '../host/game-realm-page';
|
|
50
50
|
import {
|
|
@@ -54,9 +54,9 @@ import {
|
|
|
54
54
|
setGameSurface,
|
|
55
55
|
} from '../host/gated-globals';
|
|
56
56
|
import { authoringJournal } from '../host/history/json-history-resource';
|
|
57
|
-
import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-
|
|
57
|
+
import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-sdk/kit/live-document';
|
|
58
58
|
import { getCurrentProject } from '@volter/editor-core/project-manager';
|
|
59
|
-
import { recordRootReadiness } from '@volter/editor-
|
|
59
|
+
import { recordRootReadiness } from '@volter/editor-sdk/kit/readiness';
|
|
60
60
|
import type { MeasuredLoop } from '../host/same-realm-loop-gate';
|
|
61
61
|
import { projectContractSystemAdapters } from '@volter/game-runtime/adapter/ingest/contract-system-adapters';
|
|
62
62
|
import type { RenderDebugWiring } from '@volter/game-runtime/dev/render-debug-adapter';
|
|
@@ -346,7 +346,7 @@ function publishStructuralCanvasRuntime(
|
|
|
346
346
|
// host-owned registry carrier to compose with either: what the game itself
|
|
347
347
|
// declared is the only physics this route can have.
|
|
348
348
|
publishCanvasIngestSystems(game.name, undefined, declaredCanvasPhysics());
|
|
349
|
-
landIngestBootInEdit(
|
|
349
|
+
landIngestBootInEdit();
|
|
350
350
|
store.notifyIngestEdit();
|
|
351
351
|
clearMountFailureReports();
|
|
352
352
|
|
|
@@ -770,7 +770,7 @@ async function mountCanvasIngestRootInner(
|
|
|
770
770
|
mount.capture.captured?.renderer,
|
|
771
771
|
declaredPhysics ? physicsAdapter : null,
|
|
772
772
|
);
|
|
773
|
-
landIngestBootInEdit(
|
|
773
|
+
landIngestBootInEdit();
|
|
774
774
|
store.notifyIngestEdit();
|
|
775
775
|
clearMountFailureReports(); // D-W3: mount succeeded
|
|
776
776
|
// PD-3: the mount stood — but `contract-ready` may only be recorded when the
|
|
@@ -26,8 +26,8 @@ import {
|
|
|
26
26
|
type SystemAdapterMeasurement,
|
|
27
27
|
type WriteReachFacts,
|
|
28
28
|
} from '../host/coverage/capability-coverage';
|
|
29
|
-
import { inspectSystemAdapterSeam } from '@volter/editor-
|
|
30
|
-
import { editorConsole } from '@volter/editor-
|
|
29
|
+
import { inspectSystemAdapterSeam } from '@volter/editor-sdk/kit/system-seam-evidence';
|
|
30
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
31
31
|
import {
|
|
32
32
|
type MeasuredLoop,
|
|
33
33
|
measuredLoop,
|
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
import { measureAdapterReach } from '../host/adapter-reach';
|
|
9
9
|
import { setActiveAuthoring } from '@volter/editor-core/authoring/active-adapter';
|
|
10
10
|
import { setActiveSystems } from '@volter/editor-core/authoring/active-systems';
|
|
11
|
-
import { clearMountFailureReports } from '@volter/editor-
|
|
11
|
+
import { clearMountFailureReports } from '@volter/editor-sdk/kit/mount-failure-report';
|
|
12
12
|
import { resolveAllRoots } from '../host/binding-resolver';
|
|
13
|
-
import { editorConsole } from '@volter/editor-
|
|
13
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
14
14
|
import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
|
|
15
15
|
import { setGameInputGate } from '../host/gated-globals';
|
|
16
16
|
import { authoringJournal } from '../host/history/json-history-resource';
|
|
17
|
-
import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-
|
|
17
|
+
import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-sdk/kit/live-document';
|
|
18
18
|
import { DomAuthoringAdapter } from '../react/dom-authoring-adapter';
|
|
19
19
|
import type { ResolvedAdapterRoot, ResolvedGameManifest } from '@volter/editor-project/manifest/load';
|
|
20
20
|
import { serializeEntry, setActiveIngest } from './active-ingest';
|
|
@@ -148,7 +148,7 @@ async function mountDomIngestRootInner(store: EditorShellStore, folderId: string
|
|
|
148
148
|
|
|
149
149
|
setActiveAuthoring(adapter);
|
|
150
150
|
setActiveSystems({});
|
|
151
|
-
landIngestBootInEdit(
|
|
151
|
+
landIngestBootInEdit();
|
|
152
152
|
store.notifyIngestEdit();
|
|
153
153
|
clearMountFailureReports(); // D-W3: mount succeeded
|
|
154
154
|
|
|
@@ -253,7 +253,7 @@ export async function mountDomIngestRootFromManifest(
|
|
|
253
253
|
|
|
254
254
|
setActiveAuthoring(adapter);
|
|
255
255
|
setActiveSystems({});
|
|
256
|
-
landIngestBootInEdit(
|
|
256
|
+
landIngestBootInEdit();
|
|
257
257
|
store.notifyIngestEdit();
|
|
258
258
|
clearMountFailureReports(); // D-W3: mount succeeded
|
|
259
259
|
|
|
@@ -34,14 +34,14 @@ import {
|
|
|
34
34
|
formatMountFailureMessage,
|
|
35
35
|
getMountFailureReports,
|
|
36
36
|
type MountFailureReport,
|
|
37
|
-
} from '@volter/editor-
|
|
38
|
-
import { editorConsole } from '@volter/editor-
|
|
37
|
+
} from '@volter/editor-sdk/kit/mount-failure-report';
|
|
38
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
39
39
|
import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
|
|
40
|
-
import { registerEditorStateFacet } from '@volter/editor-
|
|
41
|
-
import { liveDocumentContainer } from '@volter/editor-
|
|
40
|
+
import { registerEditorStateFacet } from '@volter/editor-sdk/kit/editor-state-facets';
|
|
41
|
+
import { liveDocumentContainer } from '@volter/editor-sdk/kit/live-document';
|
|
42
42
|
import { fetchGameManifest, isManifestAbsence } from '@volter/editor-core/manifest-project';
|
|
43
43
|
import { getCurrentProject } from '@volter/editor-core/project-manager';
|
|
44
|
-
import {
|
|
44
|
+
import { onThreeStore } from '@volter/editor-core/shell-store-door';
|
|
45
45
|
import { ingestRoots, rootById } from '@volter/editor-project/adapter/manifest-interpreter';
|
|
46
46
|
import { MANIFEST_FILENAME } from '@volter/editor-project/manifest/filename';
|
|
47
47
|
import type { ResolvedAdapterRoot, ResolvedGameManifest } from '@volter/editor-project/manifest/load';
|
|
@@ -149,7 +149,7 @@ let _boundStore: EditorShellStore | null = null;
|
|
|
149
149
|
* `project-session-reset.ts`, fired by `project-manager.ts`'s
|
|
150
150
|
* `onProjectSessionEnd`.
|
|
151
151
|
*/
|
|
152
|
-
|
|
152
|
+
onThreeStore((store) => {
|
|
153
153
|
_boundStore = store;
|
|
154
154
|
clearMountFailureReports();
|
|
155
155
|
});
|
|
@@ -677,7 +677,7 @@ async function autoLaunchIngestInner(store: EditorShellStore): Promise<void> {
|
|
|
677
677
|
// never let an old bootstrap override it.
|
|
678
678
|
if (deferredIngestPlayActive()) return;
|
|
679
679
|
const { landIngestBootInEdit } = await import('./ingest-boot-viewport');
|
|
680
|
-
landIngestBootInEdit(
|
|
680
|
+
landIngestBootInEdit();
|
|
681
681
|
return;
|
|
682
682
|
}
|
|
683
683
|
await launchIngestRoutes(store);
|
|
@@ -22,11 +22,11 @@ import { measureAdapterReach } from '../host/adapter-reach';
|
|
|
22
22
|
import { setActiveAuthoring } from '@volter/editor-core/authoring/active-adapter';
|
|
23
23
|
import { setActiveSystems } from '@volter/editor-core/authoring/active-systems';
|
|
24
24
|
import { withContractHierarchy } from '../host/authoring/contract-hierarchy-authoring';
|
|
25
|
-
import { clearMountFailureReports } from '@volter/editor-
|
|
26
|
-
import { editorConsole } from '@volter/editor-
|
|
25
|
+
import { clearMountFailureReports } from '@volter/editor-sdk/kit/mount-failure-report';
|
|
26
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
27
27
|
import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
|
|
28
28
|
import { gameLoopGate, setGameInputGate } from '../host/gated-globals';
|
|
29
|
-
import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-
|
|
29
|
+
import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-sdk/kit/live-document';
|
|
30
30
|
import { pickGameCamera } from '@volter/editor-core/scene-framing';
|
|
31
31
|
import type { ResolvedAdapterRoot } from '@volter/editor-project/manifest/load';
|
|
32
32
|
import type { CaptureMechanism } from '@volter/threejs-runtime/adapter/ingest/scene-capture';
|
|
@@ -164,7 +164,7 @@ function activateCapturedThreeIngest(args: {
|
|
|
164
164
|
// level-streaming game captures on its first drawn frame and then parses its
|
|
165
165
|
// world in for several seconds afterwards.
|
|
166
166
|
store.focusOnScene(() => pickGameCamera(mount.capture.captured?.camera, liveScene));
|
|
167
|
-
landIngestBootInEdit(
|
|
167
|
+
landIngestBootInEdit();
|
|
168
168
|
store.notifyIngestEdit(); // ensure panels re-render against the override
|
|
169
169
|
clearMountFailureReports(); // D-W3: mount succeeded
|
|
170
170
|
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
|
|
19
19
|
import { setActiveAuthoring } from '@volter/editor-core/authoring/active-adapter';
|
|
20
20
|
import { setActiveSystems } from '@volter/editor-core/authoring/active-systems';
|
|
21
|
-
import { clearMountFailureReports } from '@volter/editor-
|
|
22
|
-
import { editorConsole } from '@volter/editor-
|
|
21
|
+
import { clearMountFailureReports } from '@volter/editor-sdk/kit/mount-failure-report';
|
|
22
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
23
23
|
import { reclaimGameRealm } from '../host/game-realm-reclaim';
|
|
24
24
|
import { setGameRealmReloadHandler } from '../host/gated-globals';
|
|
25
25
|
import {
|
package/src/play/play-mode.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { onAssetReload } from '@volter/editor-
|
|
1
|
+
import { onAssetReload } from '@volter/editor-sdk/kit/project-asset-refresh';
|
|
2
|
+
import { evictDreiCaches } from '../three/drei-asset-caches';
|
|
2
3
|
import { editorHost } from '@volter/editor-sdk/host';
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -33,22 +34,22 @@ import {
|
|
|
33
34
|
resolvesLiveOnly,
|
|
34
35
|
runWritePipe,
|
|
35
36
|
type WriteAck,
|
|
36
|
-
} from '@volter/editor-
|
|
37
|
+
} from '@volter/editor-sdk/kit/write-pipe';
|
|
37
38
|
import { resolveAllRootEntries } from '../host/binding-resolver';
|
|
38
39
|
import type { LogEntry } from '@volter/editor-core/editor-api';
|
|
39
40
|
import { endLogSession, flushLogEntries, startLogSession } from '@volter/editor-core/editor-api';
|
|
40
|
-
import type { ConsoleEntry } from '@volter/editor-
|
|
41
|
+
import type { ConsoleEntry } from '@volter/editor-sdk/kit/editor-console';
|
|
41
42
|
import {
|
|
42
43
|
editorConsole,
|
|
43
44
|
formatConsoleArgs,
|
|
44
45
|
resumeEditorConsoleCapture,
|
|
45
46
|
suspendEditorConsoleCapture,
|
|
46
|
-
} from '@volter/editor-
|
|
47
|
+
} from '@volter/editor-sdk/kit/editor-console';
|
|
47
48
|
import { EDITOR_PARTICIPANT_ID, sendControl } from '@volter/editor-core/editor-presence';
|
|
48
49
|
import {
|
|
49
50
|
isEditorPresentationActive,
|
|
50
51
|
subscribeEditorPresentationActivity,
|
|
51
|
-
} from '@volter/editor-
|
|
52
|
+
} from '@volter/editor-sdk/kit/editor-presentation-activity';
|
|
52
53
|
import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
|
|
53
54
|
import { GAME_SURFACE_CONTAINMENT_CSS } from '../host/game-realm-page';
|
|
54
55
|
import { reclaimGameRealm } from '../host/game-realm-reclaim';
|
|
@@ -60,9 +61,9 @@ import {
|
|
|
60
61
|
setGameInputGate,
|
|
61
62
|
setGameSurface,
|
|
62
63
|
} from '../host/gated-globals';
|
|
63
|
-
import { hierarchyProjectionFromProjectConfig } from '@volter/editor-
|
|
64
|
+
import { hierarchyProjectionFromProjectConfig } from '@volter/editor-sdk/kit/hierarchy-projection';
|
|
64
65
|
import { type JournalSubject, playJournal } from '../host/history/json-history-resource';
|
|
65
|
-
import { isEditableTarget, setActiveScope } from '@volter/editor-
|
|
66
|
+
import { isEditableTarget, setActiveScope } from '@volter/editor-sdk/kit/hotkeys';
|
|
66
67
|
import { projectBootstrapSettled } from '@volter/editor-core/initial-project';
|
|
67
68
|
import { registerGameNullSubject } from '@volter/editor-core/inspection/game-subject';
|
|
68
69
|
import { fetchGameManifest } from '@volter/editor-core/manifest-project';
|
|
@@ -73,21 +74,21 @@ import {
|
|
|
73
74
|
markPlayBootPhase,
|
|
74
75
|
type PlayBootPhase,
|
|
75
76
|
} from '@volter/editor-core/play-boot-phase';
|
|
76
|
-
import { presentationSurface } from '@volter/editor-
|
|
77
|
+
import { presentationSurface } from '@volter/editor-sdk/kit/presentation-surface';
|
|
77
78
|
import { getCurrentProject } from '@volter/editor-core/project-manager';
|
|
78
79
|
import {
|
|
79
80
|
beginProjectModuleSplitWatch,
|
|
80
81
|
clearProjectModuleSplitReports,
|
|
81
82
|
endProjectModuleSplitWatch,
|
|
82
83
|
formatProjectModuleSplitMessage,
|
|
83
|
-
} from '@volter/editor-
|
|
84
|
-
import { clearRootReadiness, recordRootReadiness } from '@volter/editor-
|
|
85
|
-
import {
|
|
84
|
+
} from '@volter/editor-sdk/kit/project-module-split';
|
|
85
|
+
import { clearRootReadiness, recordRootReadiness } from '@volter/editor-sdk/kit/readiness';
|
|
86
|
+
import { onThreeStore } from '@volter/editor-core/shell-store-door';
|
|
86
87
|
import { mountedStoryHasPixiContent } from '@volter/editor-core/stories/pixi-story-model';
|
|
87
88
|
import { domHasRenderableContent, threeSceneHasRenderableContent } from '../host/surface-content';
|
|
88
|
-
import { subscribeSurfaceKeyboard, surfaceHoldsKeyboard } from '@volter/editor-
|
|
89
|
+
import { subscribeSurfaceKeyboard, surfaceHoldsKeyboard } from '@volter/editor-sdk/kit/surface-keyboard';
|
|
89
90
|
import { publishToolContributionPlay } from '@volter/editor-core/tool-contribution-play';
|
|
90
|
-
import { liveWorldId } from '../host/viewport-root-presentation';
|
|
91
|
+
import { liveWorldId, presentThreeRoots } from '../host/viewport-root-presentation';
|
|
91
92
|
import {
|
|
92
93
|
cancelPendingWorkspacePlayUtilities,
|
|
93
94
|
revealWorkspacePlayUtilities,
|
|
@@ -945,7 +946,9 @@ function drainDebugEventsToPlayLog(): void {
|
|
|
945
946
|
}
|
|
946
947
|
|
|
947
948
|
// Asset bytes have changed, but a running game retains its own instances.
|
|
948
|
-
const stopAssetReload = onAssetReload(() => {
|
|
949
|
+
const stopAssetReload = onAssetReload((paths) => {
|
|
950
|
+
// Cleared whether or not a run is live, so the next run loads the new bytes.
|
|
951
|
+
void evictDreiCaches(paths);
|
|
949
952
|
if (!_instance.session) return;
|
|
950
953
|
markRestartRequired(
|
|
951
954
|
'Project assets changed — restart play to load the revised models or textures.',
|
|
@@ -1036,7 +1039,7 @@ function focusGameSurface(): void {
|
|
|
1036
1039
|
* workspace panel names Play to hand it the store; the authored viewport is
|
|
1037
1040
|
* read through `viewport-door.ts` when a session presents its roots.
|
|
1038
1041
|
*/
|
|
1039
|
-
|
|
1042
|
+
onThreeStore((store) => bindPlayMode(store));
|
|
1040
1043
|
|
|
1041
1044
|
export function bindPlayMode(store: EditorShellStore): void {
|
|
1042
1045
|
_ctx = { store, gameContainer: null! }; // set dynamically from the live document's container
|
|
@@ -1821,7 +1824,12 @@ async function enterPlayModeInner(
|
|
|
1821
1824
|
// liveHierarchy: first-party play mode is the ONLY adoption path that may
|
|
1822
1825
|
// synthesize descriptors for untagged runtime objects (anti-shim rule —
|
|
1823
1826
|
// ingest/module mounts adopt foreign scenes and must never fabricate).
|
|
1824
|
-
|
|
1827
|
+
// With no stage bound to present them (no Scene tab open: the Game tab and a model document
|
|
1828
|
+
// are the whole layout), Play still adopts its roots, so the hierarchy door and every
|
|
1829
|
+
// inspector reach the live objects exactly as they do beside a Scene tab.
|
|
1830
|
+
_instance.presentation =
|
|
1831
|
+
editorHost().viewport.presentRoots(session.game.roots) ??
|
|
1832
|
+
presentThreeRoots(store, session.game.roots);
|
|
1825
1833
|
markPlayBootPhase('installing play authoring for each root');
|
|
1826
1834
|
await installPlayRootAuthoring(
|
|
1827
1835
|
store,
|
|
@@ -1883,6 +1891,12 @@ async function enterPlayModeInner(
|
|
|
1883
1891
|
// baked into their own urls, so the gate has to be registered under it or
|
|
1884
1892
|
// the modules find the default realm's gate instead of their own.
|
|
1885
1893
|
setGameInputGate(() => instanceInputActive(mountId), mountId);
|
|
1894
|
+
// THE DEFAULT REALM follows the focused instance too. Module-lifetime code
|
|
1895
|
+
// that no mount id reaches lives there — a game's own `InputManager`
|
|
1896
|
+
// (`@volter/game-runtime`'s input, served through the realm shadow) — and
|
|
1897
|
+
// the stop path leaves it open, so a key aimed at a Model document while
|
|
1898
|
+
// the game played still reached it.
|
|
1899
|
+
setGameInputGate(() => instanceInputActive(focusedInstanceId()));
|
|
1886
1900
|
// Sync EVERY live instance's first-party InputManager from the play/tab/
|
|
1887
1901
|
// focus predicate whenever the store changes (a tab switch flips the active
|
|
1888
1902
|
// viewport for all of them). `resyncInstanceInputs` resolves each
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
*/
|
|
39
39
|
|
|
40
40
|
import { isRootCanvas } from '@volter/editor-core/composite-screenshot';
|
|
41
|
-
import { editorConsole } from '@volter/editor-
|
|
41
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
42
42
|
import {
|
|
43
43
|
type GameplayRecordingCapture,
|
|
44
44
|
type GameplayRecordingStarted,
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
type TimeSpentRow,
|
|
18
18
|
timeSpentRows,
|
|
19
19
|
} from '../host/components/frame-debugger-model';
|
|
20
|
-
import { isJsHeapReading, readJsHeap } from '@volter/editor-
|
|
20
|
+
import { isJsHeapReading, readJsHeap } from '@volter/editor-sdk/kit/js-heap';
|
|
21
21
|
import { useActivePerformanceSource } from '../host/use-active-performance-source';
|
|
22
22
|
import { editorHost, useHostAvailabilitySelector } from '@volter/editor-sdk/host';
|
|
23
23
|
import {
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* composed story of the project laid out as an isolated, labeled frame, with
|
|
5
5
|
* the root entry's own story (derived, never labeled — the story whose CSF
|
|
6
6
|
* `meta.component` is the entry's default export) as the frame it opens on.
|
|
7
|
-
* A project with no stories
|
|
8
|
-
*
|
|
7
|
+
* A project with no stories falls back to mounting the entry once against an
|
|
8
|
+
* inert Game.
|
|
9
9
|
*
|
|
10
10
|
* ## Why this is a package and not the host's
|
|
11
11
|
*
|
|
@@ -38,8 +38,7 @@
|
|
|
38
38
|
* them as `@volter/editor-game/react/…` and declares the dependency.
|
|
39
39
|
* - `@editor/authoring/react-story-board.ts` (the board geometry) —
|
|
40
40
|
* `@editor/components/RootSelectionOverlay.tsx:98`,
|
|
41
|
-
* `@editor/components/ReactCanvasControls.tsx:15
|
|
42
|
-
* `@editor/pasteboard-materialize.ts:20` and
|
|
41
|
+
* `@editor/components/ReactCanvasControls.tsx:15` and
|
|
43
42
|
* `@editor/canvas-board/CanvasBoardDocument.tsx:57` read its frame
|
|
44
43
|
* placements. Host chrome drawn OVER the board, which is a different
|
|
45
44
|
* question from how the board mounts.
|
|
@@ -65,17 +64,17 @@ import {
|
|
|
65
64
|
rememberPortableStory,
|
|
66
65
|
} from '@volter/editor-core/authoring/design-time-layers';
|
|
67
66
|
import type { DesignTimeMountContext } from '@volter/editor-core/authoring/design-time-mount-registry';
|
|
68
|
-
import { formatMountFailureMessage } from '@volter/editor-
|
|
67
|
+
import { formatMountFailureMessage } from '@volter/editor-sdk/kit/mount-failure-report';
|
|
69
68
|
import type { ReactStoryBoardSelectionIntent } from '@volter/editor-core/authoring/react-story-board';
|
|
70
69
|
import { createReactStoryBoard } from '@volter/editor-core/authoring/react-story-board';
|
|
71
70
|
import {
|
|
72
71
|
getRootCanvasViewport,
|
|
73
72
|
setRootCanvasViewport,
|
|
74
|
-
} from '@volter/editor-
|
|
75
|
-
import { recordAuthoringConsumerUse } from '@volter/editor-
|
|
76
|
-
import { CrashNullBoundary } from '@volter/editor-
|
|
73
|
+
} from '@volter/editor-sdk/kit/world-canvas-viewport-state';
|
|
74
|
+
import { recordAuthoringConsumerUse } from '@volter/editor-sdk/kit/authoring-seam-evidence';
|
|
75
|
+
import { CrashNullBoundary } from '@volter/editor-sdk/kit/crash-null-boundary';
|
|
77
76
|
import { readProjectTextFile } from '@volter/editor-core/editor-api';
|
|
78
|
-
import { editorConsole } from '@volter/editor-
|
|
77
|
+
import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
|
|
79
78
|
import {
|
|
80
79
|
resolveReactRootMountRuntime,
|
|
81
80
|
resolveWorldProviderForProject,
|
|
@@ -101,7 +100,7 @@ import {
|
|
|
101
100
|
import { domStoryBoardMembers } from '@volter/editor-core/stories/three-story-model';
|
|
102
101
|
import { getDesignTokens } from '@volter/editor-core/ui-source/inspect';
|
|
103
102
|
import { tierSourceWriteBackend } from '@volter/editor-core/ui-source/tier-source-write-backend';
|
|
104
|
-
import { recordViewportFirstFrame } from '@volter/editor-
|
|
103
|
+
import { recordViewportFirstFrame } from '@volter/editor-sdk/kit/viewport-activation-timings';
|
|
105
104
|
import { createAssetCache } from '@volter/threejs-runtime/assets';
|
|
106
105
|
import { createGameLoop } from '@volter/game-runtime/core/game-loop';
|
|
107
106
|
import type { ResolvedAdapterRoot } from '@volter/editor-project/manifest/load';
|
|
@@ -352,7 +351,7 @@ export async function mountReactDesignLayer(
|
|
|
352
351
|
// is only what picks the INITIAL frame). Without this the derivation would
|
|
353
352
|
// silently gate the entire design surface — a broken entry would take every
|
|
354
353
|
// story down with it.
|
|
355
|
-
if (portableStories.length > 0
|
|
354
|
+
if (portableStories.length > 0) {
|
|
356
355
|
const rememberedStoryId = rememberedPortableStory(projectRoot, candidate.worldId);
|
|
357
356
|
// Remembered choice, else the derived default, else discovery order —
|
|
358
357
|
// the same "no explicit default falls back to first" rule the registry
|
|
@@ -612,18 +611,13 @@ export async function mountReactDesignLayer(
|
|
|
612
611
|
// (the caller degrades it to a #18 disclosure node).
|
|
613
612
|
if (!entry.ok) throw entry.error instanceof Error ? entry.error : new Error(String(entry.error));
|
|
614
613
|
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
`this root's entry component${entryComponentName ? ` (${entryComponentName}, ${candidate.path})` : ''} ` +
|
|
623
|
-
'to make it this root’s default preview. Falling back to the inert-Game preview.',
|
|
624
|
-
'authoring',
|
|
625
|
-
);
|
|
626
|
-
}
|
|
614
|
+
editorConsole.warn(
|
|
615
|
+
`[design-time-layers] React root "${candidate.worldId}" has no portable CSF preview — the ` +
|
|
616
|
+
'project declares no UI stories. Add a *.stories.tsx; give it a `meta.component` of ' +
|
|
617
|
+
`this root's entry component${entryComponentName ? ` (${entryComponentName}, ${candidate.path})` : ''} ` +
|
|
618
|
+
'to make it this root’s default preview. Falling back to the inert-Game preview.',
|
|
619
|
+
'authoring',
|
|
620
|
+
);
|
|
627
621
|
|
|
628
622
|
const Entry = entry.Entry;
|
|
629
623
|
const WorldProvider = await resolveWorldProviderForProject();
|