From a76436b73d34b16c0767de4f299519aebe783b71 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 26 Sep 2021 08:20:37 -0500 Subject: [PATCH] Bring back the drawLODs config --- .../java/com/seibel/lod/config/LodConfig.java | 28 +++++++++++++------ .../seibel/lod/mixin/MixinWorldRenderer.java | 14 ++++++---- .../com/seibel/lod/proxy/ClientProxy.java | 28 ++++++++----------- 3 files changed, 39 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/seibel/lod/config/LodConfig.java b/src/main/java/com/seibel/lod/config/LodConfig.java index 34b2bc193..9fdf5bf4d 100644 --- a/src/main/java/com/seibel/lod/config/LodConfig.java +++ b/src/main/java/com/seibel/lod/config/LodConfig.java @@ -33,6 +33,7 @@ import com.seibel.lod.enums.DistanceQualityDropOff; import com.seibel.lod.enums.FogDistance; import com.seibel.lod.enums.FogDrawOverride; import com.seibel.lod.enums.GenerationPriority; +import com.seibel.lod.enums.HorizontalQuality; import com.seibel.lod.enums.HorizontalResolution; import com.seibel.lod.enums.LodTemplate; import com.seibel.lod.enums.VerticalQuality; @@ -46,7 +47,7 @@ import net.minecraftforge.fml.config.ModConfig; * This handles any configuration the user has access to. * * @author James Seibel - * @version 9-24-2021 + * @version 9-26-2021 */ @Mod.EventBusSubscriber public class LodConfig @@ -79,6 +80,8 @@ public class LodConfig public static class Graphics { + public ForgeConfigSpec.BooleanValue drawLods; + public ForgeConfigSpec.EnumValue fogDistance; public ForgeConfigSpec.EnumValue fogDrawOverride; @@ -88,7 +91,7 @@ public class LodConfig // public ForgeConfigSpec.EnumValue shadingMode; -// public ForgeConfigSpec.EnumValue horizontalQuality; + public ForgeConfigSpec.EnumValue horizontalQuality; public ForgeConfigSpec.EnumValue detailDropOff; @@ -103,6 +106,13 @@ public class LodConfig { builder.comment("These settings control how the LODs look.").push(this.getClass().getSimpleName()); + drawLods = builder + .comment("\n\n" + + " If true, the mod is enabled and LODs will be drawn. \n" + + " If false, the mod will still generate LODs, \n" + + " but they won't be rendered. \n") + .define("drawLODs", true); + fogDistance = builder .comment("\n\n" + " At what distance should Fog be drawn on the LODs? \n" @@ -148,13 +158,13 @@ public class LodConfig + " " + HorizontalResolution.BLOCK + ": render 256 LODs for each Chunk. \n") .defineEnum("Draw resolution", HorizontalResolution.BLOCK); -// horizontalQuality = builder -// .comment("\n\n" -// + " This indicates how quickly LODs drop off in quality. \n" -// + " " + HorizontalQuality.LOW + ": quality drops every 4 chunks. \n" -// + " " + HorizontalQuality.MEDIUM + ": quality drops every 8 chunks. \n" -// + " " + HorizontalQuality.HIGH + ": quality drops every 16 chunks. \n") -// .defineEnum("lodDrawQuality", HorizontalQuality.MEDIUM); + horizontalQuality = builder + .comment("\n\n" + + " This indicates how quickly LODs drop off in quality. \n" + + " " + HorizontalQuality.LOW + ": quality drops every 4 chunks. \n" + + " " + HorizontalQuality.MEDIUM + ": quality drops every 8 chunks. \n" + + " " + HorizontalQuality.HIGH + ": quality drops every 16 chunks. \n") + .defineEnum("lodDrawQuality", HorizontalQuality.MEDIUM); lodChunkRenderDistance = builder .comment("\n\n" diff --git a/src/main/java/com/seibel/lod/mixin/MixinWorldRenderer.java b/src/main/java/com/seibel/lod/mixin/MixinWorldRenderer.java index cd7e44db7..44d0fb885 100644 --- a/src/main/java/com/seibel/lod/mixin/MixinWorldRenderer.java +++ b/src/main/java/com/seibel/lod/mixin/MixinWorldRenderer.java @@ -17,16 +17,18 @@ */ package com.seibel.lod.mixin; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.seibel.lod.LodMain; -import com.seibel.lod.proxy.ClientProxy; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.WorldRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.seibel.lod.LodMain; +import com.seibel.lod.config.LodConfig; + +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.WorldRenderer; + /** * This class is used to mix in my rendering code * before Minecraft starts rendering blocks. @@ -55,7 +57,7 @@ public class MixinWorldRenderer { // only render if LODs are enabled and // only render before solid blocks - if (ClientProxy.drawLods && renderType.equals(RenderType.solid())) + if (LodConfig.CLIENT.graphics.drawLods.get() && renderType.equals(RenderType.solid())) LodMain.client_proxy.renderLods(matrixStackIn, previousPartialTicks); } } diff --git a/src/main/java/com/seibel/lod/proxy/ClientProxy.java b/src/main/java/com/seibel/lod/proxy/ClientProxy.java index 4b8587c1c..652f70c22 100644 --- a/src/main/java/com/seibel/lod/proxy/ClientProxy.java +++ b/src/main/java/com/seibel/lod/proxy/ClientProxy.java @@ -52,14 +52,17 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; * and is the starting point for most of the mod. * * @author James_Seibel - * @version 9-23-2021 + * @version 9-26-2021 */ public class ClientProxy { public static final Logger LOGGER = LogManager.getLogger("LOD"); + /** + * there is some setup that should only happen once, + * once this is true that setup has completed + */ private boolean firstTimeSetupComplete = false; - public static boolean drawLods = true; private static LodWorld lodWorld = new LodWorld(); private static LodBuilder lodBuilder = new LodBuilder(); @@ -72,13 +75,9 @@ public class ClientProxy private MinecraftWrapper mc = MinecraftWrapper.INSTANCE; - /** - * This is used to determine if the LODs should be regenerated - */ + /** This is used to determine if the LODs should be regenerated */ public static int previousChunkRenderDistance = 0; - /** - * This is used to determine if the LODs should be regenerated - */ + /** This is used to determine if the LODs should be regenerated */ public static int previousLodRenderDistance = 0; /** @@ -100,6 +99,7 @@ public class ClientProxy /** * Do any setup that is required to draw LODs * and then tell the LodRenderer to draw. + * * @param mcMatrixStack */ public void renderLods(MatrixStack mcMatrixStack, float partialTicks) @@ -114,11 +114,9 @@ public class ClientProxy { // only run the first time setup once if (!firstTimeSetupComplete) - { firstFrameSetup(); - } - DetailDistanceUtil.updateSettings(); + if (mc == null || mc.getPlayer() == null || !lodWorld.getIsWorldLoaded()) return; @@ -126,6 +124,7 @@ public class ClientProxy if (lodDim == null) return; + DetailDistanceUtil.updateSettings(); viewDistanceChangedEvent(); playerMoveEvent(lodDim); @@ -141,10 +140,7 @@ public class ClientProxy profiler.pop(); // get out of "terrain" profiler.push("LOD"); - if(drawLods) - { - renderer.drawLODs(lodDim, mcMatrixStack, partialTicks, mc.getProfiler()); - } + renderer.drawLODs(lodDim, mcMatrixStack, partialTicks, mc.getProfiler()); profiler.pop(); // end LOD profiler.push("terrain"); // go back into "terrain" @@ -302,7 +298,7 @@ public class ClientProxy if(LodConfig.CLIENT.debugging.enableDebugKeybindings.get() && event.getKey() == GLFW.GLFW_KEY_F6 && event.getAction() == GLFW.GLFW_PRESS) { - drawLods = !drawLods; + LodConfig.CLIENT.graphics.drawLods.set(!LodConfig.CLIENT.graphics.drawLods.get()); } }