Implement foliage mask preview logic for terrain materials

This commit is contained in:
2026-05-02 04:18:07 +02:00
parent de32a15d0b
commit b5101a1119

View File

@@ -6493,6 +6493,26 @@ export class ViewportHost {
return this.currentDocument.materials[materialId] ?? null; return this.currentDocument.materials[materialId] ?? null;
} }
private getTerrainFoliageMaskPreviewLayerId(terrainId: string): string | null {
if (
this.currentTerrainBrushState === null ||
this.currentTerrainBrushState.terrainId !== terrainId ||
(this.currentTerrainBrushState.tool !== "foliagePaint" &&
this.currentTerrainBrushState.tool !== "foliageErase")
) {
return null;
}
return this.currentTerrainBrushState.foliageLayerId;
}
private getTerrainFoliageMaskPreviewColor(terrainId: string): number {
return this.currentTerrainBrushState?.terrainId === terrainId &&
this.currentTerrainBrushState.tool === "foliageErase"
? TERRAIN_BRUSH_PREVIEW_FOLIAGE_ERASE_COLOR
: TERRAIN_BRUSH_PREVIEW_FOLIAGE_PAINT_COLOR;
}
private createTerrainMaterial(terrain: Terrain): Material { private createTerrainMaterial(terrain: Terrain): Material {
const selected = isTerrainSelected(this.currentSelection, terrain.id); const selected = isTerrainSelected(this.currentSelection, terrain.id);
const hovered = isTerrainSelected(this.hoveredSelection, terrain.id); const hovered = isTerrainSelected(this.hoveredSelection, terrain.id);
@@ -6521,6 +6541,12 @@ export class ViewportHost {
return createTerrainLayerBlendMaterial({ return createTerrainLayerBlendMaterial({
layerTextures, layerTextures,
foliageMaskPreviewColorHex:
this.getTerrainFoliageMaskPreviewColor(terrain.id),
foliageMaskPreviewOpacity:
this.getTerrainFoliageMaskPreviewLayerId(terrain.id) === null
? 0
: 0.62,
emissiveHex: active emissiveHex: active
? TERRAIN_ACTIVE_EMISSIVE ? TERRAIN_ACTIVE_EMISSIVE
: selected : selected
@@ -6542,6 +6568,12 @@ export class ViewportHost {
return createTerrainLayerColorBlendMaterial({ return createTerrainLayerColorBlendMaterial({
layerColors, layerColors,
foliageMaskPreviewColorHex:
this.getTerrainFoliageMaskPreviewColor(terrain.id),
foliageMaskPreviewOpacity:
this.getTerrainFoliageMaskPreviewLayerId(terrain.id) === null
? 0
: 0.62,
emissiveHex: active emissiveHex: active
? TERRAIN_ACTIVE_EMISSIVE ? TERRAIN_ACTIVE_EMISSIVE
: selected : selected