Add runtime scene build validation logic

This commit is contained in:
2026-03-31 03:41:03 +02:00
parent 4946cc99c7
commit d86f21aa4c

View File

@@ -0,0 +1,49 @@
import type { SceneDocument } from "../document/scene-document";
import {
assertSceneDocumentIsValid,
createDiagnostic,
formatSceneDiagnosticSummary,
type SceneDiagnostic
} from "../document/scene-document-validation";
import { getPrimaryPlayerStartEntity } from "../entities/entity-instances";
export interface RuntimeSceneBuildValidationResult {
diagnostics: SceneDiagnostic[];
errors: SceneDiagnostic[];
warnings: SceneDiagnostic[];
}
export function validateRuntimeSceneBuild(
document: SceneDocument,
navigationMode: "firstPerson" | "orbitVisitor"
): RuntimeSceneBuildValidationResult {
const diagnostics: SceneDiagnostic[] = [];
if (navigationMode === "firstPerson" && getPrimaryPlayerStartEntity(document.entities) === null) {
diagnostics.push(
createDiagnostic(
"error",
"missing-player-start",
"First-person run requires an authored Player Start. Place one or switch to Orbit Visitor.",
"entities",
"build"
)
);
}
return {
diagnostics,
errors: diagnostics.filter((diagnostic) => diagnostic.severity === "error"),
warnings: diagnostics.filter((diagnostic) => diagnostic.severity === "warning")
};
}
export function assertRuntimeSceneBuildable(document: SceneDocument, navigationMode: "firstPerson" | "orbitVisitor") {
assertSceneDocumentIsValid(document);
const validation = validateRuntimeSceneBuild(document, navigationMode);
if (validation.errors.length > 0) {
throw new Error(`Runtime build is blocked: ${formatSceneDiagnosticSummary(validation.errors)}`);
}
}