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;