From 70289a365b4c343cd8b28139148b91a9a3db1c5f Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 2 May 2026 04:12:55 +0200 Subject: [PATCH] Add foliage mask tracking and key utilities to terrain brush stroke --- src/viewport-three/viewport-host.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/viewport-three/viewport-host.ts b/src/viewport-three/viewport-host.ts index 601c5985..69514671 100644 --- a/src/viewport-three/viewport-host.ts +++ b/src/viewport-three/viewport-host.ts @@ -389,6 +389,7 @@ interface ActiveTerrainBrushStroke { dirtyBounds: TerrainBrushDirtySampleBounds | null; heightSampleIndices: Set; paintWeightIndices: Set; + foliageMaskValueKeys: Set; referenceHeight: number | null; lastAppliedPoint: { x: number; @@ -397,6 +398,26 @@ interface ActiveTerrainBrushStroke { toolState: ArmedTerrainBrushState; } +function createTerrainFoliageMaskValueKey(layerId: string, index: number) { + return `${layerId}\u0000${index}`; +} + +function parseTerrainFoliageMaskValueKey(key: string): { + layerId: string; + index: number; +} { + const separatorIndex = key.lastIndexOf("\u0000"); + + if (separatorIndex === -1) { + throw new Error("Invalid terrain foliage mask value key."); + } + + return { + layerId: key.slice(0, separatorIndex), + index: Number(key.slice(separatorIndex + 1)) + }; +} + interface AffectedSelectionIds { brushIds: Set; terrainIds: Set;