From cbff0cd9e9ee6e997b11d7280760adb771e2dddd Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 2 Jun 2026 18:05:16 -0500 Subject: [PATCH] add useCameraPositionForQualityDropOff config/api --- .../config/client/IDhApiGraphicsConfig.java | 10 ++++++++++ .../config/client/DhApiGraphicsConfig.java | 4 ++++ .../distanthorizons/core/config/Config.java | 12 ++++++++++++ .../core/level/ClientLevelModule.java | 19 +++++++++++++++---- .../assets/distanthorizons/lang/en_us.json | 4 ++++ 5 files changed, 45 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/config/client/IDhApiGraphicsConfig.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/config/client/IDhApiGraphicsConfig.java index c1f1f264e..c155f9da7 100644 --- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/config/client/IDhApiGraphicsConfig.java +++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/config/client/IDhApiGraphicsConfig.java @@ -85,6 +85,16 @@ public interface IDhApiGraphicsConfig extends IDhApiConfigGroup /** Modifies the quadratic function fake chunks use for horizontal quality drop-off. */ IDhApiConfigValue horizontalQuality(); + /** + * If true DH will try to use the camera position when + * determining LOD quality drop-off.
+ * If false DH will use the player's position. + *

+ * Enabling helps free-cam mods render correctly.
+ * Disabling helps multi-camera mods render correctly (ie Immersive Portals or camera mods). + */ + IDhApiConfigValue useCameraPositionForQualityDropOff(); + IDhApiConfigValue transparency(); /** Defines what blocks won't be rendered as LODs. */ diff --git a/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/config/client/DhApiGraphicsConfig.java b/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/config/client/DhApiGraphicsConfig.java index 2cc2363e0..c03048c24 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/config/client/DhApiGraphicsConfig.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/config/client/DhApiGraphicsConfig.java @@ -85,6 +85,10 @@ public class DhApiGraphicsConfig implements IDhApiGraphicsConfig public IDhApiConfigValue horizontalQuality() { return new DhApiConfigValue(Config.Client.Advanced.Graphics.Quality.horizontalQuality); } + @Override + public IDhApiConfigValue useCameraPositionForQualityDropOff() + { return new DhApiConfigValue(Config.Client.Advanced.Graphics.Quality.useCameraPositionForQualityDropOff); } + @Override public IDhApiConfigValue transparency() { return new DhApiConfigValue(Config.Client.Advanced.Graphics.Quality.transparency); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java b/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java index c6619c693..2209aa5e7 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java @@ -223,6 +223,18 @@ public class Config .addListener(ReloadLodsConfigEventHandler.DELAYED_INSTANCE) .build(); + public static ConfigEntry useCameraPositionForQualityDropOff = new ConfigEntry.Builder() + .set(true) + .comment("" + + "If true DH will try to use the camera position when \n" + + "determining LOD quality drop-off. \n" + + "If false DH will use the player's position. \n" + + " \n" + + "Enabling helps free-cam mods render correctly. \n" + + "Disabling helps multi-camera mods render correctly (ie Immersive Portals or camera mods). \n" + + "") + .build(); + public static ConfigUISpacer qualitySpacer = new ConfigUISpacer.Builder().build(); public static ConfigEntry transparency = new ConfigEntry.Builder() diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/ClientLevelModule.java b/core/src/main/java/com/seibel/distanthorizons/core/level/ClientLevelModule.java index d812e9bf6..d63a53dd1 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/ClientLevelModule.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/ClientLevelModule.java @@ -109,10 +109,21 @@ public class ClientLevelModule implements Closeable, IDataSourceUpdateListenerFu this.ClientRenderStateRef.set(clientRenderState); } - // use camera position instead of player pos so free cam mods work better - DhVec3d cameraDoublePos = MC_RENDER.getCameraExactPosition(); - DhBlockPos2D cameraBlockPos = new DhBlockPos2D((int)cameraDoublePos.x, (int)cameraDoublePos.z); - clientRenderState.quadtree.tryTick(cameraBlockPos); + + DhBlockPos2D quadTreeTickBlockPos; + if (Config.Client.Advanced.Graphics.Quality.useCameraPositionForQualityDropOff.get()) + { + // use camera position allow free cam mods work better + DhVec3d cameraDoublePos = MC_RENDER.getCameraExactPosition(); + quadTreeTickBlockPos = new DhBlockPos2D((int)cameraDoublePos.x, (int)cameraDoublePos.z); + } + else + { + // player position allows multi-cam mods to work better + quadTreeTickBlockPos = new DhBlockPos2D(MC_CLIENT.getPlayerBlockPos()); + } + + clientRenderState.quadtree.tryTick(quadTreeTickBlockPos); } diff --git a/core/src/main/resources/assets/distanthorizons/lang/en_us.json b/core/src/main/resources/assets/distanthorizons/lang/en_us.json index c85f1f2a5..43a2b541b 100644 --- a/core/src/main/resources/assets/distanthorizons/lang/en_us.json +++ b/core/src/main/resources/assets/distanthorizons/lang/en_us.json @@ -127,6 +127,10 @@ "Vertical Quality", "distanthorizons.config.client.advanced.graphics.quality.verticalQuality.@tooltip": "How well LODs represent overhangs, caves, cliffsides, etc.\n\nHigher options will increase memory and GPU usage.", + "distanthorizons.config.client.advanced.graphics.quality.useCameraPositionForQualityDropOff": + "Use Camera Pos for Quality Drop-Off", + "distanthorizons.config.client.advanced.graphics.quality.useCameraPositionForQualityDropOff.@tooltip": + "If true DH will try to use the camera position when \ndetermining LOD quality drop-off. \nIf false DH will use the player's position. \n\nEnabling helps free-cam mods render correctly. \nDisabling helps multi-camera mods render correctly (ie Immersive Portals or camera mods).", "distanthorizons.config.client.advanced.graphics.quality.horizontalScale": "Horizontal Scale", "distanthorizons.config.client.advanced.graphics.quality.horizontalScale.@tooltip":