Added different generation detail option
This commit is contained in:
@@ -210,7 +210,7 @@ public class LodBufferBuilder
|
||||
if (currentBuffer == null || (currentBuffer != null && !currentBuffer.building()))
|
||||
return;
|
||||
|
||||
for (byte detail = LodUtil.BLOCK_DETAIL_LEVEL; detail <= LodUtil.REGION_DETAIL_LEVEL; detail++)
|
||||
for (byte detail = LodConfig.CLIENT.maxGenerationDetail.get().detailLevel; detail <= LodUtil.REGION_DETAIL_LEVEL; detail++)
|
||||
{
|
||||
posListToRender.addAll(lodDim.getDataToRender(
|
||||
regionPos,
|
||||
@@ -290,7 +290,7 @@ public class LodBufferBuilder
|
||||
int requesting = maxChunkGenRequests;
|
||||
|
||||
//we firstly make sure that the world is filled with half region wide block
|
||||
for (byte detailGen = LodUtil.BLOCK_DETAIL_LEVEL; detailGen <= LodUtil.REGION_DETAIL_LEVEL; detailGen++)
|
||||
for (byte detailGen = LodConfig.CLIENT.maxGenerationDetail.get().detailLevel; detailGen <= LodUtil.REGION_DETAIL_LEVEL; detailGen++)
|
||||
{
|
||||
if (requesting == 0) break;
|
||||
posListToGenerate.addAll(lodDim.getDataToGenerate(
|
||||
@@ -305,7 +305,7 @@ public class LodBufferBuilder
|
||||
}
|
||||
|
||||
//we then fill the world with the rest of the block
|
||||
for (byte detailGen = LodUtil.BLOCK_DETAIL_LEVEL; detailGen <= LodUtil.REGION_DETAIL_LEVEL; detailGen++)
|
||||
for (byte detailGen = LodConfig.CLIENT.maxGenerationDetail.get().detailLevel; detailGen <= LodUtil.REGION_DETAIL_LEVEL; detailGen++)
|
||||
{
|
||||
if (requesting == 0) break;
|
||||
posListToGenerate.addAll(lodDim.getDataToGenerate(
|
||||
@@ -314,7 +314,7 @@ public class LodBufferBuilder
|
||||
DetailUtil.getDistanceGeneration(detailGen),
|
||||
DetailUtil.getDistanceGeneration(detailGen + 1),
|
||||
LodConfig.CLIENT.distanceGenerationMode.get().complexity,
|
||||
(byte) 0,
|
||||
LodConfig.CLIENT.maxGenerationDetail.get().detailLevel,
|
||||
maxChunkGenRequests));
|
||||
requesting = maxChunkGenRequests - posListToGenerate.size();
|
||||
}
|
||||
@@ -409,7 +409,7 @@ public class LodBufferBuilder
|
||||
|
||||
positionWaitingToBeGenerated.add(chunkPos);
|
||||
numberOfChunksWaitingToGenerate.addAndGet(1);
|
||||
LodNodeGenWorker genWorker = new LodNodeGenWorker(chunkPos, LodConfig.CLIENT.distanceGenerationMode.get(), LodDetail.FULL, renderer, LodQuadTreeNodeBuilder, this, lodDim, serverWorld);
|
||||
LodNodeGenWorker genWorker = new LodNodeGenWorker(chunkPos, LodConfig.CLIENT.distanceGenerationMode.get(), LodConfig.CLIENT.maxGenerationDetail.get(), renderer, LodQuadTreeNodeBuilder, this, lodDim, serverWorld);
|
||||
WorldWorkerManager.addWorker(genWorker);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import java.util.concurrent.Executors;
|
||||
|
||||
import com.seibel.lod.enums.DistanceGenerationMode;
|
||||
import com.seibel.lod.enums.LodDetail;
|
||||
import com.seibel.lod.handlers.LodConfig;
|
||||
import com.seibel.lod.objects.LevelPos;
|
||||
import com.seibel.lod.objects.LodDataPoint;
|
||||
import com.seibel.lod.objects.LodDimension;
|
||||
@@ -106,7 +107,7 @@ public class LodBuilder
|
||||
lodDim = lodWorld.getLodDimension(dim);
|
||||
}
|
||||
|
||||
generateLodNodeFromChunk(lodDim, chunk, new LodBuilderConfig(generationMode), LodDetail.FULL);
|
||||
generateLodNodeFromChunk(lodDim, chunk, new LodBuilderConfig(generationMode), LodConfig.CLIENT.maxGenerationDetail.get());
|
||||
} catch (IllegalArgumentException | NullPointerException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
@@ -177,7 +178,7 @@ public class LodBuilder
|
||||
chunk.getPos().x * 16 + startX,
|
||||
chunk.getPos().z * 16 + startZ);
|
||||
data = new LodDataPoint(height, depth, color);
|
||||
lodDim.addData(levelPos.convert((byte) detail.detailLevel),
|
||||
lodDim.addData(levelPos.convert(detail.detailLevel),
|
||||
data,
|
||||
config.distanceGenerationMode,
|
||||
true,
|
||||
|
||||
@@ -54,7 +54,7 @@ public enum LodDetail
|
||||
public final int dataPointWidth;
|
||||
/** This is the same as detailLevel in LodQuadTreeNode,
|
||||
* lowest is 0 highest is 9 */
|
||||
public final int detailLevel;
|
||||
public final byte detailLevel;
|
||||
|
||||
/* Start/End X/Z give the block positions
|
||||
* for each individual dataPoint in a LodChunk */
|
||||
@@ -80,7 +80,7 @@ public enum LodDetail
|
||||
|
||||
private LodDetail(int newLengthCount, int newDetailLevel)
|
||||
{
|
||||
detailLevel = newDetailLevel;
|
||||
detailLevel = (byte) newDetailLevel;
|
||||
dataPointLengthCount = newLengthCount;
|
||||
dataPointWidth = 16 / dataPointLengthCount;
|
||||
|
||||
|
||||
@@ -317,7 +317,7 @@ public class LodDimensionFileHandler
|
||||
fw.write(LOD_FILE_VERSION_PREFIX + " " + LOD_SAVE_FILE_VERSION + "\n");
|
||||
|
||||
// add each LodChunk to the file
|
||||
fw.write(region.getLevel((byte) 0).toString());
|
||||
fw.write(region.getLevel(LodConfig.CLIENT.maxGenerationDetail.get().detailLevel).toString());
|
||||
fw.close();
|
||||
|
||||
// overwrite the old file with the new one
|
||||
@@ -353,7 +353,7 @@ public class LodDimensionFileHandler
|
||||
// ".\Super Flat\DIM-1\data"
|
||||
// or
|
||||
// ".\Super Flat\data"
|
||||
return dimensionDataSaveFolder.getCanonicalPath() + File.separatorChar +
|
||||
return dimensionDataSaveFolder.getCanonicalPath() + File.separatorChar + LodConfig.CLIENT.maxGenerationDetail.get().detailLevel + File.separatorChar +
|
||||
FILE_NAME_PREFIX + "." + regionX + "." + regionZ + FILE_EXTENSION;
|
||||
}
|
||||
catch (IOException | SecurityException e)
|
||||
|
||||
@@ -26,6 +26,7 @@ import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.seibel.lod.enums.DistanceGenerationMode;
|
||||
import com.seibel.lod.handlers.LodConfig;
|
||||
import com.seibel.lod.handlers.LodDimensionFileHandler;
|
||||
import com.seibel.lod.proxy.ClientProxy;
|
||||
import com.seibel.lod.util.LodUtil;
|
||||
@@ -244,7 +245,7 @@ public class LodDimension
|
||||
if (regions[xIndex][zIndex] == null)
|
||||
{
|
||||
/**TODO the value is currently 0 but should be determinated by the distance of the player)*/
|
||||
regions[xIndex][zIndex] = new LodRegion((byte) 0, regionPos);
|
||||
regions[xIndex][zIndex] = new LodRegion(LodConfig.CLIENT.maxGenerationDetail.get().detailLevel, regionPos);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -291,7 +292,7 @@ public class LodDimension
|
||||
if (region == null)
|
||||
{
|
||||
// if no region exists, create it
|
||||
region = new LodRegion((byte) 0, regionPos);
|
||||
region = new LodRegion(LodConfig.CLIENT.maxGenerationDetail.get().detailLevel, regionPos);
|
||||
addOrOverwriteRegion(region);
|
||||
}
|
||||
}
|
||||
@@ -319,7 +320,7 @@ public class LodDimension
|
||||
if (region == null)
|
||||
{
|
||||
// if no region exists, create it
|
||||
region = new LodRegion((byte) 0, regionPos);
|
||||
region = new LodRegion(LodConfig.CLIENT.maxGenerationDetail.get().detailLevel, regionPos);
|
||||
addOrOverwriteRegion(region);
|
||||
}
|
||||
boolean nodeAdded = region.setData(levelPos, lodDataPoint, generationMode.complexity, true);
|
||||
@@ -379,7 +380,7 @@ public class LodDimension
|
||||
region = getRegion(regionPos);
|
||||
if (region == null)
|
||||
{
|
||||
region = new LodRegion((byte) 0, regionPos);
|
||||
region = new LodRegion(LodConfig.CLIENT.maxGenerationDetail.get().detailLevel, regionPos);
|
||||
addOrOverwriteRegion(region);
|
||||
}
|
||||
listOfData.addAll(region.getDataToGenerate(playerPosX, playerPosZ, start, end, generation, detailLevel, dataNumber));
|
||||
@@ -421,7 +422,7 @@ public class LodDimension
|
||||
region = getRegion(regionPos);
|
||||
if (region == null)
|
||||
{
|
||||
region = new LodRegion((byte) 0, regionPos);
|
||||
region = new LodRegion(LodConfig.CLIENT.maxGenerationDetail.get().detailLevel, regionPos);
|
||||
addOrOverwriteRegion(region);
|
||||
} else
|
||||
{
|
||||
@@ -445,7 +446,7 @@ public class LodDimension
|
||||
{
|
||||
try
|
||||
{
|
||||
region = new LodRegion((byte) 0, regionPos);
|
||||
region = new LodRegion(LodConfig.CLIENT.maxGenerationDetail.get().detailLevel, regionPos);
|
||||
addOrOverwriteRegion(region);
|
||||
}
|
||||
catch (ArrayIndexOutOfBoundsException e)
|
||||
|
||||
@@ -139,10 +139,10 @@ public class ClientProxy
|
||||
// LodConfig.CLIENT.drawLODs.set(true);
|
||||
LodConfig.CLIENT.debugMode.set(false);
|
||||
|
||||
LodConfig.CLIENT.maxDrawDetail.set(LodDetail.FULL);
|
||||
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.fogDistance.set(FogDistance.NEAR);
|
||||
LodConfig.CLIENT.fogDrawOverride.set(FogDrawOverride.ALWAYS_DRAW_FOG_FANCY);
|
||||
LodConfig.CLIENT.shadingMode.set(ShadingMode.DARKEN_SIDES);
|
||||
// LodConfig.CLIENT.brightnessMultiplier.set(1.0);
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.seibel.lod.handlers.LodConfig;
|
||||
public class DetailUtil
|
||||
{
|
||||
private static double genMultiplier = 1.5;
|
||||
private static final int minDetail = LodConfig.CLIENT.maxGenerationDetail.get().detailLevel;
|
||||
private static final int maxDetail = LodUtil.REGION_DETAIL_LEVEL + 1;
|
||||
private static final int minDistance = 0;
|
||||
private static final int maxDistance = LodConfig.CLIENT.lodChunkRenderDistance.get() * 16;
|
||||
@@ -26,18 +27,17 @@ public class DetailUtil
|
||||
{
|
||||
int distance = 0;
|
||||
int initial = LodConfig.CLIENT.lodQuality.get() * 256;
|
||||
if(detail == minDetail)
|
||||
return minDistance;
|
||||
if(detail == maxDetail)
|
||||
distance = maxDistance;
|
||||
switch (LodConfig.CLIENT.lodDistanceCalculatorType.get())
|
||||
{
|
||||
case LINEAR:
|
||||
distance = (detail * initial);
|
||||
break;
|
||||
case QUADRATIC:
|
||||
if (detail == 0)
|
||||
distance = minDistance;
|
||||
else if(detail == maxDetail)
|
||||
distance = maxDistance;
|
||||
else
|
||||
distance = (int) (Math.pow(2, detail) * initial);
|
||||
distance = (int) (Math.pow(2, detail) * initial);
|
||||
break;
|
||||
}
|
||||
return distance;
|
||||
|
||||
Reference in New Issue
Block a user