From 12313b8d73035b9d0a6cd0dbb234204f0ff55080 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 2 May 2026 04:10:32 +0200 Subject: [PATCH] Add foliage mask support to terrain creation and comparison --- src/document/terrains.ts | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/document/terrains.ts b/src/document/terrains.ts index 1fddef77..e6a1d309 100644 --- a/src/document/terrains.ts +++ b/src/document/terrains.ts @@ -1265,6 +1265,7 @@ export function createTerrain( | "heights" | "layers" | "paintWeights" + | "foliageMasks" > > = {} ): Terrain { @@ -1293,6 +1294,11 @@ export function createTerrain( sampleCountZ, overrides.paintWeights ); + const foliageMasks = normalizeTerrainFoliageMasks( + sampleCountX, + sampleCountZ, + overrides.foliageMasks + ); const visible = overrides.visible ?? DEFAULT_TERRAIN_VISIBLE; const enabled = overrides.enabled ?? DEFAULT_TERRAIN_ENABLED; const collisionEnabled = normalizeTerrainCollisionEnabled( @@ -1332,7 +1338,8 @@ export function createTerrain( cellSize, heights, layers, - paintWeights + paintWeights, + foliageMasks }; } @@ -1361,7 +1368,21 @@ export function areTerrainsEqual(left: Terrain, right: Terrain): boolean { left.paintWeights.length === right.paintWeights.length && left.paintWeights.every( (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]) + ); + }) ); }