From b46875599d4a2c31c6c775e35ab41e9100e5061f Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 15 Feb 2022 20:56:12 +0300 Subject: [PATCH] Hex chunk multithread fix --- .../world/generator/map/hex/HexBiomeChunk.java | 13 +++++++------ .../bclib/world/generator/map/hex/HexBiomeMap.java | 6 +++--- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/ru/bclib/world/generator/map/hex/HexBiomeChunk.java b/src/main/java/ru/bclib/world/generator/map/hex/HexBiomeChunk.java index 667f15b8..e75ddb81 100644 --- a/src/main/java/ru/bclib/world/generator/map/hex/HexBiomeChunk.java +++ b/src/main/java/ru/bclib/world/generator/map/hex/HexBiomeChunk.java @@ -19,12 +19,13 @@ public class HexBiomeChunk implements BiomeChunk { private static final byte SIDE_OFFSET = (byte) Math.round(Math.log(SIDE) / Math.log(2)); private static final byte SIDE_PRE_OFFSET = (byte) Math.round(Math.log(SIDE_PRE) / Math.log(2)); private static final short[][] NEIGHBOURS; - private static final BCLBiome[][] BUFFERS = new BCLBiome[2][SIZE]; private final BCLBiome[] biomes = new BCLBiome[SIZE]; public HexBiomeChunk(Random random, BiomePicker picker) { - for (BCLBiome[] buffer: BUFFERS) { + BCLBiome[][] buffers = new BCLBiome[2][SIZE]; + + for (BCLBiome[] buffer: buffers) { Arrays.fill(buffer, null); } @@ -33,15 +34,15 @@ public class HexBiomeChunk implements BiomeChunk { byte pz = (byte) (index & SIDE_PRE_MASK); px = (byte) (px * SCALE_PRE + random.nextInt(SCALE_PRE)); pz = (byte) (pz * SCALE_PRE + random.nextInt(SCALE_PRE)); - circle(BUFFERS[0], getIndex(px, pz), picker.getBiome(random), null); + circle(buffers[0], getIndex(px, pz), picker.getBiome(random), null); } boolean hasEmptyCells = true; byte bufferIndex = 0; while (hasEmptyCells) { - BCLBiome[] inBuffer = BUFFERS[bufferIndex]; + BCLBiome[] inBuffer = buffers[bufferIndex]; bufferIndex = (byte) ((bufferIndex + 1) & 1); - BCLBiome[] outBuffer = BUFFERS[bufferIndex]; + BCLBiome[] outBuffer = buffers[bufferIndex]; hasEmptyCells = false; for (short index = SIDE; index < MAX_SIDE; index++) { @@ -63,7 +64,7 @@ public class HexBiomeChunk implements BiomeChunk { } } - BCLBiome[] outBuffer = BUFFERS[bufferIndex]; + BCLBiome[] outBuffer = buffers[bufferIndex]; byte preN = (byte) (SIDE_MASK - 2); for (byte index = 0; index < SIDE; index++) { outBuffer[getIndex(index, (byte) 0)] = outBuffer[getIndex(index, (byte) 2)]; diff --git a/src/main/java/ru/bclib/world/generator/map/hex/HexBiomeMap.java b/src/main/java/ru/bclib/world/generator/map/hex/HexBiomeMap.java index 5f71c68d..91ea45c8 100644 --- a/src/main/java/ru/bclib/world/generator/map/hex/HexBiomeMap.java +++ b/src/main/java/ru/bclib/world/generator/map/hex/HexBiomeMap.java @@ -38,7 +38,7 @@ public class HexBiomeMap implements BiomeMap { noises[0] = new OpenSimplexNoise(random.nextInt()); noises[1] = new OpenSimplexNoise(random.nextInt()); noiseIterations = (byte) Math.min(Math.ceil(Math.log(scale) / Math.log(2)), 5); - this.seed = (int) (seed & 0xFFFFFFFF); + this.seed = random.nextInt(); } @Override @@ -73,8 +73,8 @@ public class HexBiomeMap implements BiomeMap { } @Override - public BiomeChunk getChunk(int cx, int cz, boolean update) { - ChunkPos pos = new ChunkPos(cx, cz); + public BiomeChunk getChunk(final int cx, final int cz, final boolean update) { + final ChunkPos pos = new ChunkPos(cx, cz); return chunks.computeIfAbsent(pos, i -> { Random random = new Random(MHelper.getSeed(seed, cx, cz)); HexBiomeChunk chunk = new HexBiomeChunk(random, picker);