From d4580806d122f0d56c99bd389c7a8d019b236d31 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Sat, 21 Aug 2021 16:25:09 +0200 Subject: [PATCH] minor fixes, fixed z fighting --- .../com/seibel/lod/builders/LodBufferBuilder.java | 12 ++++++------ .../builders/worldGeneration/LodNodeGenWorker.java | 8 +++++--- src/main/java/com/seibel/lod/objects/LodRegion.java | 5 +++++ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java index d650edffd..92b8295f3 100644 --- a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java @@ -202,12 +202,12 @@ public class LodBufferBuilder /**TODO make this automatic and config dependant*/ - posListToRender.addAll(lodDim.getDataToRender(regionPos, playerBlockPosRounded.getX(), playerBlockPosRounded.getZ(), 0, 200, (byte) 0)); - posListToRender.addAll(lodDim.getDataToRender(regionPos, playerBlockPosRounded.getX(), playerBlockPosRounded.getZ(), 200, 400, (byte) 1)); - posListToRender.addAll(lodDim.getDataToRender(regionPos, playerBlockPosRounded.getX(), playerBlockPosRounded.getZ(), 400, 600, (byte) 2)); - posListToRender.addAll(lodDim.getDataToRender(regionPos, playerBlockPosRounded.getX(), playerBlockPosRounded.getZ(), 600, 800, (byte) 3)); - posListToRender.addAll(lodDim.getDataToRender(regionPos, playerBlockPosRounded.getX(), playerBlockPosRounded.getZ(), 800, 1000, (byte) 4)); - posListToRender.addAll(lodDim.getDataToRender(regionPos, playerBlockPosRounded.getX(), playerBlockPosRounded.getZ(), 1000, 10000000, (byte) 5)); + posListToRender.addAll(lodDim.getDataToRender(regionPos, playerBlockPosRounded.getX(), playerBlockPosRounded.getZ(), 0, 200, (byte) 0)); + posListToRender.addAll(lodDim.getDataToRender(regionPos, playerBlockPosRounded.getX(), playerBlockPosRounded.getZ(), 200, 400, (byte) 1)); + posListToRender.addAll(lodDim.getDataToRender(regionPos, playerBlockPosRounded.getX(), playerBlockPosRounded.getZ(), 400, 600, (byte) 2)); + posListToRender.addAll(lodDim.getDataToRender(regionPos, playerBlockPosRounded.getX(), playerBlockPosRounded.getZ(), 600, 800, (byte) 3)); + posListToRender.addAll(lodDim.getDataToRender(regionPos, playerBlockPosRounded.getX(), playerBlockPosRounded.getZ(), 800, 1000, (byte) 4)); + posListToRender.addAll(lodDim.getDataToRender(regionPos, playerBlockPosRounded.getX(), playerBlockPosRounded.getZ(), 1000, 10000000, (byte) 5)); for (LevelPos pos : posListToRender) { LevelPos chunkPos = pos.convert((byte) 3); diff --git a/src/main/java/com/seibel/lod/builders/worldGeneration/LodNodeGenWorker.java b/src/main/java/com/seibel/lod/builders/worldGeneration/LodNodeGenWorker.java index a5871478e..2019cfa82 100644 --- a/src/main/java/com/seibel/lod/builders/worldGeneration/LodNodeGenWorker.java +++ b/src/main/java/com/seibel/lod/builders/worldGeneration/LodNodeGenWorker.java @@ -194,8 +194,8 @@ public class LodNodeGenWorker implements IWorker // be added to the current LodDimension /**TODO i must disable this if, i will find a way to replace it*/ - //if (lodDim.regionIsInRange(pos.x / LodUtil.REGION_WIDTH_IN_CHUNKS, pos.z / LodUtil.REGION_WIDTH_IN_CHUNKS)) - //{ + if (lodDim.regionIsInRange(pos.x / LodUtil.REGION_WIDTH_IN_CHUNKS, pos.z / LodUtil.REGION_WIDTH_IN_CHUNKS)) + { // long startTime = System.currentTimeMillis(); switch(generationMode) @@ -237,8 +237,10 @@ public class LodNodeGenWorker implements IWorker // long endTime = System.currentTimeMillis(); // System.out.println(endTime - startTime); - //}// if in range + }// if in range + else{ + } } catch (Exception e) { diff --git a/src/main/java/com/seibel/lod/objects/LodRegion.java b/src/main/java/com/seibel/lod/objects/LodRegion.java index c35748637..8e5c64457 100644 --- a/src/main/java/com/seibel/lod/objects/LodRegion.java +++ b/src/main/java/com/seibel/lod/objects/LodRegion.java @@ -333,6 +333,11 @@ public class LodRegion implements Serializable int maxDistance = levelPos.maxDistance(playerPosX,playerPosZ,regionPosX,regionPosZ); int minDistance = levelPos.minDistance(playerPosX,playerPosZ,regionPosX,regionPosZ); + //To avoid z fighting: if the pos is touching the end radius at detailLevel + 1 then we stop + //cause this area will be occupied by bigger block + if(levelPos.detailLevel == detailLevel + 1 && end <= maxDistance && minDistance <= end){ + return levelPosList; + } if (!(start <= maxDistance && minDistance < end) || levelPos.detailLevel < detailLevel) {