diff --git a/src/main/java/com/seibel/lod/builders/lodTemplates/CubicLodTemplate.java b/src/main/java/com/seibel/lod/builders/lodTemplates/CubicLodTemplate.java index 0b63ded17..af7e8ad71 100644 --- a/src/main/java/com/seibel/lod/builders/lodTemplates/CubicLodTemplate.java +++ b/src/main/java/com/seibel/lod/builders/lodTemplates/CubicLodTemplate.java @@ -122,6 +122,14 @@ public class CubicLodTemplate extends AbstractLodTemplate bottomColor = new Color(Math.max(0, c.getRed() - bottomDarkenAmount), Math.max(0, c.getGreen() - bottomDarkenAmount), Math.max(0, c.getBlue() - bottomDarkenAmount), c.getAlpha()); } + float saturationMultiplier = LodConfig.CLIENT.saturationMultiplier.get().floatValue(); + float brightnessMultiplier = LodConfig.CLIENT.brightnessMultiplier.get().floatValue(); + + topColor = applySaturationAndBrightnessMultipliers(topColor, saturationMultiplier, brightnessMultiplier); + northSouthColor = applySaturationAndBrightnessMultipliers(northSouthColor, saturationMultiplier, brightnessMultiplier); + bottomColor = applySaturationAndBrightnessMultipliers(bottomColor, saturationMultiplier, brightnessMultiplier); + + // top (facing up) addPosAndColor(buffer, bb.minX, bb.maxY, bb.minZ, topColor.getRed(), topColor.getGreen(), topColor.getBlue(), topColor.getAlpha()); @@ -157,6 +165,16 @@ public class CubicLodTemplate extends AbstractLodTemplate addPosAndColor(buffer, bb.maxX, bb.minY, bb.minZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); } + + /** + * Edit the given color in HSV mode. + */ + private Color applySaturationAndBrightnessMultipliers(Color color, float saturationMultiplier, float brightnessMultiplier) + { + float[] hsv = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), null); + return Color.getHSBColor(hsv[0], LodUtil.clamp(0.0f, hsv[1] * saturationMultiplier, 1.0f), LodUtil.clamp(0.0f, hsv[2] * brightnessMultiplier, 1.0f)); + } + @Override public int getBufferMemoryForSingleLod(LodDetail detail) diff --git a/src/main/java/com/seibel/lod/handlers/LodConfig.java b/src/main/java/com/seibel/lod/handlers/LodConfig.java index f1b2d7a5c..87e3f984d 100644 --- a/src/main/java/com/seibel/lod/handlers/LodConfig.java +++ b/src/main/java/com/seibel/lod/handlers/LodConfig.java @@ -72,6 +72,9 @@ public class LodConfig * to determine how far out to generate/render LODs */ public ForgeConfigSpec.IntValue lodChunkRadiusMultiplier; + public ForgeConfigSpec.DoubleValue brightnessMultiplier; + + public ForgeConfigSpec.DoubleValue saturationMultiplier; Client(ForgeConfigSpec.Builder builder) @@ -226,6 +229,24 @@ public class LodConfig + " " + "Fastest /n") .defineEnum("lightingMode", ShadingMode.DARKEN_SIDES); + + + brightnessMultiplier = builder + .comment("\n\n" + + " Change how bright LOD colors are. \n" + + " 0 = black \n" + + " 1 = normal color value \n" + + " 2 = washed out colors \n") + .defineInRange("brightnessMultiplier", 1.0, 0, 2); + + saturationMultiplier = builder + .comment("\n\n" + + " Change how saturated LOD colors are. \n" + + " 0 = black and white \n" + + " 1 = normal saturation \n" + + " 2 = very saturated \n") + .defineInRange("saturationMultiplier", 1.0, 0, 2); + builder.pop(); } } diff --git a/src/main/java/com/seibel/lod/proxy/ClientProxy.java b/src/main/java/com/seibel/lod/proxy/ClientProxy.java index a76a41a25..65a138829 100644 --- a/src/main/java/com/seibel/lod/proxy/ClientProxy.java +++ b/src/main/java/com/seibel/lod/proxy/ClientProxy.java @@ -120,6 +120,8 @@ public class ClientProxy // LodConfig.CLIENT.fogDistance.set(FogDistance.FAR); // LodConfig.CLIENT.fogDrawOverride.set(FogDrawOverride.ALWAYS_DRAW_FOG_FANCY); // LodConfig.CLIENT.shadingMode.set(ShadingMode.DARKEN_SIDES); +// LodConfig.CLIENT.brightnessMultiplier.set(1.0); +// LodConfig.CLIENT.saturationMultiplier.set(1.0); // LodConfig.CLIENT.distanceGenerationMode.set(DistanceGenerationMode.FEATURES); // LodConfig.CLIENT.allowUnstableFeatureGeneration.set(false);