auto-git:

[add] src/rendering/terrain-layer-material.ts
 [add] tests/domain/terrains.test.ts
 [change] src/app/App.tsx
 [change] src/core/terrain-brush.ts
 [change] src/document/migrate-scene-document.ts
 [change] src/document/scene-document-validation.ts
 [change] src/document/scene-document.ts
 [change] src/document/terrains.ts
 [change] src/geometry/terrain-brush.ts
 [change] src/geometry/terrain-mesh.ts
 [change] src/runtime-three/rapier-collision-world.ts
 [change] src/runtime-three/runtime-host.ts
 [change] src/runtime-three/runtime-scene-build.ts
 [change] src/viewport-three/ViewportCanvas.tsx
 [change] src/viewport-three/ViewportPanel.tsx
 [change] src/viewport-three/viewport-host.ts
 [change] tests/domain/build-runtime-scene.test.ts
 [change] tests/domain/rapier-collision-world.test.ts
 [change] tests/domain/terrain.command.test.ts
 [change] tests/domain/water-material.test.ts
 [change] tests/geometry/terrain-brush.test.ts
 [change] tests/geometry/terrain-mesh.test.ts
 [change] tests/serialization/scene-document-json.test.ts
 [change] tests/unit/terrain-foundation.integration.test.tsx
 [change] tests/unit/viewport-canvas.test.tsx
This commit is contained in:
2026-04-20 02:36:38 +02:00
parent 02f6d058a0
commit 94dec56eb4
25 changed files with 2199 additions and 70 deletions

View File

@@ -1,6 +1,12 @@
import type { Terrain } from "../document/terrains";
import { TERRAIN_LAYER_COUNT } from "../document/terrains";
export type TerrainBrushTool = "raise" | "lower" | "smooth" | "flatten";
export type TerrainBrushTool =
| "raise"
| "lower"
| "smooth"
| "flatten"
| "paint";
export interface TerrainBrushSettings {
radius: number;
@@ -8,11 +14,21 @@ export interface TerrainBrushSettings {
falloff: number;
}
export interface ArmedTerrainBrushState extends TerrainBrushSettings {
export interface ArmedTerrainSculptBrushState extends TerrainBrushSettings {
terrainId: string;
tool: TerrainBrushTool;
tool: Exclude<TerrainBrushTool, "paint">;
}
export interface ArmedTerrainPaintBrushState extends TerrainBrushSettings {
terrainId: string;
tool: "paint";
layerIndex: number;
}
export type ArmedTerrainBrushState =
| ArmedTerrainSculptBrushState
| ArmedTerrainPaintBrushState;
export interface TerrainBrushStrokeCommit {
terrain: Terrain;
commandLabel: string;
@@ -73,6 +89,17 @@ export function createDefaultTerrainBrushSettings(): TerrainBrushSettings {
};
}
export function clampTerrainPaintLayerIndex(layerIndex: number): number {
if (!Number.isFinite(layerIndex)) {
return 0;
}
return Math.min(
TERRAIN_LAYER_COUNT - 1,
Math.max(0, Math.round(layerIndex))
);
}
export function getTerrainBrushToolLabel(tool: TerrainBrushTool): string {
switch (tool) {
case "raise":
@@ -83,6 +110,8 @@ export function getTerrainBrushToolLabel(tool: TerrainBrushTool): string {
return "Smooth";
case "flatten":
return "Flatten";
case "paint":
return "Paint";
}
}