From 9b216fedad9d7be01e3eb5f4792ed3223f1a7bec Mon Sep 17 00:00:00 2001 From: Leonardo Date: Tue, 14 Sep 2021 01:05:41 +0200 Subject: [PATCH] Vertical lod now works (optimization required) --- .../com/seibel/lod/builders/LodBuilder.java | 16 +++++++------ .../lod/objects/VerticalLevelContainer.java | 2 +- .../com/seibel/lod/util/DataPointUtil.java | 24 +++++++++++++------ 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/seibel/lod/builders/LodBuilder.java b/src/main/java/com/seibel/lod/builders/LodBuilder.java index cbe58457d..30545193a 100644 --- a/src/main/java/com/seibel/lod/builders/LodBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodBuilder.java @@ -189,19 +189,20 @@ public class LodBuilder posX = LevelPosUtil.convert((byte) 0, chunk.getPos().x * 16 + startX, detail.detailLevel); posZ = LevelPosUtil.convert((byte) 0, chunk.getPos().z * 16 + startZ, detail.detailLevel); long[] data; - long[] dataToMerge; + long[][] dataToMerge; //data = ThreadMapUtil.getSingleAddDataArray(); - dataToMerge = createSingleDataToMerge(detail, chunk, config, startX, startZ, endX, endZ); - long[][] dataToMerge2 = new long[dataToMerge.length][]; + //dataToMerge = createSingleDataToMerge(detail, chunk, config, startX, startZ, endX, endZ); + /*long[][] dataToMerge2 = new long[dataToMerge.length][]; for (int index = 0; index < dataToMerge.length; index++) { dataToMerge2[index] = new long[]{dataToMerge[index]}; - } + }*/ //data[0] = DataPointUtil.mergeSingleData(dataToMerge); - //dataToMerge = createVerticalDataToMerge(detail, chunk, config, startX, startZ, endX, endZ); - data = DataPointUtil.mergeVerticalData(dataToMerge2); - + dataToMerge = createVerticalDataToMerge(detail, chunk, config, startX, startZ, endX, endZ); + data = DataPointUtil.mergeVerticalData(dataToMerge); + if(data.length == 0 || data == null) + data = new long[]{DataPointUtil.EMPTY_DATA}; boolean isServer = config.distanceGenerationMode == DistanceGenerationMode.SERVER; lodDim.addData(detailLevel, posX, @@ -209,6 +210,7 @@ public class LodBuilder data, false, isServer); + } lodDim.updateData(LodUtil.CHUNK_DETAIL_LEVEL, chunk.getPos().x, chunk.getPos().z); } catch (Exception e) diff --git a/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java b/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java index f8a96d9a2..0017b5eef 100644 --- a/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java +++ b/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java @@ -42,7 +42,7 @@ public class VerticalLevelContainer implements LevelContainer public boolean doesItExist(int posX, int posZ){ long[] data = getData(posX,posZ); - return DataPointUtil.doesItExist(data[0]); + return (data != null && DataPointUtil.doesItExist(data[0])); } public VerticalLevelContainer(String inputString) diff --git a/src/main/java/com/seibel/lod/util/DataPointUtil.java b/src/main/java/com/seibel/lod/util/DataPointUtil.java index d946ffe00..142f291ce 100644 --- a/src/main/java/com/seibel/lod/util/DataPointUtil.java +++ b/src/main/java/com/seibel/lod/util/DataPointUtil.java @@ -105,9 +105,9 @@ public class DataPointUtil return (short) ((dataPoint >>> BLUE_SHIFT) & BLUE_MASK); } - public static byte getLightValue(long dataPoint) + public static int getLightValue(long dataPoint) { - return (byte) ((dataPoint >>> LIGHT_SHIFT) & LIGHT_MASK); + return (int) ((dataPoint >>> LIGHT_SHIFT) & LIGHT_MASK); } public static byte getGenerationMode(long dataPoint) @@ -128,15 +128,15 @@ public class DataPointUtil public static int getColor(long dataPoint) { - return (int) ((dataPoint >>> COLOR_SHIFT) & COLOR_MASK); + return (int) (dataPoint >>> COLOR_SHIFT); } public static int getLightColor(long dataPoint) { int lightBlock = getLightValue(dataPoint); - int red = Math.min(getRed(dataPoint) + lightBlock * 8, 255); - int green = Math.min(getGreen(dataPoint) + lightBlock * 8, 255); - int blue = Math.min(getBlue(dataPoint) + lightBlock * 4, 255); + int red = LodUtil.clamp(0, getRed(dataPoint) + lightBlock * 8, 255); + int green = LodUtil.clamp(0, getGreen(dataPoint) + lightBlock * 8, 255); + int blue = LodUtil.clamp(0, getBlue(dataPoint) + lightBlock * 4, 255); return ColorUtil.rgbToInt(red, green, blue); } @@ -147,11 +147,21 @@ public class DataPointUtil s.append(" "); s.append(getDepth(dataPoint)); s.append(" "); + s.append(getAlpha(dataPoint)); + s.append(" "); s.append(getRed(dataPoint)); s.append(" "); s.append(getBlue(dataPoint)); s.append(" "); s.append(getGreen(dataPoint)); + s.append(" "); + s.append(getLightValue(dataPoint)); + s.append(" "); + s.append(getGenerationMode(dataPoint)); + s.append(" "); + s.append(isItVoid(dataPoint)); + s.append(" "); + s.append(doesItExist(dataPoint)); s.append('\n'); return s.toString(); } @@ -302,7 +312,7 @@ public class DataPointUtil if ((depth <= getDepth(singleData) && getDepth(singleData) <= height) || (depth <= getHeight(singleData) && getHeight(singleData) <= height)) { - singleDataToMerge[dataIndex] = singleData; + singleDataToMerge[index] = singleData; break; } }