From b44900e3f09591b06d116f03e0b7bc4461f20f63 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Wed, 25 Aug 2021 13:44:53 +0200 Subject: [PATCH] Added new render/generation distance calculator --- .../builders/worldGeneration/LodWorldGenerator.java | 2 +- .../com/seibel/lod/enums/DistanceCalculatorType.java | 3 +++ src/main/java/com/seibel/lod/handlers/LodConfig.java | 7 ++++++- .../java/com/seibel/lod/util/DetailDistanceUtil.java | 12 +++++++++++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/seibel/lod/builders/worldGeneration/LodWorldGenerator.java b/src/main/java/com/seibel/lod/builders/worldGeneration/LodWorldGenerator.java index d4d173864..368e9cf5a 100644 --- a/src/main/java/com/seibel/lod/builders/worldGeneration/LodWorldGenerator.java +++ b/src/main/java/com/seibel/lod/builders/worldGeneration/LodWorldGenerator.java @@ -145,7 +145,7 @@ public class LodWorldGenerator DetailDistanceUtil.getDistanceGeneration(detailGen), DetailDistanceUtil.getDistanceGeneration(detailGen + 1), DetailDistanceUtil.getDistanceGenerationMode(detailGen).complexity, - (byte) 9, + (byte) 7, farRequesting); for(LevelPos levelPos : levelPosListToGen){ generationRequestList.add(new GenerationRequest(levelPos,DetailDistanceUtil.getDistanceGenerationMode(detailGen), DetailDistanceUtil.getLodDetail(detailGen))); diff --git a/src/main/java/com/seibel/lod/enums/DistanceCalculatorType.java b/src/main/java/com/seibel/lod/enums/DistanceCalculatorType.java index 97f4ed09d..ae325f518 100644 --- a/src/main/java/com/seibel/lod/enums/DistanceCalculatorType.java +++ b/src/main/java/com/seibel/lod/enums/DistanceCalculatorType.java @@ -11,4 +11,7 @@ public enum DistanceCalculatorType /** different Lod detail render and generate quadratically to the distance */ QUADRATIC, + + /** we calculate the distance based on game render distance and mod render distance*/ + RENDER_DEPENDANT; } \ No newline at end of file diff --git a/src/main/java/com/seibel/lod/handlers/LodConfig.java b/src/main/java/com/seibel/lod/handlers/LodConfig.java index 1e78d838f..3db12f7df 100644 --- a/src/main/java/com/seibel/lod/handlers/LodConfig.java +++ b/src/main/java/com/seibel/lod/handlers/LodConfig.java @@ -151,8 +151,13 @@ public class LodConfig + "\n" + " " + DistanceCalculatorType.QUADRATIC + " \n" + " with LINEAR calculator the quality of block decrease \n" + + " quadratically to the distance of the player \n" + + + "\n" + + " " + DistanceCalculatorType.RENDER_DEPENDANT + " \n" + + " with LINEAR calculator the quality of block decrease \n" + " quadratically to the distance of the player \n") - .defineEnum("lodDistanceComputation", DistanceCalculatorType.LINEAR); + .defineEnum("lodDistanceComputation", DistanceCalculatorType.RENDER_DEPENDANT); lodQuality = builder .comment("\n\n" diff --git a/src/main/java/com/seibel/lod/util/DetailDistanceUtil.java b/src/main/java/com/seibel/lod/util/DetailDistanceUtil.java index d3f87bf42..36c6a50d9 100644 --- a/src/main/java/com/seibel/lod/util/DetailDistanceUtil.java +++ b/src/main/java/com/seibel/lod/util/DetailDistanceUtil.java @@ -3,6 +3,7 @@ package com.seibel.lod.util; import com.seibel.lod.enums.DistanceGenerationMode; import com.seibel.lod.enums.LodDetail; import com.seibel.lod.handlers.LodConfig; +import net.minecraft.client.Minecraft; public class DetailDistanceUtil { @@ -89,11 +90,20 @@ public class DetailDistanceUtil switch (LodConfig.CLIENT.lodDistanceCalculatorType.get()) { case LINEAR: - initial = Math.min(maxDistance/maxDetail, 1024); + initial = Math.min(maxDistance*2/maxDetail, 1024); return (detail * initial); case QUADRATIC: initial = LodConfig.CLIENT.lodQuality.get() * 128; return (int) (Math.pow(2, detail) * initial); + case RENDER_DEPENDANT: + int realRenderDistance = Minecraft.getInstance().options.renderDistance * 16; + int border = 128; + byte detailAtBorder = (byte) 4; + if(detail > detailAtBorder){ + return (detail * (border-realRenderDistance)/detailAtBorder + realRenderDistance); + }else{ + return ((maxDetail - detail) * (maxDistance-border)/(maxDetail - detailAtBorder) + border); + } } return distance; }