Changed how the VerticalLevelContainer contains the data

This commit is contained in:
Leonardo
2021-09-19 20:48:07 +02:00
parent cffb17aeb1
commit ebe2c22a28
9 changed files with 243 additions and 148 deletions
@@ -4,6 +4,9 @@ import com.seibel.lod.enums.DistanceGenerationMode;
import net.minecraft.client.renderer.texture.NativeImage;
import java.lang.reflect.Array;
import java.util.Arrays;
public class DataPointUtil
{
/*
@@ -276,11 +279,13 @@ public class DataPointUtil
}
}
public static long[] mergeMultiData(long[][] dataToMerge)
public static long[] mergeMultiData(long[] dataToMerge, byte detailLevel)
{
int verticalData = DetailDistanceUtil.getMaxVerticalData(detailLevel);
int size = dataToMerge.length/verticalData;
short[] projection = ThreadMapUtil.getProjectionShort((WORLD_HEIGHT + 1) / 16);
short[][] heightAndDepth = ThreadMapUtil.getHeightAndDepth((WORLD_HEIGHT / 2) + 1);
long[] singleDataToMerge = ThreadMapUtil.getSingleAddDataToMerge(dataToMerge.length);
long[] singleDataToMerge = ThreadMapUtil.getSingleAddDataToMerge(size);
int genMode = DistanceGenerationMode.SERVER.complexity;
boolean allEmpty = true;
boolean allVoid = true;
@@ -292,11 +297,11 @@ public class DataPointUtil
short depth = 0;
short height = 0;
//We collect the indexes of the data, ordered by the depth
for (int index = 0; index < dataToMerge.length; index++)
for (int index = 0; index < size; index++)
{
for (int dataIndex = 0; dataIndex < dataToMerge[index].length; dataIndex++)
for (int verticalIndex = 0; verticalIndex < verticalData; verticalIndex++)
{
singleData = dataToMerge[index][dataIndex];
singleData = dataToMerge[index * verticalData + verticalIndex];
if (doesItExist(singleData))
{
genMode = Math.min(genMode, getGenerationMode(singleData));
@@ -362,14 +367,14 @@ public class DataPointUtil
{
depth = heightAndDepth[j][0];
height = heightAndDepth[j][1];
for(int k = 0; k < dataToMerge.length; k++){
for(int k = 0; k < size; k++){
singleDataToMerge[k] = 0;
}
for (int index = 0; index < dataToMerge.length; index++)
for (int index = 0; index < size; index++)
{
for (int dataIndex = 0; dataIndex < dataToMerge[index].length; dataIndex++)
for (int verticalIndex = 0; verticalIndex < verticalData; verticalIndex++)
{
singleData = dataToMerge[index][dataIndex];
singleData = dataToMerge[index * verticalData + verticalIndex];
if (doesItExist(singleData) && !isItVoid(singleData))
{
if ((depth <= getDepth(singleData) && getDepth(singleData) <= height)
@@ -386,8 +391,8 @@ public class DataPointUtil
long data = mergeSingleData(singleDataToMerge);
dataPoint[j] = createDataPoint(height, depth, getColor(data), getLightSky(data), getLightBlock(data), getGenerationMode(data));
}
return dataPoint;
verticalData = DetailDistanceUtil.getMaxVerticalData(detailLevel+1);
return Arrays.copyOf(dataPoint, verticalData);
}
public static long[] compress(long[] data, byte detailLevel)
@@ -11,7 +11,7 @@ public class ThreadMapUtil
public static final ConcurrentMap<String, long[]> threadSingleGetDataMap = new ConcurrentHashMap<>();
public static final ConcurrentMap<String, long[]> threadSingleUpdateMap = new ConcurrentHashMap<>();
public static final ConcurrentMap<String, long[][]> threadBuilderArrayMap = new ConcurrentHashMap<>();
public static final ConcurrentMap<String, long[][][]> threadBuilderVerticalArrayMap = new ConcurrentHashMap<>();
public static final ConcurrentMap<String, long[][]> threadBuilderVerticalArrayMap = new ConcurrentHashMap<>();
public static final ConcurrentMap<String, long[]> threadVerticalAddDataMap = new ConcurrentHashMap<>();
public static final ConcurrentMap<String, long[]> threadVerticalGetDataMap = new ConcurrentHashMap<>();
public static final ConcurrentMap<String, long[][]> threadVerticalUpdateMap = new ConcurrentHashMap<>();
@@ -62,11 +62,11 @@ public class ThreadMapUtil
return threadBuilderArrayMap.get(Thread.currentThread().getName());
}
public static long[][][] getBuilderVerticalArray()
public static long[][] getBuilderVerticalArray()
{
if (!threadBuilderVerticalArrayMap.containsKey(Thread.currentThread().getName()) || (threadBuilderVerticalArrayMap.get(Thread.currentThread().getName()) == null))
{
long[][][] array = new long[5][][];
long[][] array = new long[5][];
threadBuilderVerticalArrayMap.put(Thread.currentThread().getName(), array);
}
return threadBuilderVerticalArrayMap.get(Thread.currentThread().getName());