From aa510489902acc05bc867c88ad474d18996cfd2f Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Mon, 19 Jul 2021 06:32:44 -0400 Subject: [PATCH] Fixes --- .../core/pregenerator/IrisPregenerator.java | 2 +- .../iris/core/pregenerator/PregenTask.java | 32 +++++++++++++++---- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java b/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java index fec274f1e..edded7f24 100644 --- a/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java +++ b/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java @@ -143,7 +143,7 @@ public class IrisPregenerator { else { - task.iterateRegion(x, z, (xx, zz) -> generator.generateChunk(xx, zz, listener)); + PregenTask.iterateRegion(x, z, (xx, zz) -> generator.generateChunk(xx, zz, listener)); } listener.onRegionGenerated(x, z); diff --git a/src/main/java/com/volmit/iris/core/pregenerator/PregenTask.java b/src/main/java/com/volmit/iris/core/pregenerator/PregenTask.java index ca3b26bf1..007b3a49b 100644 --- a/src/main/java/com/volmit/iris/core/pregenerator/PregenTask.java +++ b/src/main/java/com/volmit/iris/core/pregenerator/PregenTask.java @@ -18,12 +18,15 @@ package com.volmit.iris.core.pregenerator; +import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.math.Position2; import com.volmit.iris.util.math.Spiraled; import com.volmit.iris.util.math.Spiraler; import lombok.Builder; import lombok.Data; +import java.util.Comparator; + @Builder @Data public class PregenTask { @@ -33,19 +36,20 @@ public class PregenTask { @Builder.Default private int radius = 1; + private static final KList order = computeChunkOrder(); + public void iterateRegions(Spiraled s) { new Spiraler(radius * 2, radius * 2, s) .setOffset(center.getX(), center.getZ()).drain(); } - public void iterateRegion(int x, int z, Spiraled s) + public static void iterateRegion(int xr, int zr, Spiraled s) { - new Spiraler(33, 33, (xx, zz) -> { - if (xx < 0 || xx > 31 || zz < 0 || zz > 31) { - s.on(xx+(x<<5), zz+(z<<5)); - } - }).setOffset(15, 15).drain(); + for(Position2 i : order) + { + s.on(i.getX() + (xr << 5), i.getZ() + (zr << 5)); + } } public void iterateAllChunks(Spiraled s) @@ -53,4 +57,20 @@ public class PregenTask { new Spiraler(radius * 2, radius * 2, (x, z) -> iterateRegion(x, z, s)) .setOffset(center.getX(), center.getZ()).drain(); } + + private static KList computeChunkOrder() { + Position2 center = new Position2(15, 15); + KList p = new KList<>(); + new Spiraler(33, 33, (x, z) -> { + int xx = x + 15; + int zz = z + 15; + if (xx < 0 || xx > 31 || zz < 0 || zz > 31) { + return; + } + + p.add(new Position2(xx, zz)); + }).drain(); + p.sort(Comparator.comparing((i) -> i.distance(center))); + return p; + } }