From 7b807bcea2ad2554c8922c9c4d8b2d5cb6d4967a Mon Sep 17 00:00:00 2001 From: Leonardo Date: Sun, 19 Sep 2021 21:32:13 +0200 Subject: [PATCH] small changes --- .../seibel/lod/builders/LodBufferBuilder.java | 32 +++++++++++-------- .../lod/objects/VerticalLevelContainer.java | 8 ++--- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java index f94cc3981..45d443d7f 100644 --- a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java @@ -225,14 +225,18 @@ public class LodBufferBuilder if (LodConfig.CLIENT.worldGenerator.lodQualityMode.get() == LodQualityMode.HEIGHTMAP) { maxVerticalData = 1; - }else{ + } else + { maxVerticalData = DetailDistanceUtil.getMaxVerticalData(0); } - adjData.put(Direction.WEST, new long[maxVerticalData]); - adjData.put(Direction.EAST, new long[maxVerticalData]); - adjData.put(Direction.SOUTH, new long[maxVerticalData]); - adjData.put(Direction.NORTH, new long[maxVerticalData]); + for (Direction direction : Box.ADJ_DIRECTIONS) + { + if (adjData.containsKey(direction) && LodConfig.CLIENT.worldGenerator.lodQualityMode.get() == LodQualityMode.MULTI_LOD) + { + adjData.put(direction, new long[DetailDistanceUtil.getMaxVerticalData(0)]); + } + } //previous setToRender chache if (setsToRender[xR][zR] == null) { @@ -285,7 +289,6 @@ public class LodBufferBuilder { for (Direction direction : Box.ADJ_DIRECTIONS) { - xAdj = posX + direction.getNormal().getX(); zAdj = posZ + direction.getNormal().getZ(); chunkXdist = LevelPosUtil.getChunkPos(detailLevel, xAdj) - playerChunkPos.x; @@ -300,8 +303,8 @@ public class LodBufferBuilder adjData.get(direction)[0] = lodDim.getSingleData(detailLevel, xAdj, zAdj); } else { - for(int verticalIndex = 0; verticalIndex < lodDim.getMaxVerticalData(detailLevel, xAdj, zAdj); verticalIndex++) - adjData.get(direction)[verticalIndex] = lodDim.getData(detailLevel, xAdj, zAdj,verticalIndex); + for (int verticalIndex = 0; verticalIndex < lodDim.getMaxVerticalData(detailLevel, xAdj, zAdj); verticalIndex++) + adjData.get(direction)[verticalIndex] = lodDim.getData(detailLevel, xAdj, zAdj, verticalIndex); } } else @@ -323,8 +326,8 @@ public class LodBufferBuilder adjData.get(direction)[0] = lodDim.getSingleData(detailLevel, xAdj, zAdj); } else { - for(int verticalIndex = 0; verticalIndex < lodDim.getMaxVerticalData(detailLevel, xAdj, zAdj); verticalIndex++) - adjData.get(direction)[verticalIndex] = lodDim.getData(detailLevel, xAdj, zAdj,verticalIndex); + for (int verticalIndex = 0; verticalIndex < lodDim.getMaxVerticalData(detailLevel, xAdj, zAdj); verticalIndex++) + adjData.get(direction)[verticalIndex] = lodDim.getData(detailLevel, xAdj, zAdj, verticalIndex); } } else { @@ -351,13 +354,14 @@ public class LodBufferBuilder } else if (region.getLodQualityMode() == LodQualityMode.MULTI_LOD) { - int verticalIndex = 0; - long data = lodDim.getData(detailLevel, posX, posZ, verticalIndex); - while(!(DataPointUtil.isItVoid(data) || DataPointUtil.doesItExist(data))) + long data; + for (int verticalIndex = 0; verticalIndex < lodDim.getMaxVerticalData(detailLevel, posX, posZ); verticalIndex++) { + data = lodDim.getData(detailLevel, posX, posZ, verticalIndex); + if (DataPointUtil.isItVoid(data) || DataPointUtil.doesItExist(data)) + break; LodConfig.CLIENT.graphics.lodTemplate.get().template.addLodToBuffer(currentBuffer, playerBlockPosRounded, data, adjData, detailLevel, posX, posZ, boxCache[xR][zR], renderer.previousDebugMode, renderer.lightMap); - verticalIndex++; } } diff --git a/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java b/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java index 3bfda7c5e..dd461acc9 100644 --- a/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java +++ b/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java @@ -105,8 +105,8 @@ public class VerticalLevelContainer implements LevelContainer public void updateData(LevelContainer lowerLevelContainer, int posX, int posZ) { //We reset the array - //long[] dataToMerge = ThreadMapUtil.getVerticalUpdateArray(); - long[] dataToMerge = new long[4*maxVerticalData]; + //long[] dataToMerge = ThreadMapUtil.getVerticalUpdateArray(maxVerticalData); + long[] dataToMerge = new long[4*lowerLevelContainer.getMaxVerticalData()]; int childPosX; int childPosZ; @@ -119,8 +119,8 @@ public class VerticalLevelContainer implements LevelContainer { childPosX = 2 * posX + x; childPosZ = 2 * posZ + z; - for(int y = 0; y < maxVerticalData; y++) - dataToMerge[(z*2+x)*maxVerticalData + y] = lowerLevelContainer.getData(childPosX, childPosZ, y); + for(int verticalIndex = 0; verticalIndex < maxVerticalData; verticalIndex++) + dataToMerge[(z*2+x)*maxVerticalData + verticalIndex] = lowerLevelContainer.getData(childPosX, childPosZ, verticalIndex); } } data = DataPointUtil.mergeMultiData(dataToMerge, lowerLevelContainer.getDetailLevel());