auto-git:

[change] src/document/scene-document-validation.ts
This commit is contained in:
2026-04-22 13:57:35 +02:00
parent ff9ce87638
commit 607ad8cf2d

View File

@@ -49,6 +49,7 @@ import { type InteractionLink } from "../interactions/interaction-links";
import { import {
MAX_BOX_BRUSH_WATER_FOAM_CONTACT_LIMIT, MAX_BOX_BRUSH_WATER_FOAM_CONTACT_LIMIT,
hasPositiveBoxSize, hasPositiveBoxSize,
isBoxBrushLightFalloffMode,
isBoxBrushVolumeMode, isBoxBrushVolumeMode,
normalizeConeSideCount, normalizeConeSideCount,
normalizeRadialPrismSideCount, normalizeRadialPrismSideCount,
@@ -5630,7 +5631,7 @@ export function validateSceneDocument(
createDiagnostic( createDiagnostic(
"error", "error",
"invalid-box-volume-mode", "invalid-box-volume-mode",
"Box volume mode must be none, water, or fog.", "Box volume mode must be none, water, fog, or light.",
`${path}.volume.mode` `${path}.volume.mode`
) )
); );
@@ -5642,7 +5643,7 @@ export function validateSceneDocument(
createDiagnostic( createDiagnostic(
"error", "error",
"invalid-non-box-volume-mode", "invalid-non-box-volume-mode",
"Only whitebox boxes support water or fog volume modes.", "Only whitebox boxes support water, fog, or light volume modes.",
`${path}.volume.mode` `${path}.volume.mode`
) )
); );
@@ -5777,6 +5778,68 @@ export function validateSceneDocument(
} }
} }
} }
if (volume.mode === "light") {
const light = volume.light as Record<string, unknown> | undefined;
if (light === undefined) {
diagnostics.push(
createDiagnostic(
"error",
"invalid-box-light-settings",
"Light volumes must define light settings.",
`${path}.volume.light`
)
);
} else {
if (
typeof light.colorHex !== "string" ||
!isHexColorString(light.colorHex)
) {
diagnostics.push(
createDiagnostic(
"error",
"invalid-box-light-color",
"Light volume color must use #RRGGBB format.",
`${path}.volume.light.colorHex`
)
);
}
if (!isNonNegativeFiniteNumber(light.intensity)) {
diagnostics.push(
createDiagnostic(
"error",
"invalid-box-light-intensity",
"Light volume intensity must be a non-negative finite number.",
`${path}.volume.light.intensity`
)
);
}
if (!isNonNegativeFiniteNumber(light.padding)) {
diagnostics.push(
createDiagnostic(
"error",
"invalid-box-light-padding",
"Light volume padding must be a non-negative finite number.",
`${path}.volume.light.padding`
)
);
}
if (!isBoxBrushLightFalloffMode(light.falloff)) {
diagnostics.push(
createDiagnostic(
"error",
"invalid-box-light-falloff",
"Light volume falloff must be linear or smoothstep.",
`${path}.volume.light.falloff`
)
);
}
}
}
} }
for (const [pathKey, pathValue] of Object.entries(document.paths)) { for (const [pathKey, pathValue] of Object.entries(document.paths)) {