Tried to fix the render distance min detail bug

This commit is contained in:
Morippi
2022-02-09 22:01:17 +01:00
parent 01870e4875
commit 104d4a7400
2 changed files with 21 additions and 19 deletions
@@ -385,8 +385,8 @@ public class LodDimension
return;
}
}
minDetail = DetailDistanceUtil.getDetailLevelFromDistance(minDistance);
maxDetail = DetailDistanceUtil.getDetailLevelFromDistance(maxDistance);
minDetail = DetailDistanceUtil.getGenDetailLevelFromDistance(minDistance);
maxDetail = DetailDistanceUtil.getGenDetailLevelFromDistance(maxDistance);
boolean updated = false;
if (region == null) {
if ((!expandOrLoadPaused)) {
@@ -19,9 +19,7 @@
package com.seibel.lod.core.util;
import com.seibel.lod.core.api.ClientApi;
import com.seibel.lod.core.enums.config.HorizontalQuality;
import com.seibel.lod.core.enums.config.HorizontalResolution;
import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton;
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
@@ -45,16 +43,20 @@ public class DetailDistanceUtil
private static byte minDrawDetail = CONFIG.client().graphics().quality().getDrawResolution().detailLevel;
private static final byte maxDetail = LodUtil.DETAIL_OPTIONS;
private static final double minDistance = 0;
private static double minDetailDistance = (int) (MC_RENDER.getRenderDistance()*16 * 1.42f);
private static double distanceUnit = 16 * CONFIG.client().graphics().quality().getHorizontalScale();
private static double minGenDetailDistance = (int) (MC_RENDER.getRenderDistance()*16 * 1.42f);
private static double maxDistance = CONFIG.client().graphics().quality().getLodChunkRenderDistance() * 16 * 2;
private static double logBase = Math.log(CONFIG.client().graphics().quality().getHorizontalQuality().quadraticBase);
public static void updateSettings()
{
minDetailDistance = (int) (MC_RENDER.getRenderDistance()*16 * 1.42f);
distanceUnit = 16 * CONFIG.client().graphics().quality().getHorizontalScale();
minGenDetailDistance = (int) (MC_RENDER.getRenderDistance()*16 * 1.42f);
minGenDetail = CONFIG.client().graphics().quality().getDrawResolution().detailLevel;
minDrawDetail = (byte) Math.max(CONFIG.client().graphics().quality().getDrawResolution().detailLevel, CONFIG.client().graphics().quality().getDrawResolution().detailLevel);
maxDistance = CONFIG.client().graphics().quality().getLodChunkRenderDistance() * 16 * 8;
logBase = Math.log(CONFIG.client().graphics().quality().getHorizontalQuality().quadraticBase);
}
public static double baseDistanceFunction(int detail)
@@ -67,7 +69,6 @@ public class DetailDistanceUtil
if (CONFIG.client().graphics().advancedGraphics().getAlwaysDrawAtMaxQuality())
return detail * 0x10000; //if you want more you are doing wrong
int distanceUnit = CONFIG.client().graphics().quality().getHorizontalScale() * 16;
if (CONFIG.client().graphics().quality().getHorizontalQuality() == HorizontalQuality.LOWEST)
return ((double)detail * distanceUnit);
else
@@ -91,30 +92,31 @@ public class DetailDistanceUtil
}
int detail;
distance -= minDetailDistance;
if (distance < 0 || CONFIG.client().graphics().advancedGraphics().getAlwaysDrawAtMaxQuality())
distance = 0;
int distanceUnit = CONFIG.client().graphics().quality().getHorizontalScale() * 16;
double scaledDistance = distance;
scaledDistance /= distanceUnit;
if (CONFIG.client().graphics().quality().getHorizontalQuality() == HorizontalQuality.LOWEST)
detail = (int) (scaledDistance);
detail = (int) (distance/distanceUnit);
else
{
double base = CONFIG.client().graphics().quality().getHorizontalQuality().quadraticBase;
double logBase = Math.log(base);
detail = (int) (Math.log(scaledDistance) / logBase);
detail = (int) (Math.log(distance) / logBase);
}
return (byte) LodUtil.clamp(minDetail, detail+minDetail, maxDetail - 1);
}
public static byte getDetailLevelFromDistance(double distance)
{
return baseInverseFunction(distance, minDrawDetail);
}
public static byte getGenDetailLevelFromDistance(double distance)
{
if(distance < minGenDetailDistance)
return minGenDetail;
return baseInverseFunction(distance, minDrawDetail);
}
// NOTE: The recent LodWorldGenerator changes assumes that this value doesn't change with 'detail'.
// If this is changed, LodWorldGenerator needs to be fixed!
/*