Themified mods and state merging

This commit is contained in:
2025-05-06 20:48:23 +02:00
parent 1ffadc9b45
commit 7d649efa22
2 changed files with 75 additions and 23 deletions
@@ -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<String, Property<?>> tProp : properties.get(namespace+"@"+state).entrySet()) {
currentStyling.get(tProp.getKey()).setValue(tProp.getValue().value);
}
} else {
for (Map.Entry<String, Property<?>> tProp : properties.get(namespace).entrySet()) {
currentStyling.get(tProp.getKey()).setValue(tProp.getValue().value);
}
}
}
if (this.state != null) {
for (Map.Entry<String, Property<?>> tProp : properties.get(namespace+"@"+state).entrySet()) {
currentStyling.get(tProp.getKey()).setValue(tProp.getValue().value);
}
} else {
for (Map.Entry<String, Property<?>> 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<String, Property<?>> 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
@@ -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<Integer> bgColor = theme.property("bg-color", new Property<Integer>(-16777216));
private static Property<Integer> nameColor = theme.property("name-color", new Property<Integer>(-1));
private static Property<Integer> descriptionColor = theme.property("description-color", new Property<Integer>(-5592406));
private static Property<Integer> barColor = theme.property("bar-color", new Property<Integer>(-1));
private static Property<Integer> settingsFg = theme.property("settings-fg", new Property<Integer>(-1));
private static Property<Integer> settingsBg = theme.property("settings-bg", new Property<Integer>(-16777216));
private static Property<Integer> cornerRadius = theme.property("corner-radius", new Property<Integer>(10));
private static Property<Integer> barWidth = theme.property("bar-width", new Property<Integer>(7));
private static Property<Integer> padding = theme.property("padding", new Property<Integer>(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) {