diff --git a/src/runtime-three/runtime-scene-validation.ts b/src/runtime-three/runtime-scene-validation.ts index ebd667a0..484a5735 100644 --- a/src/runtime-three/runtime-scene-validation.ts +++ b/src/runtime-three/runtime-scene-validation.ts @@ -1,5 +1,6 @@ import type { LoadedModelAsset } from "../assets/gltf-model-import"; import { getModelInstances } from "../assets/model-instances"; +import type { BoxBrush } from "../document/brushes"; import type { SceneDocument } from "../document/scene-document"; import { assertSceneDocumentIsValid, @@ -8,6 +9,7 @@ import { type SceneDiagnostic } from "../document/scene-document-validation"; import { getPrimaryPlayerStartEntity } from "../entities/entity-instances"; +import { validateBoxBrushGeometry } from "../geometry/box-brush-mesh"; import { buildGeneratedModelCollider, ModelColliderGenerationError } from "../geometry/model-instance-collider-generation"; export interface RuntimeSceneBuildValidationResult { @@ -21,6 +23,12 @@ interface ValidateRuntimeSceneBuildOptions { loadedModelAssets?: Record; } +function validateBrushGeometry(brush: BoxBrush, path: string, diagnostics: SceneDiagnostic[]) { + for (const diagnostic of validateBoxBrushGeometry(brush)) { + diagnostics.push(createDiagnostic("error", diagnostic.code, diagnostic.message, `${path}.geometry`, "build")); + } +} + export function validateRuntimeSceneBuild( document: SceneDocument, options: ValidateRuntimeSceneBuildOptions @@ -39,6 +47,10 @@ export function validateRuntimeSceneBuild( ); } + for (const brush of Object.values(document.brushes)) { + validateBrushGeometry(brush, `brushes.${brush.id}`, diagnostics); + } + for (const modelInstance of getModelInstances(document.modelInstances)) { const path = `modelInstances.${modelInstance.id}.collision.mode`; const asset = document.assets[modelInstance.assetId];