From 2ae9f200a4b5e149dbbf5c3d7948f1d7d6cae8bc Mon Sep 17 00:00:00 2001 From: nextdaydelivery <79922345+nxtdaydelivery@users.noreply.github.com> Date: Sun, 8 May 2022 09:33:00 +0100 Subject: oneColor --- .../oneconfig/config/interfaces/Size.java | 6 - .../cc/polyfrost/oneconfig/lwjgl/OneColor.java | 139 +++++++++++++++++++++ 2 files changed, 139 insertions(+), 6 deletions(-) delete mode 100644 src/main/java/cc/polyfrost/oneconfig/config/interfaces/Size.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/lwjgl/OneColor.java (limited to 'src/main') diff --git a/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Size.java b/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Size.java deleted file mode 100644 index 137e3fd..0000000 --- a/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Size.java +++ /dev/null @@ -1,6 +0,0 @@ -package cc.polyfrost.oneconfig.config.interfaces; - -public enum Size { - SINGLE_COLUMN, // A single column, 480x32 - DOUBLE_COLUMN // A double column, 992x32 -} diff --git a/src/main/java/cc/polyfrost/oneconfig/lwjgl/OneColor.java b/src/main/java/cc/polyfrost/oneconfig/lwjgl/OneColor.java new file mode 100644 index 0000000..6bd7a91 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/lwjgl/OneColor.java @@ -0,0 +1,139 @@ +package cc.polyfrost.oneconfig.lwjgl; + +import org.jetbrains.annotations.NotNull; + +import java.awt.*; + +@SuppressWarnings("unused") +public class OneColor { + private byte[] rgb = new byte[3]; + private byte alpha; + private int rgba; + private final float[] hsb; + private int chroma = -1; + + + // rgb constructors + public OneColor(int rgba) { + this.rgba = rgba; + this.rgb = splitColor(rgba); + this.alpha = (byte) (rgba >> 24 & 255); + hsb = Color.RGBtoHSB(this.rgb[0], this.rgb[1], this.rgb[2], null); + } + + public OneColor(int r, int g, int b, int a) { + this.rgba = (a << 24) | (r << 16) | (g << 8) | b; // trusting copilot on this + this.rgb = splitColor(rgba); + this.alpha = (byte) a; + hsb = Color.RGBtoHSB(this.rgb[0], this.rgb[1], this.rgb[2], null); + } + + public OneColor(int r, int g, int b) { + this(r, g, b, 255); + } + + public OneColor(@NotNull Color c) { + this(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha()); + } + + + + // hsb constructors + public OneColor(float hue, float saturation, float brightness, float alpha) { + this.hsb = new float[]{hue, saturation, brightness}; + this.alpha = (byte) (alpha * 255); + this.rgba = getRGBAFromHSB(this.hsb[0], this.hsb[1], this.hsb[2]); + + } + + public OneColor(float hue, float saturation, float brightness) { + this(hue, saturation, brightness, 1.0f); + } + + // chroma constructors + public OneColor(float saturation, float brightness, float alpha, int chromaSpeed) { + this(System.currentTimeMillis() % chromaSpeed / (float) chromaSpeed, saturation, brightness, alpha); + this.chroma = chromaSpeed; + } + + + // internal constructor + public OneColor(float hue, float saturation, float brightness, float alpha, int chromaSpeed) { + if(chromaSpeed == -1) { + this.hsb = new float[]{hue, saturation, brightness}; + this.alpha = (byte) (alpha * 255); + this.rgba = getRGBAFromHSB(this.hsb[0], this.hsb[1], this.hsb[2]); + } else { + this.chroma = chromaSpeed; + this.hsb = new float[]{hue, saturation, brightness}; + this.alpha = (byte) (alpha * 255); + } + } + + + + + + // accessors + public int getRed() { + return rgb[0]; + } + public int getGreen() { + return rgb[1]; + } + public int getBlue() { + return rgb[2]; + } + public int getAlpha() { + return alpha; + } + + public float getHue() { + return hsb[0]; + } + public float getSaturation() { + return hsb[1]; + } + public float getBrightness() { + return hsb[2]; + } + + /** + * Return the current color in RGBA format. This is the format used by LWJGL and Minecraft. + * This method WILL return the color as a chroma, at the specified speed, if it is set. + * Otherwise, it will just return the current color. + */ + public int getRGB() { + if(chroma == -1) { + return rgba; + } else { + return getRGBAFromHSB(System.currentTimeMillis() % chroma / (float) chroma, hsb[1], hsb[2]); + } + } + + + + private byte[] splitColor(int rgb) { + byte r = (byte) (rgb >> 16 & 255); + byte g = (byte) (rgb >> 8 & 255); + byte b = (byte) (rgb & 255); + return new byte[]{r, g, b}; + } + + /** set the current chroma speed. Set to -1 to disable chroma. */ + public void setChromaSpeed(int speed) { + this.chroma = speed; + } + + public void setAlpha(int alpha) { + this.alpha = (byte) alpha; + } + + /** Get the RGBA color from the HSB color, and apply the alpha. */ + public int getRGBAFromHSB(float hue, float saturation, float brightness) { + int temp = Color.HSBtoRGB(hue, saturation, brightness); + this.rgba = (this.alpha << 24) | (temp >> 16 & 255) << 16 | (temp >> 8 & 255) << 8 | temp & 255; // trusting copilot on this + return rgba; + } + +} -- cgit