Standing surface pools

- hydrology.surfacePools defines bowls filled with their own fluid; riverPolicy.surfacePools opts areas in
- Pools are independent SURFACE_POOL courses with one STANDING_POOL segment, shaped by the erosion field, kept clear of rivers and off slopes
- Locators accept the pool selector and pool ids; validator, renderer, probes and docs follow
This commit is contained in:
Brian Neumann-Fopiano
2026-09-02 00:29:32 -04:00
parent 13bce7aa42
commit 479b94d6a2
36 changed files with 841 additions and 80 deletions
@@ -215,7 +215,8 @@ public final class HydrologyPackProbe {
enum CoverageFamily {
SURFACE,
UNDERGROUND,
DEEP
DEEP,
POOL
}
enum VerificationFamily {
@@ -4080,6 +4081,7 @@ public final class HydrologyPackProbe {
case SURFACE -> CoverageFamily.SURFACE;
case UNDERGROUND -> CoverageFamily.UNDERGROUND;
case DEEP_FLUID -> CoverageFamily.DEEP;
case SURFACE_POOL -> CoverageFamily.POOL;
};
return new ConfiguredCoverage(family, course.profileKey());
}
@@ -265,7 +265,7 @@ public final class HydrologyPlannerProbe {
4
),
HydrologyPlannerSettings.Geometry.defaults(),
List.of()
List.of(), List.of()
);
}
@@ -304,7 +304,7 @@ public final class HydrologyPlannerProbe {
"shore",
"dry",
"flooded",
List.of("water")
List.of("water"), List.of()
);
};
}
@@ -355,7 +355,7 @@ public final class HydrologyPlannerProbe {
"shore",
"bank",
"flooded",
List.of("water")
List.of("water"), List.of()
);
};
}
@@ -476,7 +476,7 @@ public final class HydrologyPlannerProbe {
8
),
HydrologyPlannerSettings.Geometry.defaults(),
List.of(deepFluid)
List.of(deepFluid), List.of()
);
}
@@ -521,7 +521,7 @@ public final class HydrologyPlannerProbe {
"shore",
"dry",
"flooded",
List.of("water")
List.of("water"), List.of()
);
};
}
@@ -554,7 +554,7 @@ public final class HydrologyPlannerProbe {
"shore",
"dry",
"flooded",
List.of("water")
List.of("water"), List.of()
);
}
@@ -186,7 +186,7 @@ public final class RiverTransectProbe {
writeTileDiagnostics(new File(configuration.output(), "tile-diagnostics.png"), tile, complex, runtime, seaLevel);
List<CourseSummary> summaries = new ArrayList<>();
for (RiverCourse course : tile.courses()) {
if (course.type() != RiverCourseType.SURFACE) {
if (course.type() != RiverCourseType.SURFACE && course.type() != RiverCourseType.SURFACE_POOL) {
continue;
}
List<HydrologyPoint> exposedPath = exposedPath(course);