Forgot about GenPriority. Updated it + fixed now BALANCED mode issue

This commit is contained in:
tom lee
2022-01-25 17:08:01 +08:00
parent 7fa99ea070
commit 43feb2d7fe
3 changed files with 16 additions and 13 deletions
@@ -568,17 +568,15 @@ public class LodDimension
// use FAR_FIRST on local worlds and NEAR_FIRST on servers
GenerationPriority generationPriority = CONFIG.client().worldGenerator().getGenerationPriority();
if (generationPriority == GenerationPriority.AUTO)
generationPriority = MC.hasSinglePlayerServer() ? GenerationPriority.FAR_FIRST : GenerationPriority.NEAR_FIRST;
generationPriority = MC.hasSinglePlayerServer() ? GenerationPriority.FAR_FIRST : GenerationPriority.BALANCED;
DropoffQuality dropoffQuality = CONFIG.client().graphics().quality().getDropoffQuality();
if (dropoffQuality == DropoffQuality.AUTO)
dropoffQuality = CONFIG.client().graphics().quality().getLodChunkRenderDistance() < 128 ?
DropoffQuality.SMOOTH_DROPOFF : DropoffQuality.PERFORMANCE_FOCUSED;
boolean requireCorrectDetailLevel = generationPriority == GenerationPriority.NEAR_FIRST;
if (region != null)
region.getPosToRender(posToRender, playerPosX, playerPosZ, requireCorrectDetailLevel, dropoffQuality);
region.getPosToRender(posToRender, playerPosX, playerPosZ, generationPriority, dropoffQuality);
}
/**
@@ -238,6 +238,7 @@ public class LodRegion {
byte targetDetailLevel = DetailDistanceUtil.getDetailLevelFromDistance(minDistance);
int farModeSwitchLevel = (priority == GenerationPriority.NEAR_FIRST) ? -1 : calculateFarModeSwitch(targetDetailLevel);
if (priority == GenerationPriority.FAR_FIRST) farModeSwitchLevel = 8;
boolean doesDataExist = doesDataExist(detailLevel, offsetPosX + regionPosX * size, offsetPosZ + regionPosZ * size, testerGenMode);
boolean isFarModeSwitchEdge = needFarPos && detailLevel <= farModeSwitchLevel;
@@ -274,16 +275,18 @@ public class LodRegion {
* understand
*/
public void getPosToRender(PosToRenderContainer posToRender, int playerPosX, int playerPosZ,
boolean requireCorrectDetailLevel, DropoffQuality dropoffQuality) {
GenerationPriority priority, DropoffQuality dropoffQuality) {
int minDistance = LevelPosUtil.minDistance(LodUtil.REGION_DETAIL_LEVEL, regionPosX, regionPosZ, playerPosX, playerPosZ);
byte targetLevel = DetailDistanceUtil.getDetailLevelFromDistance(minDistance);
// FarModeSwitchLevel or above is the level where a giant block of lod is not acceptable even if not all child data exist.
byte farModeSwitchLevel = requireCorrectDetailLevel ? 0 : calculateFarModeSwitch(targetLevel);
if (requireCorrectDetailLevel) farModeSwitchLevel = 0;
if (targetLevel <= dropoffQuality.fastModeSwitch) {
getPosToRender(posToRender, LodUtil.REGION_DETAIL_LEVEL, 0, 0, playerPosX, playerPosZ,
requireCorrectDetailLevel);
priority);
} else {
// FarModeSwitchLevel or above is the level where a giant block of lod is not acceptable even if not all child data exist.
int maxDistance = LevelPosUtil.maxDistance(LodUtil.REGION_DETAIL_LEVEL, regionPosX, regionPosZ, playerPosX, playerPosZ);
byte farModeSwitchLevel = (priority == GenerationPriority.NEAR_FIRST) ? 0 :
calculateFarModeSwitch(DetailDistanceUtil.getDetailLevelFromDistance(maxDistance));
if (priority == GenerationPriority.FAR_FIRST) farModeSwitchLevel = 8;
getPosToRenderFlat(posToRender, LodUtil.REGION_DETAIL_LEVEL, 0, 0, targetLevel, farModeSwitchLevel);
}
}
@@ -297,7 +300,7 @@ public class LodRegion {
* out part of it
*/
private void getPosToRender(PosToRenderContainer posToRender, byte detailLevel, int offsetPosX, int offsetPosZ, int playerPosX,
int playerPosZ, boolean requireCorrectDetailLevel) {
int playerPosZ, GenerationPriority priority) {
// equivalent to 2^(...)
int size = 1 << (LodUtil.REGION_DETAIL_LEVEL - detailLevel);
@@ -305,7 +308,8 @@ public class LodRegion {
int minDistance = LevelPosUtil.minDistance(detailLevel, offsetPosX + regionPosX*size, offsetPosZ + regionPosZ*size, playerPosX, playerPosZ);
byte minLevel = DetailDistanceUtil.getDetailLevelFromDistance(minDistance);
// FarModeSwitchLevel or above is the level where a giant block of lod is not acceptable even if not all child data exist.
byte farModeSwitchLevel = requireCorrectDetailLevel ? 0 : calculateFarModeSwitch(minLevel);
byte farModeSwitchLevel = (priority == GenerationPriority.NEAR_FIRST) ? 0 : calculateFarModeSwitch(minLevel);
if (priority == GenerationPriority.FAR_FIRST) farModeSwitchLevel = 8;
if (detailLevel <= minLevel) {
posToRender.addPosToRender(detailLevel, offsetPosX + regionPosX * size, offsetPosZ + regionPosZ * size);
@@ -321,7 +325,7 @@ public class LodRegion {
for (int z = 0; z <= 1; z++) {
if (doesDataExist(childDetailLevel, childPosX + x, childPosZ + z, DistanceGenerationMode.NONE)) {
getPosToRender(posToRender, childDetailLevel, offsetPosX*2 + x, offsetPosZ*2 + z, playerPosX,
playerPosZ, requireCorrectDetailLevel);
playerPosZ, priority);
}
}
}
@@ -340,7 +344,7 @@ public class LodRegion {
for (int x = 0; x <= 1; x++)
for (int z = 0; z <= 1; z++)
getPosToRender(posToRender, childDetailLevel, offsetPosX*2 + x, offsetPosZ*2 + z, playerPosX,
playerPosZ, requireCorrectDetailLevel);
playerPosZ, priority);
} else {
posToRender.addPosToRender(detailLevel, offsetPosX + regionPosX * size, offsetPosZ + regionPosZ * size);
}
@@ -113,6 +113,7 @@
"DistantHorizons.config.enum.VanillaOverdraw.BORDER": "Border",
"DistantHorizons.config.enum.GenerationPriority.AUTO": "Auto",
"DistantHorizons.config.enum.GenerationPriority.NEAR_FIRST": "Near first",
"DistantHorizons.config.enum.GenerationPriority.BALANCED": "Balanced",
"DistantHorizons.config.enum.GenerationPriority.FAR_FIRST": "Far first",
"DistantHorizons.config.enum.DistanceGenerationMode.NONE": "None",
"DistantHorizons.config.enum.DistanceGenerationMode.BIOME_ONLY": "Biome only",