Changed how the VerticalLevelContainer contains the data
This commit is contained in:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user