Add comprehensive tests for foliage blocker masks and update terrain resizing tests

This commit is contained in:
2026-05-02 11:31:56 +02:00
parent e977999cc5
commit ab6aba70d0

View File

@@ -1,11 +1,14 @@
import { describe, expect, it } from "vitest"; import { describe, expect, it } from "vitest";
import { import {
createTerrainFoliageBlockerMask,
createTerrainFoliageMask, createTerrainFoliageMask,
getTerrainBounds, getTerrainBounds,
getTerrainFoliageBlockerMaskValueAtSample,
getTerrainFoliageMask, getTerrainFoliageMask,
getTerrainFoliageMaskValueAtSample, getTerrainFoliageMaskValueAtSample,
getTerrainPaintWeightSampleOffset, getTerrainPaintWeightSampleOffset,
sampleTerrainFoliageBlockerMaskAtWorldPosition,
sampleTerrainFoliageMaskAtWorldPosition, sampleTerrainFoliageMaskAtWorldPosition,
updateTerrainBoundsCacheAfterHeightPatch, updateTerrainBoundsCacheAfterHeightPatch,
resizeTerrainGrid, resizeTerrainGrid,
@@ -47,7 +50,12 @@ describe("terrain grid resizing", () => {
resolutionZ: 2, resolutionZ: 2,
values: [0, 1, 0, 0.5] values: [0, 1, 0, 0.5]
}) })
} },
foliageBlockerMask: createTerrainFoliageBlockerMask({
resolutionX: 2,
resolutionZ: 2,
values: [0, 0.25, 0.5, 1]
})
}); });
const resizedTerrain = resizeTerrainGrid(terrain, { const resizedTerrain = resizeTerrainGrid(terrain, {
@@ -72,6 +80,9 @@ describe("terrain grid resizing", () => {
expect(resizedMask?.resolutionX).toBe(3); expect(resizedMask?.resolutionX).toBe(3);
expect(resizedMask?.resolutionZ).toBe(3); expect(resizedMask?.resolutionZ).toBe(3);
expect(resizedMask?.values[4]).toBeCloseTo(0.375); expect(resizedMask?.values[4]).toBeCloseTo(0.375);
expect(resizedTerrain.foliageBlockerMask.resolutionX).toBe(3);
expect(resizedTerrain.foliageBlockerMask.resolutionZ).toBe(3);
expect(resizedTerrain.foliageBlockerMask.values[4]).toBeCloseTo(0.4375);
expect(terrain.position).toEqual({ expect(terrain.position).toEqual({
x: 0, x: 0,
y: 1, y: 1,
@@ -81,6 +92,45 @@ describe("terrain grid resizing", () => {
}); });
}); });
describe("terrain foliage blocker masks", () => {
it("creates, clones, normalizes, and samples blocker mask values", () => {
const terrain = createTerrain({
id: "terrain-foliage-blocker-mask-sample",
position: { x: 10, y: 0, z: 20 },
sampleCountX: 2,
sampleCountZ: 2,
cellSize: 2,
foliageBlockerMask: createTerrainFoliageBlockerMask({
resolutionX: 2,
resolutionZ: 2,
values: [0, 1.2, -1, 0.5]
})
});
const clonedTerrain = createTerrain(terrain);
expect(terrain.foliageBlockerMask.values).toEqual([0, 1, 0, 0.5]);
expect(clonedTerrain.foliageBlockerMask).toEqual(
terrain.foliageBlockerMask
);
expect(clonedTerrain.foliageBlockerMask).not.toBe(
terrain.foliageBlockerMask
);
expect(
getTerrainFoliageBlockerMaskValueAtSample(
terrain.foliageBlockerMask,
1,
1
)
).toBe(0.5);
expect(
sampleTerrainFoliageBlockerMaskAtWorldPosition(terrain, 11, 21)
).toBeCloseTo(0.375);
expect(
sampleTerrainFoliageBlockerMaskAtWorldPosition(terrain, 99, 99)
).toBeNull();
});
});
describe("terrain foliage masks", () => { describe("terrain foliage masks", () => {
it("creates, clones, normalizes, and samples foliage mask values", () => { it("creates, clones, normalizes, and samples foliage mask values", () => {
const foliageLayerId = "foliage-layer-sample"; const foliageLayerId = "foliage-layer-sample";