From c169cb6b7f0673b172cf32e792c5e06708c79705 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Thu, 26 Aug 2021 23:02:32 +0200 Subject: [PATCH] Changed how color are calculated --- .../seibel/lod/builders/LodBufferBuilder.java | 49 +++-- .../com/seibel/lod/builders/LodBuilder.java | 7 +- .../lodTemplates/AbstractLodTemplate.java | 15 -- .../lodTemplates/CubicLodTemplate.java | 184 +++++++++++------- .../com/seibel/lod/objects/LodDimension.java | 1 + .../com/seibel/lod/proxy/ClientProxy.java | 4 +- .../java/com/seibel/lod/util/ColorUtil.java | 60 ++++++ 7 files changed, 202 insertions(+), 118 deletions(-) create mode 100644 src/main/java/com/seibel/lod/util/ColorUtil.java diff --git a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java index af164cefd..a3c701f1b 100644 --- a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java @@ -27,6 +27,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.locks.ReentrantLock; +import com.seibel.lod.objects.DataPoint; import net.minecraft.world.chunk.Chunk; import org.lwjgl.opengl.GL11; @@ -45,6 +46,8 @@ import net.minecraft.client.renderer.vertex.VertexBuffer; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; +import javax.xml.crypto.Data; + /** * This object is used to create NearFarBuffer objects. * @@ -209,36 +212,32 @@ public class LodBufferBuilder continue; } - if (lodDim.doesDataExist(posToRender)) + try { - try + if (lodDim.doesDataExist(posToRender)) { - ChunkPos adjChunkPos = new ChunkPos(0, 0); - if (lodDim.doesDataExist(posToRender)) + short[] lodData = lodDim.getData(posToRender); + short[][][] adjData = new short[2][2][]; + for (int x : new int[]{0, 1}) { - short[] lodData = lodDim.getData(posToRender); - short[][][] adjData = new short[2][2][]; - for (int x : new int[]{0, 1}) - { - adjPos.changeParameters(posToRender.detailLevel, posToRender.posX + x * 2 - 1, posToRender.posZ); - if (!renderer.vanillaRenderedChunks.contains(adjPos.getChunkPos())) - adjData[0][x] = lodDim.getData(adjPos); - } - - for (int z : new int[]{0, 1}) - { - adjPos.changeParameters(posToRender.detailLevel, posToRender.posX, posToRender.posZ + z * 2 - 1); - if (!renderer.vanillaRenderedChunks.contains(adjPos.getChunkPos())) - adjData[1][z] = lodDim.getData(adjPos); - } - - LodConfig.CLIENT.lodTemplate.get().template.addLodToBuffer(currentBuffer, playerBlockPos, lodData, adjData, - posToRender, renderer.debugging); + adjPos.changeParameters(posToRender.detailLevel, posToRender.posX + x * 2 - 1, posToRender.posZ); + if (!renderer.vanillaRenderedChunks.contains(adjPos.getChunkPos())) + adjData[0][x] = lodDim.getData(adjPos); } - } catch (ArrayIndexOutOfBoundsException e) - { - return false; + + for (int z : new int[]{0, 1}) + { + adjPos.changeParameters(posToRender.detailLevel, posToRender.posX, posToRender.posZ + z * 2 - 1); + if (!renderer.vanillaRenderedChunks.contains(adjPos.getChunkPos())) + adjData[1][z] = lodDim.getData(adjPos); + } + + LodConfig.CLIENT.lodTemplate.get().template.addLodToBuffer(currentBuffer, playerBlockPos, lodData, adjData, + posToRender, renderer.debugging); } + } catch (ArrayIndexOutOfBoundsException e) + { + return false; } }// for pos to in list to render diff --git a/src/main/java/com/seibel/lod/builders/LodBuilder.java b/src/main/java/com/seibel/lod/builders/LodBuilder.java index 63445558d..01ff9b0bb 100644 --- a/src/main/java/com/seibel/lod/builders/LodBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodBuilder.java @@ -28,6 +28,7 @@ import com.seibel.lod.objects.DataPoint; import com.seibel.lod.objects.LevelPos.LevelPos; import com.seibel.lod.objects.LodDimension; import com.seibel.lod.objects.LodWorld; +import com.seibel.lod.util.ColorUtil; import com.seibel.lod.util.LodThreadFactory; import com.seibel.lod.util.LodUtil; @@ -394,9 +395,9 @@ public class LodBuilder colorInt = getColorForBlock(x, z, blockState, biome); } - red += (colorInt>>16)&0xFF; - green += (colorInt>>8)&0xFF; - blue += (colorInt)&0xFF; + red += ColorUtil.getRed(colorInt); + green += ColorUtil.getGreen(colorInt); + blue += ColorUtil.getBlue(colorInt); numbOfBlocks++; diff --git a/src/main/java/com/seibel/lod/builders/lodTemplates/AbstractLodTemplate.java b/src/main/java/com/seibel/lod/builders/lodTemplates/AbstractLodTemplate.java index 665433485..aa656f40b 100644 --- a/src/main/java/com/seibel/lod/builders/lodTemplates/AbstractLodTemplate.java +++ b/src/main/java/com/seibel/lod/builders/lodTemplates/AbstractLodTemplate.java @@ -48,19 +48,4 @@ public abstract class AbstractLodTemplate /** Returns in bytes how much buffer memory is required * for one LOD object */ public abstract int getBufferMemoryForSingleNode(int level); - - - /** - * Edit the given color as a HSV (Hue Saturation Value) color. - */ - protected Color applySaturationAndBrightnessMultipliers(Color color, float saturationMultiplier, float brightnessMultiplier) - { - float[] hsv = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), null); - return Color.getHSBColor( - hsv[0], // hue - LodUtil.clamp(0.0f, hsv[1] * saturationMultiplier, 1.0f), - LodUtil.clamp(0.0f, hsv[2] * brightnessMultiplier, 1.0f)); - } - - } 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 f85955895..0ce01bbc8 100644 --- a/src/main/java/com/seibel/lod/builders/lodTemplates/CubicLodTemplate.java +++ b/src/main/java/com/seibel/lod/builders/lodTemplates/CubicLodTemplate.java @@ -23,6 +23,7 @@ import com.seibel.lod.enums.ShadingMode; import com.seibel.lod.handlers.LodConfig; import com.seibel.lod.objects.DataPoint; import com.seibel.lod.objects.LevelPos.LevelPos; +import com.seibel.lod.util.ColorUtil; import com.seibel.lod.util.LodUtil; import net.minecraft.client.renderer.BufferBuilder; @@ -61,10 +62,10 @@ public class CubicLodTemplate extends AbstractLodTemplate 0, levelPos.posZ * width); - Color color = new Color(DataPoint.getColor(data)); + int color = DataPoint.getColor(data); if (LodConfig.CLIENT.debugMode.get()) { - color = LodUtil.DEBUG_DETAIL_LEVEL_COLORS[levelPos.detailLevel]; + color = LodUtil.DEBUG_DETAIL_LEVEL_COLORS[levelPos.detailLevel].getRGB(); } if (bbox != null) @@ -105,12 +106,12 @@ public class CubicLodTemplate extends AbstractLodTemplate return new AxisAlignedBB(0, depth, 0, width, height, width).move(xOffset, yOffset, zOffset); } - private void addBoundingBoxToBuffer(BufferBuilder buffer, AxisAlignedBB bb, Color c, BlockPos playerBlockPos, short[][][] adjData) + private void addBoundingBoxToBuffer(BufferBuilder buffer, AxisAlignedBB bb, int c, BlockPos playerBlockPos, short[][][] adjData) { - Color topColor = c; - Color northSouthColor = c; - Color eastWestColor = c; - Color bottomColor = c; + int topColor = c; + int northSouthColor = c; + int eastWestColor = c; + int bottomColor = c; // darken the bottom and side colors if requested if (LodConfig.CLIENT.shadingMode.get() == ShadingMode.DARKEN_SIDES) @@ -118,172 +119,209 @@ public class CubicLodTemplate extends AbstractLodTemplate // the side colors are different because // when using fast lighting in Minecraft the north/south // and east/west sides are different in a similar way - int northSouthDarkenAmount = 25; - int eastWestDarkenAmount = 50; - int bottomDarkenAmount = 75; +/* + int northSouthDarkenAmount = -25; + int eastWestDarkenAmount = -50; + int bottomDarkenAmount = -75; - northSouthColor = new Color(Math.max(0, c.getRed() - northSouthDarkenAmount), Math.max(0, c.getGreen() - northSouthDarkenAmount), Math.max(0, c.getBlue() - northSouthDarkenAmount), c.getAlpha()); - eastWestColor = new Color(Math.max(0, c.getRed() - eastWestDarkenAmount), Math.max(0, c.getGreen() - eastWestDarkenAmount), Math.max(0, c.getBlue() - eastWestDarkenAmount), c.getAlpha()); - bottomColor = new Color(Math.max(0, c.getRed() - bottomDarkenAmount), Math.max(0, c.getGreen() - bottomDarkenAmount), Math.max(0, c.getBlue() - bottomDarkenAmount), c.getAlpha()); + northSouthColor = ColorUtil.applyShade(c,northSouthDarkenAmount); + eastWestColor = ColorUtil.applyShade(c,eastWestDarkenAmount); + bottomColor = ColorUtil.applyShade(c,bottomDarkenAmount);*/ + + float northSouthDarkenAmount = 0.80f; + float eastWestDarkenAmount = 0.60f; + float bottomDarkenAmount = 0.40f; + + northSouthColor = ColorUtil.applyShade(c,northSouthDarkenAmount); + eastWestColor = ColorUtil.applyShade(c,eastWestDarkenAmount); + bottomColor = ColorUtil.applyShade(c,bottomDarkenAmount); } // apply the user specified saturation and brightness 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); + topColor = ColorUtil.applySaturationAndBrightnessMultipliers(topColor, saturationMultiplier, brightnessMultiplier); + northSouthColor = ColorUtil.applySaturationAndBrightnessMultipliers(northSouthColor, saturationMultiplier, brightnessMultiplier); + bottomColor = ColorUtil.applySaturationAndBrightnessMultipliers(bottomColor, saturationMultiplier, brightnessMultiplier); int minY; int maxY; short[] data; + + int red; + int green; + int blue; + int alpha; /**TODO make all of this more automatic if possible*/ if (playerBlockPos.getY() > bb.maxY - CULL_OFFSET) { + red = ColorUtil.getRed(topColor); + green = ColorUtil.getGreen(topColor); + blue = ColorUtil.getBlue(topColor); + alpha = ColorUtil.getAlpha(topColor); // top (facing up) - addPosAndColor(buffer, bb.minX, bb.maxY, bb.minZ, topColor.getRed(), topColor.getGreen(), topColor.getBlue(), topColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.maxY, bb.maxZ, topColor.getRed(), topColor.getGreen(), topColor.getBlue(), topColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.maxY, bb.maxZ, topColor.getRed(), topColor.getGreen(), topColor.getBlue(), topColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.maxY, bb.minZ, topColor.getRed(), topColor.getGreen(), topColor.getBlue(), topColor.getAlpha()); + addPosAndColor(buffer, bb.minX, bb.maxY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.maxY, bb.minZ, red, green, blue, alpha); } if (playerBlockPos.getY() < bb.minY + CULL_OFFSET) { + red = ColorUtil.getRed(bottomColor); + green = ColorUtil.getGreen(bottomColor); + blue = ColorUtil.getBlue(bottomColor); + alpha = ColorUtil.getAlpha(bottomColor); // bottom (facing down) - addPosAndColor(buffer, bb.maxX, bb.minY, bb.minZ, bottomColor.getRed(), bottomColor.getGreen(), bottomColor.getBlue(), bottomColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.minY, bb.maxZ, bottomColor.getRed(), bottomColor.getGreen(), bottomColor.getBlue(), bottomColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.minY, bb.maxZ, bottomColor.getRed(), bottomColor.getGreen(), bottomColor.getBlue(), bottomColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.minY, bb.minZ, bottomColor.getRed(), bottomColor.getGreen(), bottomColor.getBlue(), bottomColor.getAlpha()); + addPosAndColor(buffer, bb.maxX, bb.minY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.minY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.minY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.minY, bb.minZ, red, green, blue, alpha); } if (playerBlockPos.getZ() > bb.minZ - CULL_OFFSET) { + red = ColorUtil.getRed(northSouthColor); + green = ColorUtil.getGreen(northSouthColor); + blue = ColorUtil.getBlue(northSouthColor); + alpha = ColorUtil.getAlpha(northSouthColor); // south (facing -Z) - data = adjData[1][1]; if (data == null) { - addPosAndColor(buffer, bb.maxX, bb.minY, bb.maxZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.maxY, bb.maxZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.maxY, bb.maxZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.minY, bb.maxZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); + addPosAndColor(buffer, bb.maxX, bb.minY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.minY, bb.maxZ, red, green, blue, alpha); } else { maxY = DataPoint.getHeight(data); if (maxY < bb.maxY) { minY = (int) Math.max(maxY, bb.minY); - addPosAndColor(buffer, bb.maxX, minY, bb.maxZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.maxY, bb.maxZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.maxY, bb.maxZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.minX, minY, bb.maxZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); + addPosAndColor(buffer, bb.maxX, minY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, minY, bb.maxZ, red, green, blue, alpha); } minY = DataPoint.getDepth(data); if (minY > bb.minY) { maxY = (int) Math.min(minY, bb.maxX); - addPosAndColor(buffer, bb.maxX, bb.minY, bb.maxZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, maxY, bb.maxZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.minX, maxY, bb.maxZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.minY, bb.maxZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); + addPosAndColor(buffer, bb.maxX, bb.minY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.minY, bb.maxZ, red, green, blue, alpha); } } } if (playerBlockPos.getZ() < bb.maxZ + CULL_OFFSET) { + red = ColorUtil.getRed(northSouthColor); + green = ColorUtil.getGreen(northSouthColor); + blue = ColorUtil.getBlue(northSouthColor); + alpha = ColorUtil.getAlpha(northSouthColor); data = adjData[1][0]; // north (facing +Z) if (data == null) { - addPosAndColor(buffer, bb.minX, bb.minY, bb.minZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.maxY, bb.minZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.maxY, bb.minZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.minY, bb.minZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); + addPosAndColor(buffer, bb.minX, bb.minY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.maxY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.maxY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.minY, bb.minZ, red, green, blue, alpha); } else { maxY = DataPoint.getHeight(data); if (maxY < bb.maxY) { minY = (int) Math.max(maxY, bb.minY); - addPosAndColor(buffer, bb.minX, minY, bb.minZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.maxY, bb.minZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.maxY, bb.minZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, minY, bb.minZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); + addPosAndColor(buffer, bb.minX, minY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.maxY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.maxY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, minY, bb.minZ, red, green, blue, alpha); } minY = DataPoint.getDepth(data); if (minY > bb.minY) { maxY = (int) Math.min(minY, bb.maxX); - addPosAndColor(buffer, bb.minX, bb.minY, bb.minZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.minX, maxY, bb.minZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, maxY, bb.minZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.minY, bb.minZ, northSouthColor.getRed(), northSouthColor.getGreen(), northSouthColor.getBlue(), northSouthColor.getAlpha()); + addPosAndColor(buffer, bb.minX, bb.minY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, maxY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, maxY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.minY, bb.minZ, red, green, blue, alpha); } } } if (playerBlockPos.getX() < bb.maxX + CULL_OFFSET) { + red = ColorUtil.getRed(eastWestColor); + green = ColorUtil.getGreen(eastWestColor); + blue = ColorUtil.getBlue(eastWestColor); + alpha = ColorUtil.getAlpha(eastWestColor); // west (facing -X) data = adjData[0][0]; if (data == null) { - addPosAndColor(buffer, bb.minX, bb.minY, bb.minZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.minY, bb.maxZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.maxY, bb.maxZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.maxY, bb.minZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); + addPosAndColor(buffer, bb.minX, bb.minY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.minY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.maxY, bb.minZ, red, green, blue, alpha); } else { maxY = DataPoint.getHeight(data); if (maxY < bb.maxY) { minY = (int) Math.max(maxY, bb.minY); - addPosAndColor(buffer, bb.minX, minY, bb.minZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.minX, minY, bb.maxZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.maxY, bb.maxZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.maxY, bb.minZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); + addPosAndColor(buffer, bb.minX, minY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, minY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.maxY, bb.minZ, red, green, blue, alpha); } minY = DataPoint.getDepth(data); if (minY > bb.minY) { maxY = (int) Math.min(minY, bb.maxX); - addPosAndColor(buffer, bb.minX, bb.minY, bb.minZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.minX, bb.minY, bb.maxZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.minX, maxY, bb.maxZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.minX, maxY, bb.minZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); + addPosAndColor(buffer, bb.minX, bb.minY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, bb.minY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.minX, maxY, bb.minZ, red, green, blue, alpha); } } } if (playerBlockPos.getX() > bb.minX - CULL_OFFSET) { + red = ColorUtil.getRed(eastWestColor); + green = ColorUtil.getGreen(eastWestColor); + blue = ColorUtil.getBlue(eastWestColor); + alpha = ColorUtil.getAlpha(eastWestColor); // east (facing +X) data = adjData[0][1]; if (data == null) { - addPosAndColor(buffer, bb.maxX, bb.maxY, bb.minZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.maxY, bb.maxZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.minY, bb.maxZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.minY, bb.minZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); + addPosAndColor(buffer, bb.maxX, bb.maxY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.minY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.minY, bb.minZ, red, green, blue, alpha); } else { maxY = DataPoint.getHeight(data); if (maxY < bb.maxY) { minY = (int) Math.max(maxY, bb.minY); - addPosAndColor(buffer, bb.maxX, bb.maxY, bb.minZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.maxY, bb.maxZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, minY, bb.maxZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, minY, bb.minZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); + addPosAndColor(buffer, bb.maxX, bb.maxY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, minY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, minY, bb.minZ, red, green, blue, alpha); } minY = DataPoint.getDepth(data); if (minY > bb.minY) { maxY = (int) Math.min(minY, bb.maxX); - addPosAndColor(buffer, bb.maxX, maxY, bb.minZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, maxY, bb.maxZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.minY, bb.maxZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); - addPosAndColor(buffer, bb.maxX, bb.minY, bb.minZ, eastWestColor.getRed(), eastWestColor.getGreen(), eastWestColor.getBlue(), eastWestColor.getAlpha()); + addPosAndColor(buffer, bb.maxX, maxY, bb.minZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, maxY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.minY, bb.maxZ, red, green, blue, alpha); + addPosAndColor(buffer, bb.maxX, bb.minY, bb.minZ, red, green, blue, alpha); } } } diff --git a/src/main/java/com/seibel/lod/objects/LodDimension.java b/src/main/java/com/seibel/lod/objects/LodDimension.java index 9eb768056..b8182fc82 100644 --- a/src/main/java/com/seibel/lod/objects/LodDimension.java +++ b/src/main/java/com/seibel/lod/objects/LodDimension.java @@ -479,6 +479,7 @@ public class LodDimension listOfData.remove(min); levelMinPosList.add(min); } + Collections.sort(levelMinPosList, LevelPos.getPosComparator(playerPosX,playerPosZ)); return levelMinPosList; } diff --git a/src/main/java/com/seibel/lod/proxy/ClientProxy.java b/src/main/java/com/seibel/lod/proxy/ClientProxy.java index 588fc6276..71e8a0eb3 100644 --- a/src/main/java/com/seibel/lod/proxy/ClientProxy.java +++ b/src/main/java/com/seibel/lod/proxy/ClientProxy.java @@ -153,8 +153,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.brightnessMultiplier.set(1.2); + LodConfig.CLIENT.saturationMultiplier.set(1.1); LodConfig.CLIENT.distanceGenerationMode.set(DistanceGenerationMode.SURFACE); LodConfig.CLIENT.lodChunkRenderDistance.set(128); diff --git a/src/main/java/com/seibel/lod/util/ColorUtil.java b/src/main/java/com/seibel/lod/util/ColorUtil.java new file mode 100644 index 000000000..d5d019fd2 --- /dev/null +++ b/src/main/java/com/seibel/lod/util/ColorUtil.java @@ -0,0 +1,60 @@ +package com.seibel.lod.util; + +import java.awt.*; + +public class ColorUtil +{ + public static int rgbToInt(int red, int green, int blue){ + return (0xFF << 24) | (red << 16) | (green << 8) | blue; + } + + public static int rgbToInt( int alpha, int red, int green, int blue){ + return (alpha << 24) | (red << 16) | (green << 8) | blue; + } + + public static int getAlpha(int color){ + return (color>>24)&0xFF; + } + + public static int getRed(int color){ + return (color>>16)&0xFF; + } + + public static int getGreen(int color){ + return (color>>8)&0xFF; + } + + public static int getBlue(int color){ + return color &0xFF; + } + + public static int applyShade(int color, int shade){ + if(shade<0) + { + return (getAlpha(color) << 24) | (Math.max(getRed(color) + shade, 0) << 16) | (Math.max(getGreen(color) + shade, 0) << 8) | Math.max(getBlue(color) + shade, 0); + }else{ + return (getAlpha(color) << 24) | (Math.min(getRed(color) + shade, 255) << 16) | (Math.min(getGreen(color) + shade, 255) << 8) | Math.min(getBlue(color) + shade, 255); + } + } + + public static int applyShade(int color, float shade){ + if(shade<1) + { + return (getAlpha(color) << 24) | ((int) Math.max(getRed(color) * shade, 0) << 16) | ((int) Math.max(getGreen(color) * shade, 0) << 8) | (int) Math.max(getBlue(color) * shade, 0); + }else{ + return (getAlpha(color) << 24) | ((int) Math.min(getRed(color) * shade, 255) << 16) | ((int) Math.min(getGreen(color) * shade, 255) << 8) |(int) Math.min(getBlue(color) * shade, 255); + } + } + + /** + * Edit the given color as a HSV (Hue Saturation Value) color. + */ + public static int applySaturationAndBrightnessMultipliers(int color, float saturationMultiplier, float brightnessMultiplier) + { + float[] hsv = Color.RGBtoHSB( getRed(color), getGreen(color), getBlue(color), null); + return Color.getHSBColor( + hsv[0], // hue + LodUtil.clamp(0.0f, hsv[1] * saturationMultiplier, 1.0f), + LodUtil.clamp(0.0f, hsv[2] * brightnessMultiplier, 1.0f)).getRGB(); + } +}