diff options
author | nextdaydelivery <79922345+nxtdaydelivery@users.noreply.github.com> | 2022-04-21 14:19:44 +0100 |
---|---|---|
committer | nextdaydelivery <79922345+nxtdaydelivery@users.noreply.github.com> | 2022-04-21 14:19:44 +0100 |
commit | 260d48126cbedb4341c5c5865bfd8e605f90955a (patch) | |
tree | 563f65d65d708f24df33759c411b0f2338c1933e /src/main/java/io/polyfrost | |
parent | 30df910cf3b2f5b0683ce01e391c35829d8a5850 (diff) | |
download | OneConfig-260d48126cbedb4341c5c5865bfd8e605f90955a.tar.gz OneConfig-260d48126cbedb4341c5c5865bfd8e605f90955a.tar.bz2 OneConfig-260d48126cbedb4341c5c5865bfd8e605f90955a.zip |
more gui things like text field and button
Diffstat (limited to 'src/main/java/io/polyfrost')
11 files changed, 240 insertions, 56 deletions
diff --git a/src/main/java/io/polyfrost/oneconfig/config/OneConfigConfig.java b/src/main/java/io/polyfrost/oneconfig/config/OneConfigConfig.java index 570d379..14cad6c 100644 --- a/src/main/java/io/polyfrost/oneconfig/config/OneConfigConfig.java +++ b/src/main/java/io/polyfrost/oneconfig/config/OneConfigConfig.java @@ -27,9 +27,10 @@ public class OneConfigConfig extends Config { public static int GRAY_400 = new Color(55, 59, 69, 255).getRGB(); // Gray 400 // button gray hover public static int GRAY_400_80 = new Color(55, 59, 69, 204).getRGB(); // Gray 400 80% // button gray pressed - public static int BLUE_700 = new Color(18, 71, 178, 255).getRGB(); // Blue 700 // button blue normal - public static int BLUE_600 = new Color(20, 82, 204, 255).getRGB(); // Blue 600 - public static int BLUE_500 = new Color(25, 103, 255, 255).getRGB(); // Blue 500 + public static int BLUE_700 = new Color(18, 71, 178, 255).getRGB(); // Blue 700 + public static int BLUE_600 = new Color(20, 82, 204, 255).getRGB(); // Blue 600 // button blue normal + public static int BLUE_600_80 = new Color(20, 82, 204, 204).getRGB(); // Blue 600 80% // button blue click + public static int BLUE_500 = new Color(25, 103, 255, 255).getRGB(); // Blue 500 // button blue hover public static int WHITE_60 = new Color(255, 255, 255, 153).getRGB(); // White 60% public static int WHITE_90 = new Color(255, 255, 255, 229).getRGB(); // White 90% public static int WHITE = new Color(255, 255, 255, 255).getRGB(); // White 100% diff --git a/src/main/java/io/polyfrost/oneconfig/gui/OneConfigGui.java b/src/main/java/io/polyfrost/oneconfig/gui/OneConfigGui.java index cbe1c6a..24bfe19 100644 --- a/src/main/java/io/polyfrost/oneconfig/gui/OneConfigGui.java +++ b/src/main/java/io/polyfrost/oneconfig/gui/OneConfigGui.java @@ -1,16 +1,24 @@ package io.polyfrost.oneconfig.gui; -import io.polyfrost.oneconfig.OneConfig; import io.polyfrost.oneconfig.config.OneConfigConfig; +import io.polyfrost.oneconfig.gui.elements.BasicButton; import io.polyfrost.oneconfig.gui.elements.BasicElement; +import io.polyfrost.oneconfig.gui.elements.TextInputField; import io.polyfrost.oneconfig.lwjgl.RenderManager; +import io.polyfrost.oneconfig.lwjgl.font.Fonts; import net.minecraft.client.gui.GuiScreen; - -import java.awt.*; +import org.lwjgl.input.Keyboard; public class OneConfigGui extends GuiScreen { + public static OneConfigGui INSTANCE; private final BasicElement element = new BasicElement(200, 200, 1, true); + private final TextInputField textInputField = new TextInputField(776, 32, "Search all of OneConfig...", false, false); + private final BasicButton btn = new BasicButton(184, 36, "Socials", "/assets/oneconfig/textures/share.png", "/assets/oneconfig/textures/share2.png", 1, true); + + public OneConfigGui() { + INSTANCE = this; + } @Override public void drawScreen(int mouseX, int mouseY, float partialTicks) { super.drawScreen(mouseX, mouseY, partialTicks); @@ -26,18 +34,32 @@ public class OneConfigGui extends GuiScreen { RenderManager.drawLine(vg, 544, 212, 1600, 212, 1, OneConfigConfig.GRAY_700); RenderManager.drawLine(vg, 544, 140, 544, 940, 1, OneConfigConfig.GRAY_700); - RenderManager.drawString(vg, "OneConfig", 389, 163, OneConfigConfig.WHITE, 18f, "inter-bold"); - RenderManager.drawString(vg, "By Polyfrost", 389, 183, OneConfigConfig.WHITE, 12f, "inter-regular"); - element.setColorPalette(0); - element.draw(vg, 0, 0); + RenderManager.drawString(vg, "OneConfig", 389, 163, OneConfigConfig.WHITE, 18f, Fonts.INTER_BOLD); + RenderManager.drawString(vg, "By Polyfrost", 389, 183, OneConfigConfig.WHITE, 12f, Fonts.INTER_REGULAR); + //element.setColorPalette(0); + try { + //element.draw(vg, 0, 0); + textInputField.draw(vg, 792, 548); + btn.draw(vg, 976, 870); + } catch (Exception e) { + e.printStackTrace(); + } //RenderManager.drawGradientRoundedRect(vg, 100, 100, 500, 100, OneConfigConfig.BLUE_600, OneConfigConfig.BLUE_500, OneConfigConfig.CORNER_RADIUS_WIN); - - }); } + protected void keyTyped(char key, int keyCode) { + Keyboard.enableRepeatEvents(true); + try { + super.keyTyped(key, keyCode); + textInputField.keyTyped(key, keyCode); + } catch (Exception e) { + System.out.println("this should literally never happen"); + } + } + @Override public boolean doesGuiPauseGame() { diff --git a/src/main/java/io/polyfrost/oneconfig/gui/elements/BasicButton.java b/src/main/java/io/polyfrost/oneconfig/gui/elements/BasicButton.java new file mode 100644 index 0000000..e918287 --- /dev/null +++ b/src/main/java/io/polyfrost/oneconfig/gui/elements/BasicButton.java @@ -0,0 +1,47 @@ +package io.polyfrost.oneconfig.gui.elements; + +import io.polyfrost.oneconfig.lwjgl.RenderManager; +import io.polyfrost.oneconfig.lwjgl.font.Fonts; +import io.polyfrost.oneconfig.utils.ColorUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import static org.lwjgl.nanovg.NanoVG.nvgTextBounds; + +public class BasicButton extends BasicElement { + + protected String text; + protected String fileNameLeftIco, fileNameRightIco; + + public BasicButton(int width, int height, @NotNull String text, @Nullable String fileNameLeftIco, @Nullable String fileNameRightIco, int colorPalette, boolean hoverFx) { + super(width, height, colorPalette, hoverFx); + this.text = text; + this.fileNameLeftIco = fileNameLeftIco; + this.fileNameRightIco = fileNameRightIco; + } + + + @Override + public void draw(long vg, int x, int y) { + RenderManager.drawRectangle(vg, x, y, this.width, this.height, this.currentColor); + final float fontSize; + if(colorPalette == -1) { + fontSize = 24f; + } else fontSize = 14f; + float width = RenderManager.getTextWidth(vg, text, fontSize); + int middle = x + this.width / 2; + RenderManager.drawString(vg, text,middle - width / 2, y + ((float) height / 2),-1, fontSize, Fonts.INTER_MEDIUM); + if(fileNameLeftIco != null) { + RenderManager.drawImage(vg, fileNameLeftIco, middle - width - 8, y + 8, 20, 20); + } + if(fileNameRightIco != null) { + RenderManager.drawImage(vg, fileNameRightIco, middle + width - 8, y + 8, 20, 20); + } + this.update(x, y); + if(hoverFx) { + currentColor = ColorUtils.getColor(currentColor, 1, hovered, clicked); + } + } + + +} diff --git a/src/main/java/io/polyfrost/oneconfig/gui/elements/BasicElement.java b/src/main/java/io/polyfrost/oneconfig/gui/elements/BasicElement.java index 0b7d604..765a271 100644 --- a/src/main/java/io/polyfrost/oneconfig/gui/elements/BasicElement.java +++ b/src/main/java/io/polyfrost/oneconfig/gui/elements/BasicElement.java @@ -6,19 +6,14 @@ import net.minecraft.client.Minecraft; import org.lwjgl.input.Mouse; public class BasicElement { - private int width; - private int height; - private int colorPalette; - - private int hitBoxX, hitBoxY; - - private final boolean hoverFx; - - private boolean hovered = false; - private boolean clicked = false; - private boolean toggled = false; - - private int currentColor; + protected int width, height; + protected int colorPalette; + protected int hitBoxX, hitBoxY; + protected final boolean hoverFx; + protected boolean hovered = false; + protected boolean clicked = false; + protected boolean toggled = false; + protected int currentColor; public BasicElement(int width, int height, int colorPalette, boolean hoverFx) { this.height = height; @@ -37,6 +32,14 @@ public class BasicElement { public void draw(long vg, int x, int y) { RenderManager.drawRectangle(vg, x, y, width, height, currentColor); + + update(x, y); + if (hoverFx) { + currentColor = ColorUtils.getColor(currentColor, colorPalette, hovered, clicked); + } + } + + public void update(int x, int y) { int mouseX = Mouse.getX(); int mouseY = Minecraft.getMinecraft().displayHeight - Math.abs(Mouse.getY()); int buttonRight = x + width; @@ -47,10 +50,6 @@ public class BasicElement { toggled = !toggled; } clicked = Mouse.isButtonDown(0) && hovered; - - if (hoverFx) { - currentColor = ColorUtils.getColor(currentColor, colorPalette, hovered, clicked); - } } diff --git a/src/main/java/io/polyfrost/oneconfig/gui/elements/TextInputField.java b/src/main/java/io/polyfrost/oneconfig/gui/elements/TextInputField.java new file mode 100644 index 0000000..7b56a40 --- /dev/null +++ b/src/main/java/io/polyfrost/oneconfig/gui/elements/TextInputField.java @@ -0,0 +1,88 @@ +package io.polyfrost.oneconfig.gui.elements; + +import io.polyfrost.oneconfig.config.OneConfigConfig; +import io.polyfrost.oneconfig.lwjgl.RenderManager; +import io.polyfrost.oneconfig.lwjgl.font.Fonts; +import net.minecraft.client.gui.GuiScreen; +import org.lwjgl.input.Keyboard; + +public class TextInputField extends BasicElement { + + protected final String defaultText; + protected String input; + protected final boolean mulitLine; + protected boolean password; + + public TextInputField(int width, int height, String defaultText, boolean multiLine, boolean password) { + super(width, height, false); + this.mulitLine = multiLine; + this.defaultText = defaultText; + this.password = password; + this.input = defaultText; + } + + public void setInput(String input) { + this.input = input; + } + + public String getInput() { + return input; + } + + public void setPassword(boolean password) { + this.password = password; + } + + @Override + public void draw(long vg, int x, int y) { + RenderManager.drawRectangle(vg, x, y, width, height, OneConfigConfig.GRAY_700); + RenderManager.drawRectangle(vg, x + 2, y + 2, width - 2, height - 4, OneConfigConfig.GRAY_900); + super.update(x, y); + int color = toggled ? OneConfigConfig.WHITE : OneConfigConfig.WHITE_60; + float width = RenderManager.getTextWidth(vg, input, 14f); + + if(toggled) { + RenderManager.drawLine(vg, x + width + 12, (float) y + 7, x + width + 13, (float) y + height - 7, 1, OneConfigConfig.WHITE); + } + + if(input.equals("")){ + RenderManager.drawString(vg, defaultText, x + 12, y + 17, color, 14f, Fonts.INTER_REGULAR); + } + RenderManager.drawString(vg, input, x + 12, y + 17, color, 14f, Fonts.INTER_REGULAR); + + } + + public void keyTyped(char c, int key) { + if (toggled) { + if(GuiScreen.isCtrlKeyDown()) { + if(key == Keyboard.KEY_BACK) { + try { + input = input.substring(0, input.lastIndexOf(" ")); + } catch (Exception e) { + input = ""; + } + } + return; + } + if (key == Keyboard.KEY_BACK) { + if (input.length() > 0) { + input = input.substring(0, input.length() - 1); + return; + } + } + if(key == Keyboard.KEY_TAB) { + input += " "; + return; + } + + if(key == Keyboard.KEY_RETURN) { + toggled = false; + } + + if(key == Keyboard.KEY_LCONTROL || key == Keyboard.KEY_RCONTROL || key == Keyboard.KEY_LMENU || key == Keyboard.KEY_RMENU || key == Keyboard.KEY_LMETA || key == Keyboard.KEY_RMETA || key == Keyboard.KEY_LSHIFT || key == Keyboard.KEY_RSHIFT || key == Keyboard.KEY_RETURN || key == Keyboard.KEY_CAPITAL || key == 221) { + return; + } + input += c; + } + } +} diff --git a/src/main/java/io/polyfrost/oneconfig/lwjgl/RenderManager.java b/src/main/java/io/polyfrost/oneconfig/lwjgl/RenderManager.java index d728670..2ed8404 100644 --- a/src/main/java/io/polyfrost/oneconfig/lwjgl/RenderManager.java +++ b/src/main/java/io/polyfrost/oneconfig/lwjgl/RenderManager.java @@ -3,6 +3,7 @@ package io.polyfrost.oneconfig.lwjgl; import io.polyfrost.oneconfig.config.OneConfigConfig; import io.polyfrost.oneconfig.lwjgl.font.Font; import io.polyfrost.oneconfig.lwjgl.font.FontManager; +import io.polyfrost.oneconfig.lwjgl.font.Fonts; import io.polyfrost.oneconfig.lwjgl.image.Image; import io.polyfrost.oneconfig.lwjgl.image.ImageLoader; import net.minecraft.client.Minecraft; @@ -131,14 +132,11 @@ public final class RenderManager { nvgColor.free(); } - public static void drawString(long vg, String text, float x, float y, int color, float size, Font font) { - drawString(vg, text, x, y, color, size, font.getName()); - } - public static void drawString(long vg, String text, float x, float y, int color, float size, String fontName) { + public static void drawString(long vg, String text, float x, float y, int color, float size, Fonts font) { nvgBeginPath(vg); nvgFontSize(vg, size); - nvgFontFace(vg, fontName); + nvgFontFace(vg, font.font.getName()); nvgTextAlign(vg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE); NVGColor nvgColor = color(vg, color); nvgText(vg, x, y, text); @@ -216,6 +214,11 @@ public final class RenderManager { } } + public static float getTextWidth(long vg, String text, float fontSize) { + float[] bounds = new float[4]; + return (nvgTextBounds(vg, 0, 0, text, bounds) / 12) * fontSize; + } + public static void drawLine(long vg, float x, float y, float endX, float endY, float width, int color) { nvgBeginPath(vg); nvgMoveTo(vg, x, y); diff --git a/src/main/java/io/polyfrost/oneconfig/lwjgl/font/FontManager.java b/src/main/java/io/polyfrost/oneconfig/lwjgl/font/FontManager.java index 08d108b..0ec2b87 100644 --- a/src/main/java/io/polyfrost/oneconfig/lwjgl/font/FontManager.java +++ b/src/main/java/io/polyfrost/oneconfig/lwjgl/font/FontManager.java @@ -4,20 +4,15 @@ import io.polyfrost.oneconfig.lwjgl.IOUtil; import java.io.IOException; import java.nio.ByteBuffer; -import java.util.ArrayList; import static org.lwjgl.nanovg.NanoVG.nvgCreateFontMem; public class FontManager { public static FontManager INSTANCE = new FontManager(); - private final ArrayList<Font> fonts = new ArrayList<>(); public void initialize(long vg) { - fonts.add(new Font("inter-bold", "/assets/oneconfig/font/Inter-Bold.ttf")); - fonts.add(new Font("inter-regular", "/assets/oneconfig/font/Inter-Regular.otf")); - fonts.add(new Font("inter-semibold", "/assets/oneconfig/font/Inter-SemiBold.otf")); - fonts.add(new Font("mc-regular", "/assets/oneconfig/font/Minecraft-Regular.otf")); - for (Font font : fonts) { + for (Fonts fonts : Fonts.values()) { + Font font = fonts.font; int loaded = -1; try { ByteBuffer buffer = IOUtil.resourceToByteBuffer(font.getFileName()); diff --git a/src/main/java/io/polyfrost/oneconfig/lwjgl/font/Fonts.java b/src/main/java/io/polyfrost/oneconfig/lwjgl/font/Fonts.java new file mode 100644 index 0000000..5d36271 --- /dev/null +++ b/src/main/java/io/polyfrost/oneconfig/lwjgl/font/Fonts.java @@ -0,0 +1,18 @@ +package io.polyfrost.oneconfig.lwjgl.font; + +public enum Fonts { + + INTER_BOLD(new Font("inter-bold", "/assets/oneconfig/font/Inter-Bold.ttf")), + INTER_REGULAR(new Font("inter-regular", "/assets/oneconfig/font/Inter-Regular.otf")), + INTER_SEMIBOLD(new Font("inter-semibold", "/assets/oneconfig/font/Inter-SemiBold.otf")), + INTER_MEDIUM(new Font("inter-medium", "/assets/oneconfig/font/Inter-Medium.otf")), + MC_REGULAR(new Font("mc-regular", "/assets/oneconfig/font/Minecraft-Regular.otf")); + + public final Font font; + + Fonts(Font font) { + this.font = font; + } + + +} diff --git a/src/main/java/io/polyfrost/oneconfig/test/TestNanoVGGui.java b/src/main/java/io/polyfrost/oneconfig/test/TestNanoVGGui.java index 862ff35..313da70 100644 --- a/src/main/java/io/polyfrost/oneconfig/test/TestNanoVGGui.java +++ b/src/main/java/io/polyfrost/oneconfig/test/TestNanoVGGui.java @@ -1,6 +1,7 @@ package io.polyfrost.oneconfig.test; import io.polyfrost.oneconfig.lwjgl.RenderManager; +import io.polyfrost.oneconfig.lwjgl.font.Fonts; import net.minecraft.client.gui.GuiScreen; import java.awt.*; @@ -15,13 +16,13 @@ public class TestNanoVGGui extends GuiScreen { RenderManager.setupAndDraw((vg) -> { RenderManager.drawRect(vg, 0, 0, 100, 100, Color.BLUE.getRGB()); RenderManager.drawRoundedRect(vg, 305, 305, 100, 100, Color.YELLOW.getRGB(), 8); - RenderManager.drawString(vg, "Hello!", 80, 20, Color.WHITE.getRGB(), 50, "mc-regular"); - RenderManager.drawString(vg, "Hello!", 100, 100, Color.WHITE.getRGB(), 50, "inter-bold"); + RenderManager.drawString(vg, "Hello!", 80, 20, Color.WHITE.getRGB(), 50, Fonts.MC_REGULAR); + RenderManager.drawString(vg, "Hello!", 100, 100, Color.WHITE.getRGB(), 50, Fonts.INTER_BOLD); RenderManager.drawImage(vg, "/assets/oneconfig/textures/hudsettings.png", 10, 10, 400, 400); RenderManager.drawSVGImage(vg, "textures/pc.svg", 1000, 1000, 500, 500); RenderManager.drawLine(vg, 0, 0, 100, 100, 7, Color.PINK.getRGB()); RenderManager.drawCircle(vg, 200, 200, 50, Color.WHITE.getRGB()); - RenderManager.drawString(vg, (float) (System.nanoTime() - startTime) / 1000000f + "ms", 500, 500, Color.WHITE.getRGB(), 100, "inter-bold"); + RenderManager.drawString(vg, (float) (System.nanoTime() - startTime) / 1000000f + "ms", 500, 500, Color.WHITE.getRGB(), 100, Fonts.INTER_BOLD); }); drawString(fontRendererObj, "Hello!", 0, 0, -1); } // hi diff --git a/src/main/java/io/polyfrost/oneconfig/utils/ColorUtils.java b/src/main/java/io/polyfrost/oneconfig/utils/ColorUtils.java index f45f9a5..b8d56bd 100644 --- a/src/main/java/io/polyfrost/oneconfig/utils/ColorUtils.java +++ b/src/main/java/io/polyfrost/oneconfig/utils/ColorUtils.java @@ -15,37 +15,40 @@ public class ColorUtils { default: case 0: return OneConfigConfig.GRAY_400_80; + case 1: + return OneConfigConfig.BLUE_600_80; } } switch (colorPalette) { case -1: - return getColorComponents(color, splitColor(OneConfigConfig.TRANSPARENT), splitColor(OneConfigConfig.GRAY_500), hover); + return getColorComponents(color, splitColor(OneConfigConfig.TRANSPARENT), splitColor(OneConfigConfig.GRAY_500), hover, 10f); default: case 0: - return getColorComponents(color, splitColor(OneConfigConfig.GRAY_500), splitColor(OneConfigConfig.GRAY_400), hover); // OK hopefully this works + return getColorComponents(color, splitColor(OneConfigConfig.GRAY_500), splitColor(OneConfigConfig.GRAY_400), hover, 130f); + case 1: + return getColorComponents(color, splitColor(OneConfigConfig.BLUE_600), splitColor(OneConfigConfig.BLUE_500), hover, 150f); } } private static float[] splitColor(int color) { - Color c = new Color(color, true); - return new float[] {c.getRed() / 255f, c.getGreen() / 255f, c.getBlue() / 255f, c.getAlpha() / 255f}; + return new float[] { (color >> 16 & 255) / 255f, (color >> 8 & 255) / 255f, (color & 255) / 255f, (color >> 24 & 255) /255f }; } - private static int getColorComponents(float[] currentColor, float[] initColor, float[] finalColor, boolean hover) { - currentColor[0] = smooth(currentColor[0], initColor[0], finalColor[0], hover); - currentColor[1] = smooth(currentColor[1], initColor[1], finalColor[1], hover); - currentColor[2] = smooth(currentColor[2], initColor[2], finalColor[2], hover); - currentColor[3] = smooth(currentColor[3], initColor[3], finalColor[3], hover); + private static int getColorComponents(float[] currentColor, float[] initColor, float[] finalColor, boolean hover, float speed) { + currentColor[0] = smooth(currentColor[0], initColor[0], finalColor[0], hover, speed); + currentColor[1] = smooth(currentColor[1], initColor[1], finalColor[1], hover, speed); + currentColor[2] = smooth(currentColor[2], initColor[2], finalColor[2], hover, speed); + currentColor[3] = smooth(currentColor[3], initColor[3], finalColor[3], hover, speed); return new Color(currentColor[0], currentColor[1], currentColor[2], currentColor[3]).getRGB(); } - private static float smooth(float current, float min, float max, boolean moveToFinal) { - current = MathUtils.easeOut(current, moveToFinal ? 1f : 0f); + private static float smooth(float current, float min, float max, boolean moveToFinal, float speed) { + current = MathUtils.easeOut(current, moveToFinal ? 1f : 0f, speed); if(current <= min) { current = min; } diff --git a/src/main/java/io/polyfrost/oneconfig/utils/MathUtils.java b/src/main/java/io/polyfrost/oneconfig/utils/MathUtils.java index 7d64170..547e286 100644 --- a/src/main/java/io/polyfrost/oneconfig/utils/MathUtils.java +++ b/src/main/java/io/polyfrost/oneconfig/utils/MathUtils.java @@ -7,7 +7,14 @@ public class MathUtils { public static float easeOut(float current, float goal) { if (Math.floor(Math.abs(goal - current) / (float) 0.01) > 0) { - return current + (goal - current) / (float) 100.0; // this number here controls the speed uh oh + return current + (goal - current) / (float) 100.0; + } else { + return goal; + } + } + public static float easeOut(float current, float goal, float speed) { + if (Math.floor(Math.abs(goal - current) / (float) 0.01) > 0) { + return current + (goal - current) / speed; } else { return goal; } |