auto-git:

[change] src/viewport-three/viewport-host.ts
This commit is contained in:
2026-05-02 11:26:07 +02:00
parent 6008bff329
commit 0673aa214b

View File

@@ -59,7 +59,8 @@ import {
import { import {
getTerrainBrushCommandLabel, getTerrainBrushCommandLabel,
type ArmedTerrainBrushState, type ArmedTerrainBrushState,
type TerrainBrushStrokeCommit type TerrainBrushStrokeCommit,
type TerrainBrushTool
} from "../core/terrain-brush"; } from "../core/terrain-brush";
import { getWhiteboxSelectionFeedbackLabel } from "../core/whitebox-selection-feedback"; import { getWhiteboxSelectionFeedbackLabel } from "../core/whitebox-selection-feedback";
import type { WhiteboxSelectionMode } from "../core/whitebox-selection-mode"; import type { WhiteboxSelectionMode } from "../core/whitebox-selection-mode";
@@ -420,6 +421,27 @@ function parseTerrainFoliageMaskValueKey(key: string): {
}; };
} }
function isTerrainFoliageLayerMaskTool(
tool: TerrainBrushTool | null | undefined
): tool is "foliagePaint" | "foliageErase" {
return tool === "foliagePaint" || tool === "foliageErase";
}
function isTerrainFoliageBlockerMaskTool(
tool: TerrainBrushTool | null | undefined
): tool is "foliageBlockerPaint" | "foliageBlockerErase" {
return tool === "foliageBlockerPaint" || tool === "foliageBlockerErase";
}
function isTerrainFoliageMaskTool(
tool: TerrainBrushTool | null | undefined
): boolean {
return (
isTerrainFoliageLayerMaskTool(tool) ||
isTerrainFoliageBlockerMaskTool(tool)
);
}
interface AffectedSelectionIds { interface AffectedSelectionIds {
brushIds: Set<string>; brushIds: Set<string>;
terrainIds: Set<string>; terrainIds: Set<string>;
@@ -1626,18 +1648,14 @@ export class ViewportHost {
terrainBrushState?.tool === "paint" terrainBrushState?.tool === "paint"
? this.currentTerrainBrushState.layerIndex !== ? this.currentTerrainBrushState.layerIndex !==
terrainBrushState.layerIndex terrainBrushState.layerIndex
: (this.currentTerrainBrushState?.tool === "foliagePaint" || : isTerrainFoliageLayerMaskTool(this.currentTerrainBrushState?.tool) &&
this.currentTerrainBrushState?.tool === "foliageErase") && isTerrainFoliageLayerMaskTool(terrainBrushState?.tool)
(terrainBrushState?.tool === "foliagePaint" ||
terrainBrushState?.tool === "foliageErase")
? this.currentTerrainBrushState.foliageLayerId !== ? this.currentTerrainBrushState.foliageLayerId !==
terrainBrushState.foliageLayerId terrainBrushState.foliageLayerId
: this.currentTerrainBrushState?.tool === "paint" || : this.currentTerrainBrushState?.tool === "paint" ||
terrainBrushState?.tool === "paint" || terrainBrushState?.tool === "paint" ||
this.currentTerrainBrushState?.tool === "foliagePaint" || isTerrainFoliageMaskTool(this.currentTerrainBrushState?.tool) ||
this.currentTerrainBrushState?.tool === "foliageErase" || isTerrainFoliageMaskTool(terrainBrushState?.tool);
terrainBrushState?.tool === "foliagePaint" ||
terrainBrushState?.tool === "foliageErase";
this.currentTerrainBrushState = terrainBrushState; this.currentTerrainBrushState = terrainBrushState;
@@ -6526,8 +6544,7 @@ export class ViewportHost {
if ( if (
this.currentTerrainBrushState === null || this.currentTerrainBrushState === null ||
this.currentTerrainBrushState.terrainId !== terrainId || this.currentTerrainBrushState.terrainId !== terrainId ||
(this.currentTerrainBrushState.tool !== "foliagePaint" && !isTerrainFoliageLayerMaskTool(this.currentTerrainBrushState.tool)
this.currentTerrainBrushState.tool !== "foliageErase")
) { ) {
return null; return null;
} }
@@ -6535,11 +6552,38 @@ export class ViewportHost {
return this.currentTerrainBrushState.foliageLayerId; return this.currentTerrainBrushState.foliageLayerId;
} }
private isTerrainFoliageBlockerMaskPreviewActive(
terrainId: string
): boolean {
return (
this.currentTerrainBrushState !== null &&
this.currentTerrainBrushState.terrainId === terrainId &&
isTerrainFoliageBlockerMaskTool(this.currentTerrainBrushState.tool)
);
}
private isTerrainFoliageMaskPreviewActive(terrainId: string): boolean {
return (
this.getTerrainFoliageMaskPreviewLayerId(terrainId) !== null ||
this.isTerrainFoliageBlockerMaskPreviewActive(terrainId)
);
}
private getTerrainFoliageMaskPreviewColor(terrainId: string): number { private getTerrainFoliageMaskPreviewColor(terrainId: string): number {
return this.currentTerrainBrushState?.terrainId === terrainId && if (this.currentTerrainBrushState?.terrainId !== terrainId) {
this.currentTerrainBrushState.tool === "foliageErase" return TERRAIN_BRUSH_PREVIEW_FOLIAGE_PAINT_COLOR;
? TERRAIN_BRUSH_PREVIEW_FOLIAGE_ERASE_COLOR }
: TERRAIN_BRUSH_PREVIEW_FOLIAGE_PAINT_COLOR;
switch (this.currentTerrainBrushState.tool) {
case "foliageErase":
return TERRAIN_BRUSH_PREVIEW_FOLIAGE_ERASE_COLOR;
case "foliageBlockerPaint":
return TERRAIN_BRUSH_PREVIEW_FOLIAGE_BLOCKER_PAINT_COLOR;
case "foliageBlockerErase":
return TERRAIN_BRUSH_PREVIEW_FOLIAGE_BLOCKER_ERASE_COLOR;
default:
return TERRAIN_BRUSH_PREVIEW_FOLIAGE_PAINT_COLOR;
}
} }
private createTerrainMaterial(terrain: Terrain): Material { private createTerrainMaterial(terrain: Terrain): Material {
@@ -6573,7 +6617,7 @@ export class ViewportHost {
foliageMaskPreviewColorHex: foliageMaskPreviewColorHex:
this.getTerrainFoliageMaskPreviewColor(terrain.id), this.getTerrainFoliageMaskPreviewColor(terrain.id),
foliageMaskPreviewOpacity: foliageMaskPreviewOpacity:
this.getTerrainFoliageMaskPreviewLayerId(terrain.id) === null !this.isTerrainFoliageMaskPreviewActive(terrain.id)
? 0 ? 0
: 0.62, : 0.62,
emissiveHex: active emissiveHex: active
@@ -6600,7 +6644,7 @@ export class ViewportHost {
foliageMaskPreviewColorHex: foliageMaskPreviewColorHex:
this.getTerrainFoliageMaskPreviewColor(terrain.id), this.getTerrainFoliageMaskPreviewColor(terrain.id),
foliageMaskPreviewOpacity: foliageMaskPreviewOpacity:
this.getTerrainFoliageMaskPreviewLayerId(terrain.id) === null !this.isTerrainFoliageMaskPreviewActive(terrain.id)
? 0 ? 0
: 0.62, : 0.62,
emissiveHex: active emissiveHex: active