From 930d002b81ad0ac50585fd5d4e7c5a019e596283 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sun, 11 May 2025 02:53:31 -0500 Subject: [PATCH] this time it should be good (aside from colors) --- .../java/org/saturnclient/ui2/Element.java | 2 +- ...RenderContext.java => ElementContext.java} | 4 +- .../org/saturnclient/ui2/RenderScope.java | 8 +- .../ui2/components/ElementRenderer.java | 4 +- .../ui2/components/SaturnModule.java | 115 +++++------------- .../saturnclient/ui2/components/Sidebar.java | 4 +- .../org/saturnclient/ui2/elements/Button.java | 4 +- .../ui2/elements/ClickableTexture.java | 4 +- .../ui2/elements/ImageTexture.java | 4 +- .../org/saturnclient/ui2/elements/Scroll.java | 4 +- .../org/saturnclient/ui2/elements/Text.java | 4 +- .../ui2/elements/TextureButton.java | 4 +- .../org/saturnclient/ui2/screens/ModMenu.java | 15 +-- 13 files changed, 62 insertions(+), 114 deletions(-) rename src/main/java/org/saturnclient/ui2/{RenderContext.java => ElementContext.java} (87%) diff --git a/src/main/java/org/saturnclient/ui2/Element.java b/src/main/java/org/saturnclient/ui2/Element.java index e3ddaee..18653aa 100644 --- a/src/main/java/org/saturnclient/ui2/Element.java +++ b/src/main/java/org/saturnclient/ui2/Element.java @@ -16,7 +16,7 @@ public class Element { public float scale = 1.0f; public Function curve = Curve::easeInOutCubic; - public void render(RenderScope renderScope, RenderContext ctx) { + public void render(RenderScope renderScope, ElementContext ctx) { } public void click(int mouseX, int mouseY) { diff --git a/src/main/java/org/saturnclient/ui2/RenderContext.java b/src/main/java/org/saturnclient/ui2/ElementContext.java similarity index 87% rename from src/main/java/org/saturnclient/ui2/RenderContext.java rename to src/main/java/org/saturnclient/ui2/ElementContext.java index ead3f30..8f3f898 100644 --- a/src/main/java/org/saturnclient/ui2/RenderContext.java +++ b/src/main/java/org/saturnclient/ui2/ElementContext.java @@ -1,11 +1,11 @@ package org.saturnclient.ui2; -public class RenderContext { +public class ElementContext { public int mouseX, mouseY; public int elementWidth, elementHeight; public float elementScale; - public RenderContext(int mouseX, int mouseY, Element e) { + public ElementContext(int mouseX, int mouseY, Element e) { this.mouseX = mouseX - e.x; this.mouseY = mouseY - e.y; this.elementWidth = e.width; diff --git a/src/main/java/org/saturnclient/ui2/RenderScope.java b/src/main/java/org/saturnclient/ui2/RenderScope.java index fecac10..6f6e114 100644 --- a/src/main/java/org/saturnclient/ui2/RenderScope.java +++ b/src/main/java/org/saturnclient/ui2/RenderScope.java @@ -80,13 +80,17 @@ public class RenderScope { } public void drawText(String text, int x, int y, boolean bold, int color) { + drawText(1.0f, text, x, y, bold, color); + } + + public void drawText(float scale, String text, int x, int y, boolean bold, int color) { int i = 0; for (String line : text.split("\n")) { color = getColor(color); Identifier font = bold ? Fonts.INTER_BOLD : Fonts.INTER; matrices.push(); matrices.translate(x, y + (i * Fonts.getHeight()), 0); - matrices.scale(1.0f, 1.0f, 1.0f); + matrices.scale(scale, scale, 1.0f); TextRenderer textRenderer = SaturnClient.client.textRenderer; textRenderer.draw(Fonts.setFont(line, font), 0, 7, color, false, this.matrices.peek().getPositionMatrix(), this.vertexConsumers, TextLayerType.NORMAL, 0, 15728880); @@ -95,7 +99,7 @@ public class RenderScope { } } - public void drawRoundedCorner(int width, int height, int radius, int color) { + private void drawRoundedCorner(int width, int height, int radius, int color) { int w = width * 20; int h = height * 20; diff --git a/src/main/java/org/saturnclient/ui2/components/ElementRenderer.java b/src/main/java/org/saturnclient/ui2/components/ElementRenderer.java index 8f4253a..0ae0bff 100644 --- a/src/main/java/org/saturnclient/ui2/components/ElementRenderer.java +++ b/src/main/java/org/saturnclient/ui2/components/ElementRenderer.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.List; import org.saturnclient.ui2.Element; -import org.saturnclient.ui2.RenderContext; +import org.saturnclient.ui2.ElementContext; import org.saturnclient.ui2.RenderScope; import org.saturnclient.ui2.Utils; import org.saturnclient.ui2.anim.Animation; @@ -30,7 +30,7 @@ public class ElementRenderer { renderScope.setOpacity(element.opacity); renderScope.matrices.translate(element.x, element.y, 0); renderScope.matrices.scale(element.scale, element.scale, 1.0f); - element.render(renderScope, new RenderContext(mouseX, mouseY, element)); + element.render(renderScope, new ElementContext(mouseX, mouseY, element)); renderScope.matrices.pop(); renderScope.setRenderLayer(null); } diff --git a/src/main/java/org/saturnclient/ui2/components/SaturnModule.java b/src/main/java/org/saturnclient/ui2/components/SaturnModule.java index 1e0f02a..0042ab0 100644 --- a/src/main/java/org/saturnclient/ui2/components/SaturnModule.java +++ b/src/main/java/org/saturnclient/ui2/components/SaturnModule.java @@ -7,133 +7,80 @@ import org.saturnclient.saturnclient.config.ThemeManager; import org.saturnclient.saturnclient.menus.ConfigEditor; import org.saturnclient.ui.Textures; import org.saturnclient.ui2.Element; -import org.saturnclient.ui2.RenderContext; +import org.saturnclient.ui2.ElementContext; import org.saturnclient.ui2.RenderScope; import org.saturnclient.ui2.Utils; -import org.saturnclient.ui2.resources.Fonts; import net.minecraft.client.render.RenderLayer; public class SaturnModule extends Element { - private static ThemeManager theme = new ThemeManager("SaturnModule", "enabled", "hovering"); - private static Property bgColor = theme.property("bg-color", new Property(-16777216)); - private static Property fgColor = theme.property("fg-color", new Property(-1)); - private static Property iconBgColor = theme.property("icon-bg-color", new Property(-16777216)); - private static Property iconColor = theme.property("icon-fg-color", new Property(-1)); - - private static Property cornerRadius = theme.property("corner-radius", new Property(10)); - private static Property padding = theme.property("padding", new Property(10)); - private static Property iconMargin = theme.property("icon-margin", new Property(10)); - private static Property iconPadding = theme.property("icon-padding", new Property(4)); - private static Property tagGap = theme.property("tag-gap", new Property(4)); - - private static ThemeManager settingsTheme = new ThemeManager("SaturnModule$Settings", "hovering"); - private static Property settingsBg = settingsTheme.property("bg-color", new Property(-16777216)); - private static Property settingsFg = settingsTheme.property("fg-color", new Property(-1)); - private static Property settingsRadius = settingsTheme.property("corner-radius", new Property(10)); + private static ThemeManager theme = new ThemeManager("Module", "enabled", "hovering"); + private static Property bgColor = theme.property("bg", new Property<>(0xFF581c1c)); + private static Property fgColor = theme.property("fg", new Property<>(0xFFA1A2B8)); + private static Property iconBg = theme.property("icon-bg", new Property<>(0xFF802222)); + private static Property iconRadius = theme.property("icon-radius", new Property<>(10)); + private static Property radius = theme.property("radius", new Property<>(10)); static { - theme.propertyStateDefault("enabled", "icon-bg-color", -7643914); - theme.propertyStateDefault("hovering", "fg-color", -7643914); - settingsTheme.propertyStateDefault("hovering", "bg-color", -7643914); + theme.propertyStateDefault("enabled", "bg", 0xFF14532d); + theme.propertyStateDefault("enabled", "icon-bg", 0xFF1e6f3f); + theme.propertyStateDefault("hovering", "fg", 0xFFbfc0cf); } private Module mod; public SaturnModule(Module mod) { this.mod = mod; - this.width = 180; - this.height = 113; + this.width = 160; + this.height = 50; } @Override - public void render(RenderScope renderScope, RenderContext ctx) { + public void render(RenderScope renderScope, ElementContext ctx) { + int p = 10; + int s = 14; + boolean settingsHover = false; + renderScope.setRenderLayer(RenderLayer::getGuiTextured); if (mod.isEnabled()) { theme.setState("enabled"); } - if (ctx.isHovering(0, (height-40), width, 30)) { - settingsTheme.setState("hovering"); + if (ctx.isHovering(width - s - p, height - s - p, s, s)) { + settingsHover = true; } else if (ctx.isHovering()) { theme.applyState("hovering"); } - renderScope.drawRoundedRectangle(0, 0, width, height, cornerRadius.value, bgColor.value); + renderScope.drawRoundedRectangle(0, 0, width, height, radius.value, bgColor.value); - renderScope.matrices.push(); + int h = height-(p * 2); - renderScope.matrices.translate(padding.value, padding.value, 0); + renderScope.drawRoundedRectangle(p, p, h, h, iconRadius.value, iconBg.value); - // Top part - renderScope.drawRoundedRectangle(0, 0, 20, 20, 10, iconBgColor.value); - renderScope.drawTexture(mod.getIconTexture(), iconPadding.value, iconPadding.value, 0, 0, 20 - (iconPadding.value * 2), 20 - (iconPadding.value * 2), iconColor.value); - renderScope.drawText(mod.getName(), 20 + iconMargin.value, (22 - Fonts.getHeight()) / 2, false, fgColor.value); + renderScope.drawTexture(mod.getIconTexture(), p + (p / 2), p + (p / 2), 0, 0, h - p, h - p, fgColor.value); - renderScope.matrices.push(); - renderScope.matrices.translate(20 + iconMargin.value, ((22 - Fonts.getHeight()) / 2) + Fonts.getHeight(), 0); + renderScope.drawText(0.6f, mod.getName(), p+h+4, p + 1, true, fgColor.value); - renderScope.matrices.scale(0.5f, 0.5f, 1); - renderScope.drawText(formatText(mod.getDescription(), (int) ((width - iconMargin.value) * 1.5f)), 0, 0, false, -20); - renderScope.matrices.pop(); - renderScope.matrices.pop(); - - // Mid part - int i = padding.value; - for (String tag : mod.getTags()) { - renderScope.matrices.push(); - renderScope.matrices.translate(i, height - 40 - Fonts.getHeight(), 0); - renderScope.matrices.scale(0.5f, 0.5f, 1); - renderScope.drawText(tag, 0, 0, false, -20); - renderScope.matrices.pop(); - i += (Fonts.getWidth(tag, false) * 0.5f) + tagGap.value; + if (settingsHover) { + theme.setState("hovering"); } - // Settings button - renderScope.matrices.push(); - renderScope.matrices.translate(padding.value, height - 30 - padding.value, 0); - - int w = width - (padding.value * 2); - - renderScope.drawRoundedRectangle(0, 0, w, 30, settingsRadius.value, settingsBg.value); - renderScope.drawTexture(Textures.SETTINGS, ((w - Fonts.getWidth("Settings", false)) / 2) - 20, (16) / 2, 0, 0, 15, 15, settingsFg.value); - renderScope.drawText("Settings", Fonts.centerX(w, "Settings", false), Fonts.centerY(32), false, settingsFg.value); - renderScope.matrices.pop(); + renderScope.drawTexture(Textures.SETTINGS, width - s - p, height - s - p, 0, 0, s, s, fgColor.value); theme.setState(null); - settingsTheme.setState(null); } @Override public void click(int mouseX, int mouseY) { - if (Utils.isHovering(mouseX, mouseY - (height-40), width, 30, scale)) { + int p = 10; + int s = 14; + + if (Utils.isHovering(mouseX - (width - s - p), mouseY - (height - s - p), s, s, 1.0f)) { SaturnClient.client.setScreen(new ConfigEditor(mod.getConfig())); } else { mod.setEnabled(!mod.isEnabled()); } } - - public static String formatText(String text, int width) { - StringBuilder formatted = new StringBuilder(); - StringBuilder currentLine = new StringBuilder(); - - for (char c : text.toCharArray()) { - currentLine.append(c); - if (Fonts.getWidth(currentLine.toString(), false) > width) { - // Line is too wide; backtrack the last character - currentLine.deleteCharAt(currentLine.length() - 1); - formatted.append(currentLine).append('\n'); - currentLine.setLength(0); // clear currentLine - currentLine.append(c); // start new line with the character that overflowed - } - } - - // Append any remaining characters in the currentLine - if (currentLine.length() > 0) { - formatted.append(currentLine); - } - - return formatted.toString(); - } } diff --git a/src/main/java/org/saturnclient/ui2/components/Sidebar.java b/src/main/java/org/saturnclient/ui2/components/Sidebar.java index a5ddb83..5ff755f 100644 --- a/src/main/java/org/saturnclient/ui2/components/Sidebar.java +++ b/src/main/java/org/saturnclient/ui2/components/Sidebar.java @@ -3,7 +3,7 @@ package org.saturnclient.ui2.components; import org.saturnclient.saturnclient.config.Property; import org.saturnclient.saturnclient.config.ThemeManager; import org.saturnclient.ui2.Element; -import org.saturnclient.ui2.RenderContext; +import org.saturnclient.ui2.ElementContext; import org.saturnclient.ui2.RenderScope; import org.saturnclient.ui2.Utils; @@ -47,7 +47,7 @@ public class Sidebar extends Element { } @Override - public void render(RenderScope renderScope, RenderContext ctx) { + public void render(RenderScope renderScope, ElementContext ctx) { int topRow = 0; int bottomRow = 0; diff --git a/src/main/java/org/saturnclient/ui2/elements/Button.java b/src/main/java/org/saturnclient/ui2/elements/Button.java index bf4dcdc..4fe416a 100644 --- a/src/main/java/org/saturnclient/ui2/elements/Button.java +++ b/src/main/java/org/saturnclient/ui2/elements/Button.java @@ -3,7 +3,7 @@ package org.saturnclient.ui2.elements; import org.saturnclient.saturnclient.config.Property; import org.saturnclient.saturnclient.config.ThemeManager; import org.saturnclient.ui2.Element; -import org.saturnclient.ui2.RenderContext; +import org.saturnclient.ui2.ElementContext; import org.saturnclient.ui2.RenderScope; import org.saturnclient.ui2.resources.Fonts; @@ -28,7 +28,7 @@ public class Button extends Element { } @Override - public void render(RenderScope renderScope, RenderContext ctx) { + public void render(RenderScope renderScope, ElementContext ctx) { if (ctx.isHovering()) { theme.setState("hovering"); } else { diff --git a/src/main/java/org/saturnclient/ui2/elements/ClickableTexture.java b/src/main/java/org/saturnclient/ui2/elements/ClickableTexture.java index 019792b..33f377f 100644 --- a/src/main/java/org/saturnclient/ui2/elements/ClickableTexture.java +++ b/src/main/java/org/saturnclient/ui2/elements/ClickableTexture.java @@ -3,7 +3,7 @@ package org.saturnclient.ui2.elements; import org.saturnclient.saturnclient.config.Property; import org.saturnclient.saturnclient.config.ThemeManager; import org.saturnclient.ui2.Element; -import org.saturnclient.ui2.RenderContext; +import org.saturnclient.ui2.ElementContext; import org.saturnclient.ui2.RenderScope; import net.minecraft.client.render.RenderLayer; @@ -22,7 +22,7 @@ public class ClickableTexture extends Element { } @Override - public void render(RenderScope renderScope, RenderContext ctx) { + public void render(RenderScope renderScope, ElementContext ctx) { if (ctx.isHovering()) { theme.setState("hovering"); } else { diff --git a/src/main/java/org/saturnclient/ui2/elements/ImageTexture.java b/src/main/java/org/saturnclient/ui2/elements/ImageTexture.java index a9b815f..b5d9426 100644 --- a/src/main/java/org/saturnclient/ui2/elements/ImageTexture.java +++ b/src/main/java/org/saturnclient/ui2/elements/ImageTexture.java @@ -1,7 +1,7 @@ package org.saturnclient.ui2.elements; import org.saturnclient.ui2.Element; -import org.saturnclient.ui2.RenderContext; +import org.saturnclient.ui2.ElementContext; import org.saturnclient.ui2.RenderScope; import net.minecraft.client.render.RenderLayer; @@ -15,7 +15,7 @@ public class ImageTexture extends Element { } @Override - public void render(RenderScope renderScope, RenderContext ctx) { + public void render(RenderScope renderScope, ElementContext ctx) { renderScope.setRenderLayer(RenderLayer::getGuiTextured); renderScope.drawTexture(sprite, 0, 0, 0, 0, width, height); } diff --git a/src/main/java/org/saturnclient/ui2/elements/Scroll.java b/src/main/java/org/saturnclient/ui2/elements/Scroll.java index a9858ee..f24d782 100644 --- a/src/main/java/org/saturnclient/ui2/elements/Scroll.java +++ b/src/main/java/org/saturnclient/ui2/elements/Scroll.java @@ -6,7 +6,7 @@ import java.util.List; import org.saturnclient.saturnclient.config.Property; import org.saturnclient.saturnclient.config.ThemeManager; import org.saturnclient.ui2.Element; -import org.saturnclient.ui2.RenderContext; +import org.saturnclient.ui2.ElementContext; import org.saturnclient.ui2.RenderScope; import org.saturnclient.ui2.components.ElementRenderer; @@ -31,7 +31,7 @@ public class Scroll extends Element { } @Override - public void render(RenderScope renderScope, RenderContext ctx) { + public void render(RenderScope renderScope, ElementContext ctx) { renderScope.drawRoundedRectangle(0, 0, width, height, cornerRadius.value, bgColor.value); renderScope.enableScissor(padding, padding, width - padding, height - padding); diff --git a/src/main/java/org/saturnclient/ui2/elements/Text.java b/src/main/java/org/saturnclient/ui2/elements/Text.java index b3c3a32..ab1bfb8 100644 --- a/src/main/java/org/saturnclient/ui2/elements/Text.java +++ b/src/main/java/org/saturnclient/ui2/elements/Text.java @@ -3,7 +3,7 @@ package org.saturnclient.ui2.elements; import org.saturnclient.saturnclient.config.Property; import org.saturnclient.saturnclient.config.ThemeManager; import org.saturnclient.ui2.Element; -import org.saturnclient.ui2.RenderContext; +import org.saturnclient.ui2.ElementContext; import org.saturnclient.ui2.RenderScope; public class Text extends Element { @@ -17,7 +17,7 @@ public class Text extends Element { } @Override - public void render(RenderScope renderScope, RenderContext ctx) { + public void render(RenderScope renderScope, ElementContext ctx) { renderScope.drawText(this.text, this.x, this.y, false, fgColor.value); } } diff --git a/src/main/java/org/saturnclient/ui2/elements/TextureButton.java b/src/main/java/org/saturnclient/ui2/elements/TextureButton.java index d03749d..4cc039d 100644 --- a/src/main/java/org/saturnclient/ui2/elements/TextureButton.java +++ b/src/main/java/org/saturnclient/ui2/elements/TextureButton.java @@ -3,7 +3,7 @@ package org.saturnclient.ui2.elements; import org.saturnclient.saturnclient.config.Property; import org.saturnclient.saturnclient.config.ThemeManager; import org.saturnclient.ui2.Element; -import org.saturnclient.ui2.RenderContext; +import org.saturnclient.ui2.ElementContext; import org.saturnclient.ui2.RenderScope; import net.minecraft.client.render.RenderLayer; @@ -30,7 +30,7 @@ public class TextureButton extends Element { } @Override - public void render(RenderScope renderScope, RenderContext ctx) { + public void render(RenderScope renderScope, ElementContext ctx) { if (ctx.isHovering()) { theme.setState("hovering"); } else { diff --git a/src/main/java/org/saturnclient/ui2/screens/ModMenu.java b/src/main/java/org/saturnclient/ui2/screens/ModMenu.java index 50bee87..b28a07f 100644 --- a/src/main/java/org/saturnclient/ui2/screens/ModMenu.java +++ b/src/main/java/org/saturnclient/ui2/screens/ModMenu.java @@ -3,8 +3,6 @@ package org.saturnclient.ui2.screens; import org.saturnclient.modules.ModManager; import org.saturnclient.modules.Module; import org.saturnclient.saturnclient.SaturnClient; -import org.saturnclient.saturnclient.config.Property; -import org.saturnclient.saturnclient.config.ThemeManager; import org.saturnclient.saturnclient.menus.CloaksMenu; import org.saturnclient.saturnclient.menus.SaturnConfigEditor; import org.saturnclient.ui.Textures; @@ -14,23 +12,22 @@ import org.saturnclient.ui2.components.Sidebar; import org.saturnclient.ui2.elements.Scroll; public class ModMenu extends SaturnScreen { - private static ThemeManager theme = new ThemeManager("ModMenu"); - private static Property padding = theme.property("padding", new Property(25)); - private static Property gap = theme.property("gap", new Property(10)); - public ModMenu() { super("Mod Menu"); } @Override public void ui() { - Scroll scroll = new Scroll(padding.value); + int p = 10; + int g = 10; + + Scroll scroll = new Scroll(p); int row = 0; int col = 0; for (Module mod : ModManager.MODS) { - scroll.draw(new SaturnModule(mod).position((180 + gap.value) * col, (140 + gap.value) * row)); + scroll.draw(new SaturnModule(mod).position((160 + g) * col, (50 + g) * row)); if (col == 2) { col = 0; @@ -40,7 +37,7 @@ public class ModMenu extends SaturnScreen { } } - int scrollWidth = 540 + (gap.value * 2) + (padding.value * 2); + int scrollWidth = 480 + 10 + (g * 2) + (p * 2); draw(scroll.dimensions(scrollWidth, 350).center(width, height));