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
{
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);

View File

@ -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<Position2> 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<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;
}
}