From 18b7835c4cbdf988c6b249c80c783cb7cea7d9b0 Mon Sep 17 00:00:00 2001 From: Morippi Date: Wed, 23 Feb 2022 17:16:05 +0100 Subject: [PATCH] Small fix to the region circle border --- .../LodBufferBuilderFactory.java | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/seibel/lod/core/builders/bufferBuilding/LodBufferBuilderFactory.java b/src/main/java/com/seibel/lod/core/builders/bufferBuilding/LodBufferBuilderFactory.java index dc477f39d..66643ab53 100644 --- a/src/main/java/com/seibel/lod/core/builders/bufferBuilding/LodBufferBuilderFactory.java +++ b/src/main/java/com/seibel/lod/core/builders/bufferBuilding/LodBufferBuilderFactory.java @@ -418,12 +418,25 @@ public class LodBufferBuilderFactory { chunkZdist = LevelPosUtil.getChunkPos(detailLevel, zAdj) - playerChunkZ; boolean adjPosInPlayerChunk = (chunkXdist == 0 && chunkZdist == 0); - double minDistance = LevelPosUtil.minDistance(detailLevel, xAdj, zAdj, playerX, playerZ) - 1.4142*(2 << detailLevel); - byte minLevel = DetailDistanceUtil.getDetailLevelFromDistance(minDistance); - - boolean shouldAdjPosBeRendered = detailLevel == minLevel; - boolean shouldLowerAdjPosBeRendered = detailLevel-1 == minLevel; - + boolean shouldAdjPosBeRendered = posToRender.contains(detailLevel, xAdj, zAdj); + boolean shouldLowerAdjPosBeRendered = posToRender.contains((byte) (detailLevel-1), xAdj*2, zAdj*2); + if(!(shouldAdjPosBeRendered || shouldLowerAdjPosBeRendered)) + { + + double minDistance = LevelPosUtil.minDistance(detailLevel, xAdj, zAdj, playerX, playerZ) - 1.4142*(2 << detailLevel); + LodRegion adjRegion = lodDim.getRegion(detailLevel, xAdj, zAdj); + byte minLevel; + if(adjRegion != null) + { + minLevel = (byte) Math.max(lodDim.getRegion(detailLevel, xAdj, zAdj).getMinDetailLevel(),DetailDistanceUtil.getDetailLevelFromDistance(minDistance)); + }else{ + minLevel = DetailDistanceUtil.getDetailLevelFromDistance(minDistance); + + } + + shouldAdjPosBeRendered = detailLevel == minLevel; + shouldLowerAdjPosBeRendered = detailLevel-1 == minLevel; + } // If the adj block is rendered in the same region and with same detail // and is positioned in a place that is not going to be rendered by vanilla game // then we can set this position as adj @@ -447,8 +460,8 @@ public class LodBufferBuilderFactory { adjData[lodDirection.ordinal() - 2][0] = lodDim.getAllData(adjDetail, xAdj, zAdj); } - xAdj += 1; - zAdj += 1; + xAdj += Math.abs(lodDirection.getNormal().x); + zAdj += Math.abs(lodDirection.getNormal().z); if (!isThisPositionGoingToBeRendered(LevelPosUtil.getChunkPos(adjDetail, xAdj), LevelPosUtil.getChunkPos(adjDetail, zAdj)) && !(posNotInPlayerChunk && adjPosInPlayerChunk)) {