From bc4b8e1b3aa6381ab0ac736353019ae790ed5a6b Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 2 May 2026 04:11:47 +0200 Subject: [PATCH] Add foliage painting and erasing tools to terrain brush --- src/core/terrain-brush.ts | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/core/terrain-brush.ts b/src/core/terrain-brush.ts index 80263ff2..49459bac 100644 --- a/src/core/terrain-brush.ts +++ b/src/core/terrain-brush.ts @@ -5,7 +5,9 @@ export type TerrainBrushTool = | "lower" | "smooth" | "flatten" - | "paint"; + | "paint" + | "foliagePaint" + | "foliageErase"; export interface TerrainBrushSettings { radius: number; @@ -15,7 +17,7 @@ export interface TerrainBrushSettings { export interface ArmedTerrainSculptBrushState extends TerrainBrushSettings { terrainId: string; - tool: Exclude; + tool: Exclude; } export interface ArmedTerrainPaintBrushState extends TerrainBrushSettings { @@ -24,9 +26,17 @@ export interface ArmedTerrainPaintBrushState extends TerrainBrushSettings { layerIndex: number; } +export interface ArmedTerrainFoliagePaintBrushState + extends TerrainBrushSettings { + terrainId: string; + tool: "foliagePaint" | "foliageErase"; + foliageLayerId: string; +} + export type ArmedTerrainBrushState = | ArmedTerrainSculptBrushState - | ArmedTerrainPaintBrushState; + | ArmedTerrainPaintBrushState + | ArmedTerrainFoliagePaintBrushState; export interface TerrainSampleValuePatch { index: number; @@ -34,10 +44,15 @@ export interface TerrainSampleValuePatch { after: number; } +export interface TerrainFoliageMaskValuePatch extends TerrainSampleValuePatch { + layerId: string; +} + export interface TerrainBrushPatch { terrainId: string; heightSamples: TerrainSampleValuePatch[]; paintWeights: TerrainSampleValuePatch[]; + foliageMaskValues: TerrainFoliageMaskValuePatch[]; } export interface TerrainBrushStrokeCommit { @@ -124,6 +139,10 @@ export function getTerrainBrushToolLabel(tool: TerrainBrushTool): string { return "Flatten"; case "paint": return "Paint"; + case "foliagePaint": + return "Paint Foliage"; + case "foliageErase": + return "Erase Foliage"; } }