Implement terrain layer management (add/delete) and refine layer index clamping

This commit is contained in:
2026-05-13 00:49:20 +02:00
parent 53370d4212
commit 8d52accd2d

View File

@@ -9511,7 +9511,12 @@ export function App({
};
const handleTerrainPaintLayerChange = (value: string) => {
setActiveTerrainPaintLayerIndex(clampTerrainPaintLayerIndex(Number(value)));
setActiveTerrainPaintLayerIndex(
clampTerrainPaintLayerIndex(
Number(value),
selectedTerrain?.layers.length
)
);
};
const handleTerrainLayerMaterialChange = (
@@ -9559,6 +9564,54 @@ export function App({
}
};
const handleAddTerrainLayer = () => {
if (selectedTerrain === null) {
return;
}
try {
store.executeCommand(
createAddTerrainLayerCommand({
terrainId: selectedTerrain.id
})
);
setActiveTerrainPaintLayerIndex(selectedTerrain.layers.length);
setStatusMessage(
`Added ${getTerrainLayerLabel(selectedTerrain.layers.length).toLowerCase()}.`
);
} catch (error) {
setStatusMessage(getErrorMessage(error));
}
};
const handleDeleteTerrainLayer = (layerIndex: number) => {
if (selectedTerrain === null) {
return;
}
try {
store.executeCommand(
createDeleteTerrainLayerCommand({
terrainId: selectedTerrain.id,
layerIndex
})
);
setActiveTerrainPaintLayerIndex((currentLayerIndex) =>
clampTerrainPaintLayerIndex(
currentLayerIndex >= layerIndex
? currentLayerIndex - 1
: currentLayerIndex,
selectedTerrain.layers.length - 1
)
);
setStatusMessage(
`Removed ${getTerrainLayerLabel(layerIndex).toLowerCase()}.`
);
} catch (error) {
setStatusMessage(getErrorMessage(error));
}
};
const handleCommitTerrainBrushStroke = (
commit: TerrainBrushStrokeCommit
): boolean => {