From b0ed4602308dda9f8ec93060ef2fda287ea4eb13 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Mon, 23 Aug 2021 11:45:15 +0200 Subject: [PATCH] small fix to the tree cutter --- .../com/seibel/lod/builders/LodBufferBuilder.java | 4 +++- .../java/com/seibel/lod/objects/LodDimension.java | 10 +++++----- src/main/java/com/seibel/lod/objects/LodRegion.java | 13 ++++++------- src/main/java/com/seibel/lod/proxy/ClientProxy.java | 4 ++-- src/main/java/com/seibel/lod/util/DetailUtil.java | 13 ++++++++----- 5 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java index 17a823050..0ab5275eb 100644 --- a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java @@ -318,7 +318,8 @@ public class LodBufferBuilder if (LodConfig.CLIENT.distanceGenerationMode.get() != DistanceGenerationMode.NONE) { int requesting = maxChunkGenRequests; - + + /* //we firstly make sure that the world is filled with half region wide block for (byte detailGen = LodConfig.CLIENT.maxGenerationDetail.get().detailLevel; detailGen <= LodUtil.REGION_DETAIL_LEVEL; detailGen++) { @@ -337,6 +338,7 @@ public class LodBufferBuilder requesting = maxChunkGenRequests - generationRequestList.size(); } + */ //we then fill the world with the rest of the block for (byte detailGen = LodConfig.CLIENT.maxGenerationDetail.get().detailLevel; detailGen <= LodUtil.REGION_DETAIL_LEVEL; detailGen++) diff --git a/src/main/java/com/seibel/lod/objects/LodDimension.java b/src/main/java/com/seibel/lod/objects/LodDimension.java index a6c210ce1..60a41cea6 100644 --- a/src/main/java/com/seibel/lod/objects/LodDimension.java +++ b/src/main/java/com/seibel/lod/objects/LodDimension.java @@ -296,8 +296,8 @@ public class LodDimension levelPos = new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionX, regionZ); for(byte index = LodUtil.BLOCK_DETAIL_LEVEL; index <= LodUtil.REGION_DETAIL_LEVEL; index++){ if(DetailUtil.getDistanceGeneration(index+1) > levelPos.minDistance(posX, posZ)){ - region = getRegion(levelPos.convert(DetailUtil.getLodDetail(index+1).detailLevel)); - region.cuteTree(DetailUtil.getLodDetail(index).detailLevel); + region = getRegion(levelPos.convert(DetailUtil.getLodDetail(index).detailLevel)); + region.cuteTree(DetailUtil.getLodDetail(index-1).detailLevel); break; } } @@ -387,7 +387,7 @@ public class LodDimension for(int i=0; i min = Collections.min(listOfData, LevelPos.getPosAndDetailComparator()); + Map.Entry min = Collections.min(listOfData, LevelPos.getPosComparator()); listOfData.remove(min); levelMinPosList.add(min); } @@ -417,7 +417,7 @@ public class LodDimension region = getRegion(new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z).convert(detailLevel)); if (region == null) { - region = new LodRegion(LodConfig.CLIENT.maxGenerationDetail.get().detailLevel, regionPos); + region = new LodRegion(DetailUtil.getLodDetail(detailLevel).detailLevel, regionPos); addOrOverwriteRegion(region); } else { @@ -441,7 +441,7 @@ public class LodDimension { try { - region = new LodRegion(LodConfig.CLIENT.maxGenerationDetail.get().detailLevel, regionPos); + region = new LodRegion(DetailUtil.getLodDetail(detailLevel).detailLevel, regionPos); addOrOverwriteRegion(region); } catch (ArrayIndexOutOfBoundsException e) diff --git a/src/main/java/com/seibel/lod/objects/LodRegion.java b/src/main/java/com/seibel/lod/objects/LodRegion.java index a56446b05..d9386d4b1 100644 --- a/src/main/java/com/seibel/lod/objects/LodRegion.java +++ b/src/main/java/com/seibel/lod/objects/LodRegion.java @@ -218,7 +218,7 @@ public class LodRegion implements Serializable for(int i=0; i min = Collections.min(levelPosList, LevelPos.getPosAndDetailComparator()); + Map.Entry min = Collections.min(levelPosList, LevelPos.getPosComparator()); levelPosList.remove(min); levelMinPosList.add(min); } @@ -580,15 +580,15 @@ public class LodRegion implements Serializable /** * This will be used to save a level * - * @param lod + * @param detailLevel * @return */ - public LevelContainer getLevel(byte lod) + public LevelContainer getLevel(byte detailLevel) { - if(lod < minDetailLevel){ - throw new IllegalArgumentException("getLevel asked for a level that does not exist: minimum " + minDetailLevel + " level requested " + lod); + if(detailLevel < minDetailLevel){ + throw new IllegalArgumentException("getLevel asked for a level that does not exist: minimum " + minDetailLevel + " level requested " + detailLevel); } - return new LevelContainer(lod, colors[lod], height[lod], depth[lod], generationType[lod], dataExistence[lod]); + return new LevelContainer(detailLevel, colors[detailLevel], height[detailLevel], depth[detailLevel], generationType[detailLevel], dataExistence[detailLevel]); } /** @@ -616,7 +616,6 @@ public class LodRegion implements Serializable { if(minDetailLevel < detailLevel) { - System.out.println("cutting at " + regionPosX + " " + regionPosZ + " " + detailLevel); for (byte tempLod = 0; tempLod < detailLevel; tempLod++) { colors[tempLod] = new byte[0][0][0]; diff --git a/src/main/java/com/seibel/lod/proxy/ClientProxy.java b/src/main/java/com/seibel/lod/proxy/ClientProxy.java index cdbf9de5e..b780d1d20 100644 --- a/src/main/java/com/seibel/lod/proxy/ClientProxy.java +++ b/src/main/java/com/seibel/lod/proxy/ClientProxy.java @@ -139,8 +139,8 @@ public class ClientProxy // LodConfig.CLIENT.drawLODs.set(true); LodConfig.CLIENT.debugMode.set(false); - LodConfig.CLIENT.maxDrawDetail.set(LodDetail.HALF); - LodConfig.CLIENT.maxGenerationDetail.set(LodDetail.FULL); + LodConfig.CLIENT.maxDrawDetail.set(LodDetail.SINGLE); + LodConfig.CLIENT.maxGenerationDetail.set(LodDetail.SINGLE); LodConfig.CLIENT.fogDistance.set(FogDistance.FAR); LodConfig.CLIENT.fogDrawOverride.set(FogDrawOverride.ALWAYS_DRAW_FOG_FANCY); diff --git a/src/main/java/com/seibel/lod/util/DetailUtil.java b/src/main/java/com/seibel/lod/util/DetailUtil.java index 9a29484c5..58359a186 100644 --- a/src/main/java/com/seibel/lod/util/DetailUtil.java +++ b/src/main/java/com/seibel/lod/util/DetailUtil.java @@ -25,15 +25,15 @@ public class DetailUtil private static LodDetail[] lodDetails = { LodDetail.FULL, - LodDetail.FULL, - LodDetail.HALF, LodDetail.HALF, LodDetail.QUAD, - LodDetail.QUAD, - LodDetail.DOUBLE, LodDetail.DOUBLE, LodDetail.SINGLE, LodDetail.SINGLE, + LodDetail.SINGLE, + LodDetail.SINGLE, + LodDetail.SINGLE, + LodDetail.SINGLE, LodDetail.SINGLE}; public static int getDistanceRendering(int detail) @@ -68,6 +68,9 @@ public class DetailUtil public static LodDetail getLodDetail(int detail) { - return lodDetails[detail]; + if(detail < minDetail) + return lodDetails[minDetail]; + else + return lodDetails[detail]; } }