Feat(tests): Add validation and serialization support for foliage wind settings

This commit is contained in:
2026-05-21 06:05:20 +02:00
parent 1995257790
commit 18ff8464d6
3 changed files with 57 additions and 4 deletions

View File

@@ -1894,7 +1894,11 @@ describe("validateSceneDocument", () => {
enabled: "yes",
densityMultiplier: 9,
maxDistanceMultiplier: 0,
shadows: "close"
shadows: "close",
windEnabled: "yes",
windStrength: -0.1,
windSpeed: Number.NaN,
windDirectionDegrees: 420
}
} as any;
@@ -2070,6 +2074,22 @@ describe("validateSceneDocument", () => {
code: "invalid-foliage-quality-shadows",
path: "world.advancedRendering.foliage.shadows"
}),
expect.objectContaining({
code: "invalid-foliage-quality-wind-enabled",
path: "world.advancedRendering.foliage.windEnabled"
}),
expect.objectContaining({
code: "invalid-foliage-quality-wind-strength",
path: "world.advancedRendering.foliage.windStrength"
}),
expect.objectContaining({
code: "invalid-foliage-quality-wind-speed",
path: "world.advancedRendering.foliage.windSpeed"
}),
expect.objectContaining({
code: "invalid-foliage-quality-wind-direction",
path: "world.advancedRendering.foliage.windDirectionDegrees"
}),
expect.objectContaining({
code: "invalid-advanced-rendering-fog-path",
path: "world.advancedRendering.fogPath"

View File

@@ -196,22 +196,50 @@ describe("world settings helpers", () => {
expect(areWorldSettingsEqual(left, right)).toBe(false);
});
it("treats foliage wind settings as part of authored world equality", () => {
const left = createDefaultWorldSettings();
const right = cloneWorldSettings(left);
right.advancedRendering.foliage.windDirectionDegrees += 15;
expect(areWorldSettingsEqual(left, right)).toBe(false);
});
it("bounds resolved foliage quality multipliers", () => {
expect(
resolveFoliageQualitySettings({
enabled: true,
densityMultiplier: 9,
maxDistanceMultiplier: 0.01,
shadows: "full"
shadows: "full",
windEnabled: true,
windStrength: 9,
windSpeed: -1,
windDirectionDegrees: -45
})
).toEqual({
enabled: true,
densityMultiplier: 8,
maxDistanceMultiplier: 0.1,
shadows: "full"
shadows: "full",
windEnabled: true,
windStrength: 4,
windSpeed: 0,
windDirectionDegrees: 315
});
});
it("defaults missing legacy foliage wind settings during resolution", () => {
expect(
resolveFoliageQualitySettings({
enabled: true,
densityMultiplier: 1,
maxDistanceMultiplier: 1,
shadows: "near"
} as any)
).toEqual(createDefaultWorldSettings().advancedRendering.foliage);
});
it("treats the scene project-time lighting toggle as part of authored world equality", () => {
const left = createDefaultWorldSettings();
const right = cloneWorldSettings(left);

View File

@@ -44,6 +44,7 @@ import {
FOLIAGE_FOUNDATION_SCENE_DOCUMENT_VERSION,
FOLIAGE_MASKS_SCENE_DOCUMENT_VERSION,
FOLIAGE_QUALITY_SCENE_DOCUMENT_VERSION,
FOLIAGE_WIND_SCENE_DOCUMENT_VERSION,
IMPORTED_MODEL_COLLIDERS_SCENE_DOCUMENT_VERSION,
LENS_FLARE_SCENE_DOCUMENT_VERSION,
LOCAL_LIGHTS_AND_SKYBOX_SCENE_DOCUMENT_VERSION,
@@ -1561,7 +1562,11 @@ describe("scene document JSON", () => {
enabled: true,
densityMultiplier: 0.75,
maxDistanceMultiplier: 1.25,
shadows: "near"
shadows: "near",
windEnabled: true,
windStrength: 1.4,
windSpeed: 1.8,
windDirectionDegrees: 120
},
fogPath: "quality",
waterPath: "performance",