diff options
Diffstat (limited to 'src/main/java/com/arslaancodes/arslaansmagichax/screens/clickgui/setting/Slider.java')
| -rw-r--r-- | src/main/java/com/arslaancodes/arslaansmagichax/screens/clickgui/setting/Slider.java | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/screens/clickgui/setting/Slider.java b/src/main/java/com/arslaancodes/arslaansmagichax/screens/clickgui/setting/Slider.java new file mode 100644 index 0000000..bacefd6 --- /dev/null +++ b/src/main/java/com/arslaancodes/arslaansmagichax/screens/clickgui/setting/Slider.java @@ -0,0 +1,92 @@ +package com.arslaancodes.arslaansmagichax.screens.clickgui.setting; + +import com.arslaancodes.arslaansmagichax.modules.settings.NumberSetting; +import com.arslaancodes.arslaansmagichax.modules.settings.Setting; +import com.arslaancodes.arslaansmagichax.screens.clickgui.ModuleButton; +import java.awt.*; +import java.math.BigDecimal; +import java.math.RoundingMode; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; + +public class Slider extends Component { + + public NumberSetting numberSetting = (NumberSetting) setting; + + private boolean sliding = false; + + public Slider(Setting setting, ModuleButton parent, int offset) { + super(setting, parent, offset); + this.numberSetting = (NumberSetting) setting; + } + + @Override + public void render(GuiGraphics context, int mouseX, int mouseY, float deltaTicks) { + String displayText = numberSetting.getName() + ": " + numberSetting.getValue(); + int defaultPadding = 5; + int boxWidth = parent.parent.width; + + int alpha = isHovered(mouseX, mouseY) ? 230 : 160; + + context.fill( + parent.parent.x, + parent.parent.y + parent.offset + offset, + parent.parent.x + boxWidth, + parent.parent.y + parent.offset + offset + parent.parent.height, + new Color(30, 30, 47, alpha).getRGB() + ); + + double diff = Math.min(boxWidth, Math.max(0, mouseX - parent.parent.x)); + int renderWidth = (int) (boxWidth * (numberSetting.getValue() - numberSetting.getMin()) / (numberSetting.getMax() - numberSetting.getMin())); + + context.fill( + parent.parent.x, + parent.parent.y + parent.offset + offset, + parent.parent.x + renderWidth, + parent.parent.y + parent.offset + offset + parent.parent.height, + new Color(252, 210, 77, 255).getRGB() + ); + + if (sliding) { + if (diff == 0) { + numberSetting.setValue(numberSetting.getMin()); + } else { + numberSetting.setValue(roundToPlace((diff / boxWidth) * (numberSetting.getMax() - numberSetting.getMin()) + numberSetting.getMin(), 1)); + } + } + + int textWidth = mc.font.width(displayText); + int leftPadding = defaultPadding; + if (textWidth + 2 * defaultPadding > boxWidth) { + leftPadding = Math.max(2, boxWidth - textWidth - 2); + } + + context.drawString( + mc.font, + Component.literal(displayText), + parent.parent.x + leftPadding, + parent.parent.y + parent.offset + offset + (parent.parent.height - mc.font.lineHeight) / 2, + Color.white.getRGB() + ); + } + + @Override + public void mouseClicked(double mouseX, double mouseY, int button) { + if (isHovered(mouseX, mouseY)) sliding = true; + } + + @Override + public void mouseReleased(double mouseX, double mouseY, int button) { + sliding = false; + } + + private double roundToPlace(double value, int place) { + if (place < 0) { + return value; + } + + BigDecimal bd = new BigDecimal(value); + bd = bd.setScale(place, RoundingMode.HALF_UP); + return bd.doubleValue(); + } +} |
