Add foliage layer support to terrain brush stamps

This commit is contained in:
2026-05-02 04:12:42 +02:00
parent da753fc560
commit f66358a21e

View File

@@ -284,6 +284,7 @@ export function applyTerrainBrushStamp(options: {
tool: TerrainBrushTool; tool: TerrainBrushTool;
referenceHeight?: number | null; referenceHeight?: number | null;
layerIndex?: number | null; layerIndex?: number | null;
foliageLayerId?: string | null;
}): Terrain { }): Terrain {
const nextTerrain = createTerrain(options.terrain); const nextTerrain = createTerrain(options.terrain);
const result = applyTerrainBrushStampInPlace({ const result = applyTerrainBrushStampInPlace({
@@ -301,6 +302,7 @@ export function applyTerrainBrushStampInPlace(options: {
tool: TerrainBrushTool; tool: TerrainBrushTool;
referenceHeight?: number | null; referenceHeight?: number | null;
layerIndex?: number | null; layerIndex?: number | null;
foliageLayerId?: string | null;
}): TerrainBrushStampMutationResult { }): TerrainBrushStampMutationResult {
const { const {
terrain, terrain,
@@ -308,7 +310,8 @@ export function applyTerrainBrushStampInPlace(options: {
settings, settings,
tool, tool,
referenceHeight = null, referenceHeight = null,
layerIndex = null layerIndex = null,
foliageLayerId = null
} = options; } = options;
const { radius, strength, falloff } = settings; const { radius, strength, falloff } = settings;
const minSampleX = Math.max( const minSampleX = Math.max(
@@ -461,9 +464,6 @@ export function applyTerrainBrushStampInPlace(options: {
} }
case "foliagePaint": case "foliagePaint":
case "foliageErase": { case "foliageErase": {
const foliageLayerId =
"foliageLayerId" in settings ? settings.foliageLayerId : null;
if (foliageLayerId === null) { if (foliageLayerId === null) {
throw new Error( throw new Error(
"Foliage terrain brush stamps require a foliage layer id." "Foliage terrain brush stamps require a foliage layer id."
@@ -636,6 +636,11 @@ export function createTerrainBrushPatchFromTerrains(options: {
}); });
} }
foliageMaskValues.sort(
(left, right) =>
left.layerId.localeCompare(right.layerId) || left.index - right.index
);
return { return {
terrainId: before.id, terrainId: before.id,
heightSamples, heightSamples,