From aeeb3dfa387c5419bc8338d9fa0215de5115a88d Mon Sep 17 00:00:00 2001 From: Leo Codes <103524696+kleo-dev@users.noreply.github.com> Date: Tue, 25 Feb 2025 15:56:00 +0100 Subject: [PATCH] efficient ui --- .../auraclient/menus/CloakSelector.java | 16 +++---- .../auraclient/auraclient/menus/MainMenu.java | 11 +++-- .../auraclient/auraclient/ui/AuraTexture.java | 7 +++ .../org/auraclient/auraclient/ui/AuraUi.java | 6 +-- .../auraclient/auraclient/ui/AuraWidget.java | 43 ++++++++++++------- .../org/auraclient/auraclient/ui/Box.java | 19 -------- .../org/auraclient/auraclient/ui/Button.java | 33 -------------- .../auraclient/auraclient/ui/ImageButton.java | 40 ----------------- 8 files changed, 54 insertions(+), 121 deletions(-) create mode 100644 src/main/java/org/auraclient/auraclient/ui/AuraTexture.java delete mode 100644 src/main/java/org/auraclient/auraclient/ui/Box.java delete mode 100644 src/main/java/org/auraclient/auraclient/ui/Button.java delete mode 100644 src/main/java/org/auraclient/auraclient/ui/ImageButton.java diff --git a/src/main/java/org/auraclient/auraclient/menus/CloakSelector.java b/src/main/java/org/auraclient/auraclient/menus/CloakSelector.java index 941ce52..c439f0d 100644 --- a/src/main/java/org/auraclient/auraclient/menus/CloakSelector.java +++ b/src/main/java/org/auraclient/auraclient/menus/CloakSelector.java @@ -4,9 +4,9 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import org.auraclient.auraclient.AuraClient; import org.auraclient.auraclient.ui.AuraUi; -import org.auraclient.auraclient.ui.Box; -import org.auraclient.auraclient.ui.ImageButton; +import org.auraclient.auraclient.ui.AuraTexture; import net.minecraft.util.Identifier; +import org.auraclient.auraclient.ui.AuraWidget; public class CloakSelector extends AuraUi { public CloakSelector() { @@ -15,18 +15,18 @@ public class CloakSelector extends AuraUi { @Override public void ui(DrawContext context) { + int width = (32 * (AuraClient.list.size() + 1)); + int x = (context.getScaledWindowWidth() - (width - 8)) / 2; int y = (context.getScaledWindowHeight() - 92) / 2; - int x = (context.getScaledWindowWidth() - ((32 * AuraClient.list.size()) - 8)) / 2; - widgets.add(new Box(x - 8, y - 8, (40 * AuraClient.list.size() + 8), 108)); + widgets.add(new AuraWidget(AuraTexture.BOX, x - 8, y - 8, width, 108)); for (int i = 0; i < AuraClient.list.size(); i++) { String cloak = AuraClient.list.get(i); - ImageButton img = new ImageButton(Identifier.of("auraclient", "textures/gui/cloaks/"+cloak.replaceAll("\\.(gif|png)", "")+".prev.png"), x, y, 32, 92); - img.onClick = () -> { + + widgets.add(new AuraWidget(Identifier.of("auraclient", "textures/gui/cloaks/"+cloak.replaceAll("\\.(gif|png)", "")+".prev.png"), x, y, 32, 92, () -> { AuraClient.cape = cloak; - }; - widgets.add(img); + })); x += 40; } diff --git a/src/main/java/org/auraclient/auraclient/menus/MainMenu.java b/src/main/java/org/auraclient/auraclient/menus/MainMenu.java index bc18104..9f850aa 100644 --- a/src/main/java/org/auraclient/auraclient/menus/MainMenu.java +++ b/src/main/java/org/auraclient/auraclient/menus/MainMenu.java @@ -2,8 +2,10 @@ package org.auraclient.auraclient.menus; import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; +import org.auraclient.auraclient.AuraClient; +import org.auraclient.auraclient.ui.AuraTexture; import org.auraclient.auraclient.ui.AuraUi; -import org.auraclient.auraclient.ui.Button; +import org.auraclient.auraclient.ui.AuraWidget; public class MainMenu extends AuraUi { public MainMenu() { @@ -12,8 +14,11 @@ public class MainMenu extends AuraUi { @Override public void ui(DrawContext context) { - widgets.add(new Button("Cloaks", (context.getScaledWindowWidth() - 50) / 2, (context.getScaledWindowHeight() - 20) / 2, 50, 20, () -> { + int x = (context.getScaledWindowWidth() - 30) / 2; + int y = (context.getScaledWindowHeight() - 14) / 2; + + widgets.add(new AuraWidget(AuraTexture.BOX, x, y, 30, 14, () -> { client.setScreen(new CloakSelector()); })); } -} +} \ No newline at end of file diff --git a/src/main/java/org/auraclient/auraclient/ui/AuraTexture.java b/src/main/java/org/auraclient/auraclient/ui/AuraTexture.java new file mode 100644 index 0000000..8c7e870 --- /dev/null +++ b/src/main/java/org/auraclient/auraclient/ui/AuraTexture.java @@ -0,0 +1,7 @@ +package org.auraclient.auraclient.ui; + +import net.minecraft.util.Identifier; + +public class AuraTexture { + public static Identifier BOX = Identifier.of("auraclient", "textures/gui/box/box.png"); +} diff --git a/src/main/java/org/auraclient/auraclient/ui/AuraUi.java b/src/main/java/org/auraclient/auraclient/ui/AuraUi.java index 17ada68..1ef3d7f 100644 --- a/src/main/java/org/auraclient/auraclient/ui/AuraUi.java +++ b/src/main/java/org/auraclient/auraclient/ui/AuraUi.java @@ -26,7 +26,7 @@ public abstract class AuraUi extends Screen { for (AuraWidget widget : widgets) { widget.client = client; - widget.render(context, isInside(mouseX, mouseY, widget.x1, widget.y1, widget.x2, widget.y2)); + widget.render(context, isInside(mouseX, mouseY, widget.x, widget.y, widget.x + widget.width, widget.y + widget.height)); } } @@ -34,8 +34,8 @@ public abstract class AuraUi extends Screen { public boolean mouseClicked(double mouseX, double mouseY, int button) { if (button == 0) { for (AuraWidget widget : widgets) { - if (isInside(mouseX, mouseY, widget.x1, widget.y1, widget.x2, widget.y2)) { - widget.mouseClicked(); + if (isInside(mouseX, mouseY, widget.x, widget.y, widget.x + widget.width, widget.y + widget.height)) { + widget.onClick.run(); } } } diff --git a/src/main/java/org/auraclient/auraclient/ui/AuraWidget.java b/src/main/java/org/auraclient/auraclient/ui/AuraWidget.java index ecc0710..5319ef3 100644 --- a/src/main/java/org/auraclient/auraclient/ui/AuraWidget.java +++ b/src/main/java/org/auraclient/auraclient/ui/AuraWidget.java @@ -2,26 +2,39 @@ package org.auraclient.auraclient.ui; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.util.Identifier; -public abstract class AuraWidget { - public int x1; - public int y1; - public int x2; - public int y2; +public class AuraWidget { + public int x; + public int y; + public int width; + public int height; public MinecraftClient client; + public Identifier sprite; + public Runnable onClick; - public int background = 0x5F000000; - public int foreground = 0xFFFFFFFF; + public AuraWidget(Identifier sprite, int x, int y, int width, int height) { + this.x = x; + this.y = y; - AuraWidget(int x, int y, int width, int height) { - x1 = x; - y1 = y; - - x2 = x + width; - y2 = y + height; + this.width = width; + this.height = height; + this.sprite = sprite; + this.onClick = () -> {}; } - void render(DrawContext context, boolean hover) {} + public AuraWidget(Identifier sprite, int x, int y, int width, int height, Runnable onClick) { + this.x = x; + this.y = y; - void mouseClicked() {} + this.width = width; + this.height = height; + this.sprite = sprite; + this.onClick = onClick; + } + + void render(DrawContext context, boolean hover) { + context.drawTexture(RenderLayer::getGuiTextured, sprite, x, y, 0, 0, width, height, width, height); + } } diff --git a/src/main/java/org/auraclient/auraclient/ui/Box.java b/src/main/java/org/auraclient/auraclient/ui/Box.java deleted file mode 100644 index 510af75..0000000 --- a/src/main/java/org/auraclient/auraclient/ui/Box.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.auraclient.auraclient.ui; - -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.util.Identifier; - -public class Box extends AuraWidget { - public static Identifier BOX = Identifier.of("auraclient", "textures/gui/box/box.png"); - - public Box(int x, int y, int width, int height) { - super(x, y, width, height); - } - - public void render(DrawContext context, boolean hover) { - int width = x2 - x1; - int height = y2 - y1; - context.drawTexture(RenderLayer::getGuiTextured, Box.BOX, x1, y1, 0, 0, width, height, width, height); - } -} diff --git a/src/main/java/org/auraclient/auraclient/ui/Button.java b/src/main/java/org/auraclient/auraclient/ui/Button.java deleted file mode 100644 index e74edac..0000000 --- a/src/main/java/org/auraclient/auraclient/ui/Button.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.auraclient.auraclient.ui; - -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.util.Identifier; - -public class Button extends AuraWidget { - public Runnable onClick; - public String text; - public int hoverBorder = 0xFFFFFFFF; - - public Button(String button_text, int x, int y, int width, int height, Runnable on_click) { - super(x, y, width, height); - onClick = on_click; - text = button_text; - } - - public void render(DrawContext context, boolean hover) { - int width = x2 - x1; - int height = y2 - y1; - context.drawTexture(RenderLayer::getGuiTextured, Box.BOX, x1, y1, 0, 0, width, height, width, height); - - context.drawText(client.textRenderer, text, (((x2 - x1) - client.textRenderer.getWidth(text)) / 2) + x1, (((y2 - y1) - 6) / 2) + y1, foreground, false); - - if (hover) { - context.drawBorder(x1 - 1, y1 - 1, x2 - x1 + 2, y2 - y1 + 2, hoverBorder); - } - } - - public void mouseClicked() { - onClick.run(); - } -} \ No newline at end of file diff --git a/src/main/java/org/auraclient/auraclient/ui/ImageButton.java b/src/main/java/org/auraclient/auraclient/ui/ImageButton.java deleted file mode 100644 index b4dce91..0000000 --- a/src/main/java/org/auraclient/auraclient/ui/ImageButton.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.auraclient.auraclient.ui; - -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.util.Identifier; - -public class ImageButton extends AuraWidget { - private final Identifier sprite; - public int hoverBorder = 0xFFFFFFFF; - public Runnable onClick; - - public ImageButton(Identifier sprite_, int x, int y, int width, int height) { - super(x, y, width, height); - this.sprite = sprite_; - this.onClick = () -> {}; - } - - public ImageButton(Identifier sprite_, int x, int y, int width, int height, int textureWidth, int textureHeight) { - super(x, y, width, height); - this.sprite = sprite_; - this.onClick = () -> {}; - } - - @Override - public void render(DrawContext context, boolean hover) { - int width = x2 - x1; - int height = y2 - y1; - - context.drawTexture(RenderLayer::getGuiTextured, sprite, x1, y1, 0, 0, width, height, width, height); - - if (hover) { - context.drawBorder(x1 - 1, y1 - 1, x2 - x1 + 2, y2 - y1 + 2, hoverBorder); - } - } - - @Override - void mouseClicked() { - onClick.run(); - } -}