Hexmap chunk managment enhancements
This commit is contained in:
parent
a5c3c97630
commit
51e787c57e
2 changed files with 9 additions and 21 deletions
|
@ -11,7 +11,7 @@ loader_version= 0.12.12
|
||||||
fabric_version = 0.46.2+1.18
|
fabric_version = 0.46.2+1.18
|
||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version = 1.3.1
|
mod_version = 1.3.2
|
||||||
maven_group = ru.bclib
|
maven_group = ru.bclib
|
||||||
archives_base_name = bclib
|
archives_base_name = bclib
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package ru.bclib.world.generator.map.hex;
|
package ru.bclib.world.generator.map.hex;
|
||||||
|
|
||||||
|
import net.minecraft.world.level.ChunkPos;
|
||||||
import ru.bclib.interfaces.BiomeChunk;
|
import ru.bclib.interfaces.BiomeChunk;
|
||||||
import ru.bclib.interfaces.BiomeMap;
|
import ru.bclib.interfaces.BiomeMap;
|
||||||
import ru.bclib.interfaces.TriConsumer;
|
import ru.bclib.interfaces.TriConsumer;
|
||||||
|
@ -18,12 +19,10 @@ public class HexBiomeMap implements BiomeMap {
|
||||||
private static final float COEF_HALF = COEF * 0.5F;
|
private static final float COEF_HALF = COEF * 0.5F;
|
||||||
private static final float SIN = (float) Math.sin(0.4);
|
private static final float SIN = (float) Math.sin(0.4);
|
||||||
private static final float COS = (float) Math.cos(0.4);
|
private static final float COS = (float) Math.cos(0.4);
|
||||||
private static final Random RANDOM = new Random();
|
|
||||||
private static final float[] EDGE_CIRCLE_X;
|
private static final float[] EDGE_CIRCLE_X;
|
||||||
private static final float[] EDGE_CIRCLE_Z;
|
private static final float[] EDGE_CIRCLE_Z;
|
||||||
|
|
||||||
private final HashMap<Point, HexBiomeChunk> chunks = new HashMap<>();
|
private final HashMap<ChunkPos, HexBiomeChunk> chunks = new HashMap<>();
|
||||||
private final Point selector = new Point();
|
|
||||||
private final BiomePicker picker;
|
private final BiomePicker picker;
|
||||||
|
|
||||||
private final OpenSimplexNoise[] noises = new OpenSimplexNoise[2];
|
private final OpenSimplexNoise[] noises = new OpenSimplexNoise[2];
|
||||||
|
@ -75,26 +74,15 @@ public class HexBiomeMap implements BiomeMap {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BiomeChunk getChunk(int cx, int cz, boolean update) {
|
public BiomeChunk getChunk(int cx, int cz, boolean update) {
|
||||||
HexBiomeChunk chunk;
|
ChunkPos pos = new ChunkPos(cx, cz);
|
||||||
|
return chunks.computeIfAbsent(pos, i -> {
|
||||||
synchronized (selector) {
|
Random random = new Random(MHelper.getSeed(seed, cx, cz));
|
||||||
selector.setLocation(cx, cz);
|
HexBiomeChunk chunk = new HexBiomeChunk(random, picker);
|
||||||
chunk = chunks.get(selector);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (chunk == null) {
|
|
||||||
synchronized (RANDOM) {
|
|
||||||
RANDOM.setSeed(MHelper.getSeed(seed, cx, cz));
|
|
||||||
chunk = new HexBiomeChunk(RANDOM, picker);
|
|
||||||
}
|
|
||||||
chunks.put(new Point(cx, cz), chunk);
|
|
||||||
|
|
||||||
if (update && processor != null) {
|
if (update && processor != null) {
|
||||||
processor.accept(cx, cz, chunk.getSide());
|
processor.accept(cx, cz, chunk.getSide());
|
||||||
}
|
}
|
||||||
}
|
return chunk;
|
||||||
|
});
|
||||||
return chunk;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue