Add foliage mask support to terrain creation and comparison

This commit is contained in:
2026-05-02 04:10:32 +02:00
parent 3653cf08c5
commit 12313b8d73

View File

@@ -1265,6 +1265,7 @@ export function createTerrain(
| "heights" | "heights"
| "layers" | "layers"
| "paintWeights" | "paintWeights"
| "foliageMasks"
> >
> = {} > = {}
): Terrain { ): Terrain {
@@ -1293,6 +1294,11 @@ export function createTerrain(
sampleCountZ, sampleCountZ,
overrides.paintWeights overrides.paintWeights
); );
const foliageMasks = normalizeTerrainFoliageMasks(
sampleCountX,
sampleCountZ,
overrides.foliageMasks
);
const visible = overrides.visible ?? DEFAULT_TERRAIN_VISIBLE; const visible = overrides.visible ?? DEFAULT_TERRAIN_VISIBLE;
const enabled = overrides.enabled ?? DEFAULT_TERRAIN_ENABLED; const enabled = overrides.enabled ?? DEFAULT_TERRAIN_ENABLED;
const collisionEnabled = normalizeTerrainCollisionEnabled( const collisionEnabled = normalizeTerrainCollisionEnabled(
@@ -1332,7 +1338,8 @@ export function createTerrain(
cellSize, cellSize,
heights, heights,
layers, layers,
paintWeights paintWeights,
foliageMasks
}; };
} }
@@ -1361,7 +1368,21 @@ export function areTerrainsEqual(left: Terrain, right: Terrain): boolean {
left.paintWeights.length === right.paintWeights.length && left.paintWeights.length === right.paintWeights.length &&
left.paintWeights.every( left.paintWeights.every(
(weight, index) => weight === right.paintWeights[index] (weight, index) => weight === right.paintWeights[index]
) ) &&
Object.keys(left.foliageMasks).length ===
Object.keys(right.foliageMasks).length &&
Object.entries(left.foliageMasks).every(([layerId, leftMask]) => {
const rightMask = right.foliageMasks[layerId];
return (
rightMask !== undefined &&
leftMask.layerId === rightMask.layerId &&
leftMask.resolutionX === rightMask.resolutionX &&
leftMask.resolutionZ === rightMask.resolutionZ &&
leftMask.values.length === rightMask.values.length &&
leftMask.values.every((value, index) => value === rightMask.values[index])
);
})
); );
} }