From 3c39092cc7b28876d2232b49964114059042c815 Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Fri, 30 Oct 2026 20:09:02 -0400 Subject: [PATCH] Pruned riffle distance spreads - Stopped riffle distance spreads at cells that cannot reach the chunk --- .../hydrology/raster/RiffleProfile.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/core/src/main/java/art/arcane/iris/generation/hydrology/raster/RiffleProfile.java b/core/src/main/java/art/arcane/iris/generation/hydrology/raster/RiffleProfile.java index 75587a877..d56581969 100644 --- a/core/src/main/java/art/arcane/iris/generation/hydrology/raster/RiffleProfile.java +++ b/core/src/main/java/art/arcane/iris/generation/hydrology/raster/RiffleProfile.java @@ -15,6 +15,7 @@ final class RiffleProfile { private static final int LIMIT = 10 * RADIUS; private static final int DRY = Integer.MIN_VALUE; private static final int[] SIDES = {1, -1, GRID, -GRID}; + private static final int[] REMAINING = remaining(); private final List fields = new ArrayList<>(); @@ -85,6 +86,20 @@ final class RiffleProfile { return (int) Math.max(original, Math.min(head - 1L, Math.round(raised))); } + private static int[] remaining() { + int[] remaining = new int[GRID * GRID]; + int low = PADDING - 1; + int high = PADDING + CHUNK; + for (int z = 0; z < GRID; z++) { + for (int x = 0; x < GRID; x++) { + int outsideX = Math.max(0, Math.max(low - x, x - high)); + int outsideZ = Math.max(0, Math.max(low - z, z - high)); + remaining[z * GRID + x] = 10 * Math.max(outsideX, outsideZ); + } + } + return remaining; + } + private record Field(int crest, int[] distances) { } @@ -107,6 +122,9 @@ final class RiffleProfile { } private void offer(int cell, int distance) { + if (distance + REMAINING[cell] >= LIMIT) { + return; + } if (distances[cell] < LIMIT) { remove(cell); }