Add ProjectDocument support for scene building and validation

This commit is contained in:
2026-04-27 17:22:25 +02:00
parent f8bc678f03
commit 3c95666e85
5 changed files with 146 additions and 4 deletions

View File

@@ -48,7 +48,7 @@ import {
type WhiteboxFaceId,
type FaceUvState
} from "../document/brushes";
import type { SceneDocument } from "../document/scene-document";
import type { ProjectDocument, SceneDocument } from "../document/scene-document";
import {
cloneProjectTimeSettings,
type ProjectTimeSettings
@@ -531,6 +531,7 @@ export interface BuildRuntimeSceneOptions {
loadedModelAssets?: Record<string, LoadedModelAsset>;
runtimeClock?: RuntimeClockState;
sceneEntryId?: string | null;
projectDocument?: ProjectDocument;
}
export function resolveRuntimeNavigationMode(
@@ -1837,7 +1838,8 @@ export function buildRuntimeSceneFromDocument(
assertRuntimeSceneBuildable(document, {
navigationMode,
loadedModelAssets: options.loadedModelAssets
loadedModelAssets: options.loadedModelAssets,
projectDocument: options.projectDocument
});
const enabledBrushes = Object.values(document.brushes).filter(

View File

@@ -1,8 +1,10 @@
import type { LoadedModelAsset } from "../assets/gltf-model-import";
import { getModelInstances } from "../assets/model-instances";
import type { Brush } from "../document/brushes";
import type { SceneDocument } from "../document/scene-document";
import type { ProjectDocument, SceneDocument } from "../document/scene-document";
import {
assertProjectSchedulingResourcesAreValid,
assertSceneDocumentLocalBuildContentIsValid,
assertSceneDocumentIsValid,
createDiagnostic,
formatSceneDiagnosticSummary,
@@ -21,6 +23,7 @@ export interface RuntimeSceneBuildValidationResult {
interface ValidateRuntimeSceneBuildOptions {
navigationMode: "firstPerson" | "thirdPerson";
loadedModelAssets?: Record<string, LoadedModelAsset>;
projectDocument?: ProjectDocument;
}
function validateBrushGeometry(brush: Brush, path: string, diagnostics: SceneDiagnostic[]) {
@@ -100,7 +103,12 @@ export function validateRuntimeSceneBuild(
}
export function assertRuntimeSceneBuildable(document: SceneDocument, options: ValidateRuntimeSceneBuildOptions) {
assertSceneDocumentIsValid(document);
if (options.projectDocument === undefined) {
assertSceneDocumentIsValid(document);
} else {
assertProjectSchedulingResourcesAreValid(options.projectDocument);
assertSceneDocumentLocalBuildContentIsValid(document);
}
const validation = validateRuntimeSceneBuild(document, options);