Added tree generator and new tree cutter

This commit is contained in:
Leonardo
2021-08-23 23:44:55 +02:00
parent 181539b83b
commit cac4807986
6 changed files with 260 additions and 84 deletions
@@ -0,0 +1,109 @@
package com.seibel.lod.util;
import com.seibel.lod.enums.DistanceGenerationMode;
import com.seibel.lod.enums.LodDetail;
import com.seibel.lod.handlers.LodConfig;
public class DetailDistanceUtil
{
private static double genMultiplier = 1.25;
private static double cutMultiplier = 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 * 2;
private static final DistanceGenerationMode[] distancesGenerators = {
DistanceGenerationMode.SURFACE,
DistanceGenerationMode.SURFACE,
DistanceGenerationMode.SURFACE,
DistanceGenerationMode.SURFACE,
DistanceGenerationMode.SURFACE,
DistanceGenerationMode.SURFACE,
DistanceGenerationMode.SURFACE,
DistanceGenerationMode.SURFACE,
DistanceGenerationMode.SURFACE,
DistanceGenerationMode.SURFACE};
private static final LodDetail[] lodDetails = {
LodDetail.FULL,
LodDetail.HALF,
LodDetail.QUAD,
LodDetail.DOUBLE,
LodDetail.SINGLE,
LodDetail.SINGLE,
LodDetail.SINGLE,
LodDetail.SINGLE,
LodDetail.SINGLE,
LodDetail.SINGLE,
LodDetail.SINGLE};
private static final LodDetail[] lodDetailsCut = {
LodDetail.FULL,
LodDetail.FULL,
LodDetail.HALF,
LodDetail.QUAD,
LodDetail.DOUBLE,
LodDetail.DOUBLE,
LodDetail.DOUBLE,
LodDetail.DOUBLE,
LodDetail.DOUBLE,
LodDetail.DOUBLE,
LodDetail.DOUBLE};
public static int getDistanceRendering(int detail)
{
int distance = 0;
int initial = LodConfig.CLIENT.lodQuality.get() * 256;
if(detail == minDetail)
return minDistance;
if(detail == maxDetail)
return maxDistance;
switch (LodConfig.CLIENT.lodDistanceCalculatorType.get())
{
case LINEAR:
return (detail * initial);
case QUADRATIC:
return (int) (Math.pow(2, detail) * initial);
}
return distance;
}
public static int getDistanceGeneration(int detail)
{
return (int) (getDistanceRendering(detail) * genMultiplier);
}
public static int getDistanceCut(int detail)
{
return (int) (getDistanceRendering(detail) * cutMultiplier);
}
public static DistanceGenerationMode getDistanceGenerationMode(int detail)
{
return distancesGenerators[detail];
}
public static LodDetail getLodDetail(int detail)
{
if(detail < minDetail)
{
return lodDetails[minDetail];
}
else
{
return lodDetails[detail];
}
}
public static LodDetail getCutLodDetail(int detail)
{
if(detail < minDetail)
{
return lodDetailsCut[minDetail];
}
else
{
return lodDetailsCut[detail];
}
}
}