From 7d649efa22d1ead62088166c42d7bd96f80fa3e5 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Tue, 6 May 2025 20:48:23 +0200 Subject: [PATCH] Themified mods and state merging --- .../saturnclient/config/ThemeManager.java | 29 +++++--- .../ui2/components/SaturnModule.java | 69 +++++++++++++++---- 2 files changed, 75 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/saturnclient/saturnclient/config/ThemeManager.java b/src/main/java/org/saturnclient/saturnclient/config/ThemeManager.java index 08c9857..327c418 100644 --- a/src/main/java/org/saturnclient/saturnclient/config/ThemeManager.java +++ b/src/main/java/org/saturnclient/saturnclient/config/ThemeManager.java @@ -44,17 +44,30 @@ public class ThemeManager { } public void setState(String state) { - this.state = state; + this.state = state; + if (this.state != null) { + for (Map.Entry> tProp : properties.get(namespace+"@"+state).entrySet()) { + currentStyling.get(tProp.getKey()).setValue(tProp.getValue().value); + } + } else { + for (Map.Entry> tProp : properties.get(namespace).entrySet()) { + currentStyling.get(tProp.getKey()).setValue(tProp.getValue().value); + } + } + } - if (this.state != null) { - for (Map.Entry> tProp : properties.get(namespace+"@"+state).entrySet()) { - currentStyling.get(tProp.getKey()).setValue(tProp.getValue().value); - } - } else { - for (Map.Entry> tProp : properties.get(namespace).entrySet()) { - currentStyling.get(tProp.getKey()).setValue(tProp.getValue().value); + public void applyState(String state) { + if (this.state != null) { + for (Map.Entry> tProp : properties.get(namespace+"@"+state).entrySet()) { + Property p = currentStyling.get(tProp.getKey()); + Property currProp = properties.get(namespace).get(tProp.getKey()); + if (p.value.equals(currProp.value)) { + p.setValue(tProp.getValue().value); } } + } else { + setState(state); + } } // Generic method to store any type of property diff --git a/src/main/java/org/saturnclient/ui2/components/SaturnModule.java b/src/main/java/org/saturnclient/ui2/components/SaturnModule.java index 872bb25..4b68d35 100644 --- a/src/main/java/org/saturnclient/ui2/components/SaturnModule.java +++ b/src/main/java/org/saturnclient/ui2/components/SaturnModule.java @@ -1,54 +1,93 @@ package org.saturnclient.ui2.components; 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.ConfigEditor; import org.saturnclient.ui.Textures; import org.saturnclient.ui2.Element; import org.saturnclient.ui2.RenderContext; 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", "hovering", "enabled", "settings-hovering"); + private static Property bgColor = theme.property("bg-color", new Property(-16777216)); + private static Property nameColor = theme.property("name-color", new Property(-1)); + private static Property descriptionColor = theme.property("description-color", new Property(-5592406)); + private static Property barColor = theme.property("bar-color", new Property(-1)); + private static Property settingsFg = theme.property("settings-fg", new Property(-1)); + private static Property settingsBg = theme.property("settings-bg", new Property(-16777216)); + + private static Property cornerRadius = theme.property("corner-radius", new Property(10)); + private static Property barWidth = theme.property("bar-width", new Property(7)); + private static Property padding = theme.property("padding", new Property(10)); + + static { + theme.propertyStateDefault("enabled", "bar-color", -7643914); + theme.propertyStateDefault("hovering", "name-color", -7643914); + theme.propertyStateDefault("settings-hovering", "name-color", -7643914); + theme.propertyStateDefault("settings-hovering", "settings-bg", -7643914); + } + private Module mod; public SaturnModule(Module mod) { this.mod = mod; - this.width = 270; - this.height = 120; } @Override public void render(RenderScope renderScope, RenderContext ctx) { - renderScope.drawRoundedRectangle(0, 0, width, height, 10, -16777216); - if (mod.isEnabled()) { - renderScope.enableScissor(0, 0, 7, height); - renderScope.drawRoundedRectangle(0, 0, 7 * 2, height, 10, -7643914); - renderScope.disableScissor(); + theme.setState("enabled"); + } else { + theme.setState(null); } - renderScope.drawText(mod.getName(), 10 + 7, 10, true, -1); + if (ctx.isHovering(barWidth.value + padding.value, height - padding.value - 16, width - barWidth.value - (padding.value * 2), 16)) { + theme.applyState("settings-hovering"); + } else if (ctx.isHovering()) { + theme.applyState("hovering"); + } + + renderScope.drawRoundedRectangle(0, 0, width, height, cornerRadius.value, bgColor.value); + + renderScope.enableScissor(0, 0, barWidth.value, height); + renderScope.drawRoundedRectangle(0, 0, barWidth.value * 2, height, cornerRadius.value, barColor.value); + renderScope.disableScissor(); + + renderScope.drawText(mod.getName(), padding.value + barWidth.value, padding.value, true, nameColor.value); renderScope.matrices.push(); - renderScope.matrices.translate(10 + 7, 30, 0); + renderScope.matrices.translate(padding.value + barWidth.value, 30, 0); renderScope.matrices.scale(0.7f, 0.7f, 1.0f); - renderScope.drawText(formatText(mod.getDescription(), width - 7 - 10), 0, 0, false, 0xFFAAAAAA); + renderScope.drawText(formatText(mod.getDescription(), width - barWidth.value - padding.value), 0, 0, false, descriptionColor.value); renderScope.matrices.pop(); - if (ctx.isHovering(10 + 7, height - 10 - 10, 10, 10)) { - - } renderScope.setRenderLayer(RenderLayer::getGuiTextured); - renderScope.drawTexture(Textures.SETTINGS, 10 + 7, height - 10 - 10, 0, 0, 10, 10); + renderScope.drawRoundedRectangle(barWidth.value + padding.value, height - padding.value - 13, width - (padding.value * 2) - barWidth.value, 16, 10, settingsBg.value); + renderScope.drawTexture(Textures.SETTINGS, barWidth.value + (padding.value * 2), height - padding.value - 10, 0, 0, 10, 10, settingsFg.value); + renderScope.matrices.push(); + renderScope.matrices.translate(barWidth.value + (padding.value * 2) + 14, height - padding.value - 10, 0); + renderScope.matrices.scale(0.7f, 0.7f, 1.0f); + renderScope.drawText("Settings", 0, 0, false, settingsFg.value); + renderScope.matrices.pop(); } @Override public void click(int mouseX, int mouseY) { - mod.setEnabled(!mod.isEnabled()); + if (Utils.isHovering(mouseX - (barWidth.value + padding.value), mouseY - (height - padding.value - 16), width - barWidth.value - (padding.value * 2), 16, scale)) { + SaturnClient.client.setScreen(new ConfigEditor(mod.getConfig())); + } else { + mod.setEnabled(!mod.isEnabled()); + } } private static String formatText(String text, int width) {