From 93dd441708f545a18e71e73bc79755264563b7d8 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 22 Aug 2021 18:24:41 -0500 Subject: [PATCH] Close #60 (LODs rendering on top of the player) and improve get Lod pos to skip --- .../com/seibel/lod/render/LodRenderer.java | 2 +- .../java/com/seibel/lod/util/LodUtil.java | 29 +++++++++---------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/seibel/lod/render/LodRenderer.java b/src/main/java/com/seibel/lod/render/LodRenderer.java index c07dca1a0..567cb95dc 100644 --- a/src/main/java/com/seibel/lod/render/LodRenderer.java +++ b/src/main/java/com/seibel/lod/render/LodRenderer.java @@ -234,7 +234,7 @@ public class LodRenderer // see if the chunks Minecraft is going to render are the // same as last time - if (!vanillaRenderedChunks.containsAll(chunkPosToSkip)) + if (!vanillaRenderedChunks.containsAll(chunkPosToSkip) || vanillaRenderedChunks.size() != chunkPosToSkip.size()) { regen = true; vanillaRenderedChunks = chunkPosToSkip; diff --git a/src/main/java/com/seibel/lod/util/LodUtil.java b/src/main/java/com/seibel/lod/util/LodUtil.java index 3042de2e5..48e921772 100644 --- a/src/main/java/com/seibel/lod/util/LodUtil.java +++ b/src/main/java/com/seibel/lod/util/LodUtil.java @@ -22,6 +22,7 @@ import java.io.File; import java.util.HashSet; import com.seibel.lod.objects.LevelPos; +import com.seibel.lod.objects.LodDataPoint; import com.seibel.lod.objects.LodDimension; import com.seibel.lod.objects.RegionPos; @@ -308,7 +309,6 @@ public class LodUtil public static HashSet getNearbyLodChunkPosToSkip(LodDimension lodDim, BlockPos playerPos) { int chunkRenderDist = mc.options.renderDistance; - int blockRenderDist = chunkRenderDist * 16; ChunkPos centerChunk = new ChunkPos(playerPos); // skip chunks that are already going to be rendered by Minecraft @@ -319,23 +319,20 @@ public class LodUtil { for (int z = centerChunk.z - chunkRenderDist; z < centerChunk.z + chunkRenderDist; z++) { + LevelPos levelPos = new LevelPos(LodUtil.CHUNK_DETAIL_LEVEL, x, z); + if (!lodDim.doesDataExist(levelPos)) + continue; - LevelPos levelPos = new LevelPos((byte) 4, x, z); - if (lodDim.doesDataExist(levelPos)) + LodDataPoint data = lodDim.getData(levelPos); + if (data == null) + continue; + + short lodAverageHeight = data.height; + if (playerPos.getY() <= lodAverageHeight) { - short lodHighestPoint = lodDim.getData(levelPos).height; - - if (playerPos.getY() < lodHighestPoint) - { - // don't draw Lod's that are taller than the player - // to prevent LODs being drawn on top of the player - posToSkip.add(new ChunkPos(x, z)); - } - else if (blockRenderDist < Math.abs(playerPos.getY() - lodHighestPoint)) - { - // draw Lod's that are lower than the player's view range - posToSkip.remove(new ChunkPos(x, z)); - } + // don't draw Lod's that are taller than the player + // to prevent LODs being drawn on top of the player + posToSkip.add(new ChunkPos(x, z)); } } }