From b5c7318784b3c504c4c017ac0ab1c4044cca9a87 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Tue, 11 Mar 2025 21:13:27 +0100 Subject: [PATCH] image button --- .../saturnclient/menus/MainMenu.java | 3 +- .../saturnclient/menus/SettingsMenu.java | 38 ++++++++++++++++++ .../saturnclient/widgets/SaturnButton.java | 15 ++++--- .../widgets/SaturnImageButton.java | 34 ++++++++++++++++ .../java/org/saturnclient/ui/SaturnUi.java | 16 ++++++-- .../org/saturnclient/ui/SaturnWidget.java | 6 +++ .../textures/gui/components/close.png | Bin 0 -> 322 bytes .../textures/gui/components/search.png | Bin 0 -> 523 bytes 8 files changed, 100 insertions(+), 12 deletions(-) create mode 100644 src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java create mode 100644 src/main/java/org/saturnclient/saturnclient/widgets/SaturnImageButton.java create mode 100644 src/main/resources/assets/saturnclient/textures/gui/components/close.png create mode 100644 src/main/resources/assets/saturnclient/textures/gui/components/search.png diff --git a/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java index dbf5a85..77bccff 100644 --- a/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java +++ b/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java @@ -13,7 +13,8 @@ public class MainMenu extends SaturnUi { @Override protected void init() { draw( - new SaturnButton("Cloaks", (__) -> { + new SaturnButton("Settings", () -> { + client.setScreen(new SettingsMenu()); }).setX(10).setY(10).setWidth(100).setHeight(20).setAnimation(SaturnAnimation.FADE_SLIDE.distance(15))); } } \ No newline at end of file diff --git a/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java new file mode 100644 index 0000000..0a1ebc8 --- /dev/null +++ b/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java @@ -0,0 +1,38 @@ +package org.saturnclient.saturnclient.menus; + +import org.saturnclient.saturnclient.widgets.SaturnButton; +import org.saturnclient.saturnclient.widgets.SaturnImageButton; +import org.saturnclient.ui.SaturnUi; + +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; + +public class SettingsMenu extends SaturnUi { + public boolean isOpen = false; + public static Identifier searchTexture = Identifier.of("saturnclient", "textures/gui/components/search.png"); + public static Identifier closeTexture = Identifier.of("saturnclient", "textures/gui/components/close.png"); + public SaturnImageButton searchButton; + + public SettingsMenu() { + super(Text.literal("Settings")); + } + + @Override + protected void init() { + searchButton = (SaturnImageButton) new SaturnImageButton(searchTexture, 10, + 10, + () -> { + isOpen = !isOpen; + if (isOpen) { + searchButton.sprite = closeTexture; + draw(new SaturnButton("ABC", () -> { + }).setWidth(30).setHeight(30).setX(70).setY(70)); + } else { + searchButton.sprite = searchTexture; + widgets.remove(widgets.size() - 1); + } + }).setWidth(30).setHeight(30).setX(30).setY(30); + + draw(searchButton); + } +} \ No newline at end of file diff --git a/src/main/java/org/saturnclient/saturnclient/widgets/SaturnButton.java b/src/main/java/org/saturnclient/saturnclient/widgets/SaturnButton.java index 847030c..43c09e9 100644 --- a/src/main/java/org/saturnclient/saturnclient/widgets/SaturnButton.java +++ b/src/main/java/org/saturnclient/saturnclient/widgets/SaturnButton.java @@ -1,6 +1,5 @@ package org.saturnclient.saturnclient.widgets; -import java.util.function.Consumer; import org.saturnclient.ui.SaturnWidget; import net.minecraft.client.MinecraftClient; @@ -12,19 +11,19 @@ import net.minecraft.util.math.ColorHelper; import net.minecraft.util.math.MathHelper; public class SaturnButton extends SaturnWidget { + public static final ButtonTextures TEXTURES = new ButtonTextures( + Identifier.ofVanilla("widget/saturn_button"), Identifier.ofVanilla("widget/saturn_button_disabled"), + Identifier.ofVanilla("widget/saturn_button_highlighted")); + public boolean active = true; public String text; - public Consumer onPress; + public Runnable onPress; - public SaturnButton(String text, Consumer onPress) { + public SaturnButton(String text, Runnable onPress) { this.text = text; this.onPress = onPress; } - private static final ButtonTextures TEXTURES = new ButtonTextures( - Identifier.ofVanilla("widget/saturn_button"), Identifier.ofVanilla("widget/saturn_button_disabled"), - Identifier.ofVanilla("widget/saturn_button_highlighted")); - @Override public void render(DrawContext context, boolean hovering) { MinecraftClient minecraftClient = MinecraftClient.getInstance(); @@ -41,6 +40,6 @@ public class SaturnButton extends SaturnWidget { @Override public void click() { - this.onPress.accept(this); + this.onPress.run(); } } diff --git a/src/main/java/org/saturnclient/saturnclient/widgets/SaturnImageButton.java b/src/main/java/org/saturnclient/saturnclient/widgets/SaturnImageButton.java new file mode 100644 index 0000000..2882ac2 --- /dev/null +++ b/src/main/java/org/saturnclient/saturnclient/widgets/SaturnImageButton.java @@ -0,0 +1,34 @@ +package org.saturnclient.saturnclient.widgets; + +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.ColorHelper; + +public class SaturnImageButton extends SaturnButton { + public Identifier sprite; + public int imageWidth; + public int imageHeight; + + public SaturnImageButton(Identifier sprite, int imageWidth, int imageHeight, Runnable onPress) { + super("", onPress); + this.sprite = sprite; + this.imageWidth = imageWidth; + this.imageHeight = imageHeight; + } + + @Override + public void render(DrawContext context, boolean hovering) { + context.drawGuiTexture(RenderLayer::getGuiTextured, SaturnButton.TEXTURES.get(this.active, hovering), this.x, + this.y, this.width, this.height, ColorHelper.getWhite(this.alpha)); + + context.drawTexture(RenderLayer::getGuiTextured, sprite, x + (width - imageWidth) / 2, + y + (height - imageHeight) / 2, 0, 0, imageWidth, imageHeight, imageWidth, + imageHeight, ColorHelper.getWhite(alpha)); + } + + @Override + public void click() { + this.onPress.run(); + } +} diff --git a/src/main/java/org/saturnclient/ui/SaturnUi.java b/src/main/java/org/saturnclient/ui/SaturnUi.java index 539f787..680fb30 100644 --- a/src/main/java/org/saturnclient/ui/SaturnUi.java +++ b/src/main/java/org/saturnclient/ui/SaturnUi.java @@ -15,12 +15,18 @@ public class SaturnUi extends Screen { } public void draw(SaturnWidget widget) { - widgets.add(widget); + synchronized (widgets) { + widgets.add(widget); + } } @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { - for (SaturnWidget widget : widgets) { + for (SaturnWidget widget : new ArrayList<>(widgets)) { + if (!widget.visible) { + continue; + } + if (widget.animation != null) { widget.animation.apply(widget); } @@ -34,7 +40,11 @@ public class SaturnUi extends Screen { @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { if (button == 0) { - for (SaturnWidget widget : widgets) { + for (SaturnWidget widget : new ArrayList<>(widgets)) { + if (!widget.visible) { + continue; + } + boolean isMouseInside = widget.x < mouseX && widget.x + widget.width > mouseX && widget.y < mouseY && widget.y + widget.height > mouseY; if (isMouseInside) { diff --git a/src/main/java/org/saturnclient/ui/SaturnWidget.java b/src/main/java/org/saturnclient/ui/SaturnWidget.java index b588c69..e832f62 100644 --- a/src/main/java/org/saturnclient/ui/SaturnWidget.java +++ b/src/main/java/org/saturnclient/ui/SaturnWidget.java @@ -9,6 +9,7 @@ public class SaturnWidget { public int height; public float alpha = 1.0f; public SaturnAnimation animation = null; + public boolean visible = true; public void render(DrawContext context, boolean hovering) { } @@ -59,4 +60,9 @@ public class SaturnWidget { } return this; } + + public SaturnWidget setVisible(boolean visible) { + this.visible = visible; + return this; + } } diff --git a/src/main/resources/assets/saturnclient/textures/gui/components/close.png b/src/main/resources/assets/saturnclient/textures/gui/components/close.png new file mode 100644 index 0000000000000000000000000000000000000000..cf7f96762a625837c5836224dfb1cec0e3e49ed4 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlfUt?_hm4DsN7 zJH?x;!GOo*sCDJbygL;v??cm<2y$l5>QY$LddXi+zf4EAZGY|M#yQ1K@fVg)W4!g04cO{=#FyRR!Tod0mQIQ#vjm$nncxkbAflxAfas&qep7aHQa p>)xV!$NPR&G`_m{?|`=K4Tj>|o!13A^Ou3#@9FC2vd$@?2>^1JYYhMZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/saturnclient/textures/gui/components/search.png b/src/main/resources/assets/saturnclient/textures/gui/components/search.png new file mode 100644 index 0000000000000000000000000000000000000000..ac032901af483000ff429ab309c168caeca04c30 GIT binary patch literal 523 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgftkl!RF~o!S z>XeOshaGs@^jA!2e|g{vqoUd|ubjERgk&Qt*~;P?SVMh0dNzdc@N}>zI(t0)KdHE6 z*Oy6B8?RiFw@&|GR~k&O>2?EzB`ldpPDzd;|EKUfW_gt8VOoAwmI17 zsctV#V$o)r{(oEalay?MDE+$1b82QqOMXR{P7$!sJ>jPQc(Lj6`G#e}%DV3EKHLQ& z6Q_smoOf)aOzoyyzZbfnT=HHvuJN+LRONmj>l3yAKg|<+(595Ww#c?O+0yFMI;Q7y z%j*wYG_%goJu&s$vPewBa0oZHttl}tZ`%w>m=oMN`HiR?G(PpqNj8qjW^!-&XVU%`#mmQ uSus=Gu&G){!tlCORkY~Nlh^tG{}rEo^Xr8JioI2!i12jvb6Mw<&;$U!i_6pi literal 0 HcmV?d00001