New config

This commit is contained in:
Leonardo
2021-08-22 14:34:02 +02:00
parent a1f01bef78
commit aa7ea85cde
6 changed files with 51 additions and 30 deletions
@@ -219,11 +219,9 @@ public class LodBufferBuilder
for (LevelPos pos : posListToRender)
{
LevelPos chunkPos = pos.convert(LodUtil.CHUNK_DETAIL_LEVEL);
int chunkX = chunkPos.posX;
int chunkZ = chunkPos.posZ;
// skip any chunks that Minecraft is going to render
if (isCoordInCenterArea(chunkPos.posX, chunkPos.posZ, (numbChunksWide / 2)) || renderer.vanillaRenderedChunks.contains(new ChunkPos(chunkX, chunkZ)))
if (renderer.vanillaRenderedChunks.contains(new ChunkPos( chunkPos.posX, chunkPos.posZ)))
{
continue;
}
@@ -315,7 +313,6 @@ public class LodBufferBuilder
requesting = maxChunkGenRequests - posListToGenerate.size();
}
if (LodConfig.CLIENT.distanceGenerationMode.get() != DistanceGenerationMode.NONE)
{
// determine which points in the posListToGenerate
@@ -463,11 +460,11 @@ public class LodBufferBuilder
*/
private boolean isCoordInCenterArea(int i, int j, int centerCoordinate)
{
return (i >= centerCoordinate - mc.options.renderDistance
&& i <= centerCoordinate + mc.options.renderDistance)
return (i >= centerCoordinate - (mc.options.renderDistance + 2)
&& i <= centerCoordinate + (mc.options.renderDistance + 2))
&&
(j >= centerCoordinate - mc.options.renderDistance
&& j <= centerCoordinate + mc.options.renderDistance);
(j >= centerCoordinate - (mc.options.renderDistance + 2)
&& j <= centerCoordinate + (mc.options.renderDistance + 2));
}
@@ -20,18 +20,13 @@ package com.seibel.lod.handlers;
import java.nio.file.Path;
import java.nio.file.Paths;
import com.seibel.lod.enums.*;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import com.electronwill.nightconfig.core.file.CommentedFileConfig;
import com.electronwill.nightconfig.core.io.WritingMode;
import com.seibel.lod.ModInfo;
import com.seibel.lod.enums.DistanceGenerationMode;
import com.seibel.lod.enums.FogDistance;
import com.seibel.lod.enums.FogDrawOverride;
import com.seibel.lod.enums.LodDetail;
import com.seibel.lod.enums.LodTemplate;
import com.seibel.lod.enums.ShadingMode;
import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.eventbus.api.SubscribeEvent;
@@ -77,6 +72,8 @@ public class LodConfig
*/
public ForgeConfigSpec.IntValue lodChunkRadiusMultiplier;
public ForgeConfigSpec.EnumValue<DistanceCalculatorType> lodDistanceCalculatorType;
public ForgeConfigSpec.IntValue lodQuality;
public ForgeConfigSpec.IntValue lodChunkRenderDistane;
@@ -160,6 +157,29 @@ public class LodConfig
+ " of LODs in each cardinal direction. \n")
.defineInRange("lodChunkRadiusMultiplier", 8, 2, 16);
lodDistanceCalculatorType = builder
.comment("\n\n"
+ " " + DistanceCalculatorType.LINEAR + " \n"
+ " with LINEAR calculator the quality of block decrease \n"
+ " linearly to the distance of the player \n"
+ "\n"
+ " " + DistanceCalculatorType.QUADRATIC + " \n"
+ " with LINEAR calculator the quality of block decrease \n"
+ " quadratically to the distance of the player \n")
.defineEnum("lodDistanceComputation", DistanceCalculatorType.LINEAR);
lodQuality = builder
.comment("\n\n"
+ " this value is multiplied by 128 and determine \n"
+ " how much the quality decrease over distance \n")
.defineInRange("lodChunkRadiusMultiplier", 1, 1, 4);
lodChunkRenderDistane = builder
.comment("\n\n"
+ " This is the render distance of the mod \n")
.defineInRange("lodChunkRadiusMultiplier", 128, 32, 128);
distanceGenerationMode = builder
.comment("\n\n"
+ " Note: The times listed here are the amount of time it took \n"
@@ -205,6 +205,8 @@ public class LodRegion implements Serializable
}
/**
* This method will return all the levelPos that are renderable according to the requisite given in input
*
* @return
*/
public List<Map.Entry<LevelPos,Integer>> getDataToGenerate(int playerPosX, int playerPosZ, int start, int end, byte generation, byte detailLevel, int dataNumber)
@@ -17,17 +17,13 @@
*/
package com.seibel.lod.proxy;
import com.seibel.lod.enums.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.seibel.lod.builders.LodBufferBuilder;
import com.seibel.lod.builders.LodBuilder;
import com.seibel.lod.builders.worldGeneration.LodNodeGenWorker;
import com.seibel.lod.enums.DistanceGenerationMode;
import com.seibel.lod.enums.FogDistance;
import com.seibel.lod.enums.FogDrawOverride;
import com.seibel.lod.enums.LodDetail;
import com.seibel.lod.enums.ShadingMode;
import com.seibel.lod.handlers.LodConfig;
import com.seibel.lod.objects.LodDimension;
import com.seibel.lod.objects.LodWorld;
@@ -151,6 +147,10 @@ public class ClientProxy
LodConfig.CLIENT.distanceGenerationMode.set(DistanceGenerationMode.FEATURES);
LodConfig.CLIENT.allowUnstableFeatureGeneration.set(false);
LodConfig.CLIENT.lodChunkRenderDistane.set(96);
LodConfig.CLIENT.lodDistanceCalculatorType.set(DistanceCalculatorType.LINEAR);
LodConfig.CLIENT.lodQuality.set(1);
LodConfig.CLIENT.allowUnstableFeatureGeneration.set(false);
// has to be set in the config file
// LodConfig.CLIENT.numberOfWorldGenerationThreads.set(16);
@@ -229,11 +229,11 @@ public class LodRenderer
// determine how far the game's render distance is currently set
//farPlaneBlockDistance = mc.options.renderDistance * LodUtil.CHUNK_WIDTH;
farPlaneBlockDistance = 8 * LodUtil.CHUNK_WIDTH;
farPlaneBlockDistance = LodConfig.CLIENT.lodChunkRenderDistane.get() * LodUtil.CHUNK_WIDTH;
// set how how far the LODs will go
//int numbChunksWide = mc.options.renderDistance * 2 * LodConfig.CLIENT.lodChunkRadiusMultiplier.get();
int numbChunksWide = 8 * 2 * LodConfig.CLIENT.lodChunkRadiusMultiplier.get() + 1;
int numbChunksWide =LodConfig.CLIENT.lodChunkRenderDistane.get() * 2;
// determine which LODs should not be rendered close to the player
HashSet<ChunkPos> chunkPosToSkip = getNearbyLodChunkPosToSkip(lodDim, player.blockPosition());
@@ -461,12 +461,12 @@ public class LodRenderer
{
if (fogQuality == FogQuality.FANCY)
{
RenderSystem.fogStart(farPlaneBlockDistance * 0.85f * LodConfig.CLIENT.lodChunkRadiusMultiplier.get());
RenderSystem.fogEnd(farPlaneBlockDistance * 1.0f * LodConfig.CLIENT.lodChunkRadiusMultiplier.get());
RenderSystem.fogStart(farPlaneBlockDistance * 0.85f);
RenderSystem.fogEnd(farPlaneBlockDistance * 1.0f);
} else if (fogQuality == FogQuality.FAST)
{
RenderSystem.fogStart(farPlaneBlockDistance * 0.5f * LodConfig.CLIENT.lodChunkRadiusMultiplier.get());
RenderSystem.fogEnd(farPlaneBlockDistance * 0.75f * LodConfig.CLIENT.lodChunkRadiusMultiplier.get());
RenderSystem.fogStart(farPlaneBlockDistance * 0.5f);
RenderSystem.fogEnd(farPlaneBlockDistance * 0.75f);
}
}
@@ -2,15 +2,15 @@ package com.seibel.lod.util;
import com.seibel.lod.enums.DistanceCalculatorType;
import com.seibel.lod.enums.DistanceGenerationMode;
import com.seibel.lod.enums.LodQuality;
import com.seibel.lod.handlers.LodConfig;
public class DetailUtil
{
private static int initial = 200;
private static double genMultiplier = 1.5;
private static DistanceCalculatorType calculator = DistanceCalculatorType.LINEAR;
private static final int maxDetail = 10;
private static final int maxDetail = LodUtil.REGION_DETAIL_LEVEL + 1;
private static final int minDistance = 0;
private static final int maxDistance = 1000000;
private static final int maxDistance = LodConfig.CLIENT.lodChunkRenderDistane.get() * 16;
private static DistanceGenerationMode[] distancesGenerators = {
DistanceGenerationMode.SURFACE,
DistanceGenerationMode.SURFACE,
@@ -23,10 +23,12 @@ public class DetailUtil
DistanceGenerationMode.SURFACE,
DistanceGenerationMode.SURFACE};
public static int getDistanceRendering(int detail)
{
int distance = 0;
switch (calculator)
int initial = LodConfig.CLIENT.lodQuality.get() * 128;
switch (LodConfig.CLIENT.lodDistanceCalculatorType.get())
{
case LINEAR:
distance = (detail * initial);