This commit is contained in:
Daniel Mills 2021-07-19 06:32:44 -04:00
parent 6d117f824d
commit aa51048990
2 changed files with 27 additions and 7 deletions

View File

@ -143,7 +143,7 @@ public class IrisPregenerator {
else 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); listener.onRegionGenerated(x, z);

View File

@ -18,12 +18,15 @@
package com.volmit.iris.core.pregenerator; 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.Position2;
import com.volmit.iris.util.math.Spiraled; import com.volmit.iris.util.math.Spiraled;
import com.volmit.iris.util.math.Spiraler; import com.volmit.iris.util.math.Spiraler;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import java.util.Comparator;
@Builder @Builder
@Data @Data
public class PregenTask { public class PregenTask {
@ -33,19 +36,20 @@ public class PregenTask {
@Builder.Default @Builder.Default
private int radius = 1; private int radius = 1;
private static final KList<Position2> order = computeChunkOrder();
public void iterateRegions(Spiraled s) public void iterateRegions(Spiraled s)
{ {
new Spiraler(radius * 2, radius * 2, s) new Spiraler(radius * 2, radius * 2, s)
.setOffset(center.getX(), center.getZ()).drain(); .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) -> { for(Position2 i : order)
if (xx < 0 || xx > 31 || zz < 0 || zz > 31) { {
s.on(xx+(x<<5), zz+(z<<5)); s.on(i.getX() + (xr << 5), i.getZ() + (zr << 5));
} }
}).setOffset(15, 15).drain();
} }
public void iterateAllChunks(Spiraled s) public void iterateAllChunks(Spiraled s)
@ -53,4 +57,20 @@ public class PregenTask {
new Spiraler(radius * 2, radius * 2, (x, z) -> iterateRegion(x, z, s)) new Spiraler(radius * 2, radius * 2, (x, z) -> iterateRegion(x, z, s))
.setOffset(center.getX(), center.getZ()).drain(); .setOffset(center.getX(), center.getZ()).drain();
} }
private static KList<Position2> computeChunkOrder() {
Position2 center = new Position2(15, 15);
KList<Position2> 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;
}
} }