diff --git a/src/main/java/de/bixilon/minosoft/data/world/World.kt b/src/main/java/de/bixilon/minosoft/data/world/World.kt index 93a8a9a3a..c7b98d076 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/World.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/World.kt @@ -309,7 +309,7 @@ class World( val offset = Vec3i.EMPTY + { random.nextInt(-radius, radius) } val blockPosition = origin + offset - val blockState = chunk.getWorld(offset, origin, blockPosition) ?: return + val blockState = chunk.traceBlock(offset, origin, blockPosition) ?: return blockState.block.randomTick(connection, blockState, blockPosition, random) } diff --git a/src/main/java/de/bixilon/minosoft/data/world/chunk/Chunk.kt b/src/main/java/de/bixilon/minosoft/data/world/chunk/Chunk.kt index 03964c191..7ae62744c 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/chunk/Chunk.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/chunk/Chunk.kt @@ -377,16 +377,16 @@ class Chunk( } } - fun getWorld(offset: Vec3i, origin: Vec3i, blockPosition: Vec3i = origin + offset): BlockState? { + fun traceBlock(offset: Vec3i, origin: Vec3i, blockPosition: Vec3i = origin + offset): BlockState? { val originChunkPosition = origin.chunkPosition val targetChunkPosition = blockPosition.chunkPosition val deltaChunkPosition = targetChunkPosition - originChunkPosition - return getWorld(blockPosition.inChunkPosition, deltaChunkPosition) + return traceBlock(blockPosition.inChunkPosition, deltaChunkPosition) } - private fun getWorld(inChunkSectionPosition: Vec3i, chunkOffset: Vec2i): BlockState? { + private fun traceBlock(inChunkSectionPosition: Vec3i, chunkOffset: Vec2i): BlockState? { if (chunkOffset.x == 0 && chunkOffset.y == 0) { return this[inChunkSectionPosition] } @@ -394,19 +394,19 @@ class Chunk( if (chunkOffset.x > 0) { chunkOffset.x-- - return neighbours[6].getWorld(inChunkSectionPosition, chunkOffset) + return neighbours[6].traceBlock(inChunkSectionPosition, chunkOffset) } if (chunkOffset.x < 0) { chunkOffset.x++ - return neighbours[1].getWorld(inChunkSectionPosition, chunkOffset) + return neighbours[1].traceBlock(inChunkSectionPosition, chunkOffset) } if (chunkOffset.y > 0) { chunkOffset.y-- - return neighbours[4].getWorld(inChunkSectionPosition, chunkOffset) + return neighbours[4].traceBlock(inChunkSectionPosition, chunkOffset) } if (chunkOffset.y < 0) { chunkOffset.y++ - return neighbours[3].getWorld(inChunkSectionPosition, chunkOffset) + return neighbours[3].traceBlock(inChunkSectionPosition, chunkOffset) } Broken("Can not get chunk from offset: $chunkOffset") diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/camera/Camera.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/camera/Camera.kt index d22463487..f882d1634 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/camera/Camera.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/camera/Camera.kt @@ -13,6 +13,10 @@ package de.bixilon.minosoft.gui.rendering.camera +import de.bixilon.kutil.concurrent.pool.DefaultThreadPool +import de.bixilon.kutil.concurrent.pool.ThreadPool +import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable +import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.kutil.time.TimeUtil import de.bixilon.minosoft.config.key.KeyActions import de.bixilon.minosoft.config.key.KeyBinding @@ -68,8 +72,10 @@ class Camera( entity._draw(TimeUtil.millis) } matrixHandler.draw() - visibilityGraph.draw() - targetHandler.raycast() + val latch = CountUpAndDownLatch(2) + DefaultThreadPool += ThreadPoolRunnable(ThreadPool.Priorities.HIGHER) { visibilityGraph.draw();latch.dec() } + DefaultThreadPool += ThreadPoolRunnable(ThreadPool.Priorities.HIGHER) { targetHandler.raycast();latch.dec() } fogManager.draw() + latch.await() } }