aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--GuiTest/src/main/java/io/github/cottonmc/test/client/LibGuiTestClient.java2
-rw-r--r--src/main/java/io/github/cottonmc/cotton/gui/client/CottonHud.java55
2 files changed, 26 insertions, 31 deletions
diff --git a/GuiTest/src/main/java/io/github/cottonmc/test/client/LibGuiTestClient.java b/GuiTest/src/main/java/io/github/cottonmc/test/client/LibGuiTestClient.java
index 1780808..5fbc4b0 100644
--- a/GuiTest/src/main/java/io/github/cottonmc/test/client/LibGuiTestClient.java
+++ b/GuiTest/src/main/java/io/github/cottonmc/test/client/LibGuiTestClient.java
@@ -22,7 +22,7 @@ public class LibGuiTestClient implements ClientModInitializer {
(desc, inventory, title) -> new CottonInventoryScreen<>(desc, inventory.player, title)
);
- CottonHud.INSTANCE.add(new WHudTest(), 10, -20, 10, 10);
+ CottonHud.add(new WHudTest(), 10, -20, 10, 10);
ClientCommandManager.DISPATCHER.register(
literal("libgui")
diff --git a/src/main/java/io/github/cottonmc/cotton/gui/client/CottonHud.java b/src/main/java/io/github/cottonmc/cotton/gui/client/CottonHud.java
index 79111d2..05141a7 100644
--- a/src/main/java/io/github/cottonmc/cotton/gui/client/CottonHud.java
+++ b/src/main/java/io/github/cottonmc/cotton/gui/client/CottonHud.java
@@ -6,7 +6,6 @@ import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.util.Window;
-import net.minecraft.client.util.math.MatrixStack;
import io.github.cottonmc.cotton.gui.widget.WWidget;
@@ -19,27 +18,38 @@ import java.util.Set;
* Manages widgets that are painted on the in-game HUD.
*/
@Environment(EnvType.CLIENT)
-public enum CottonHud implements HudRenderCallback {
- INSTANCE; // TODO (4.0): Migrate from singleton to static methods
+public final class CottonHud {
+ private static final Set<WWidget> widgets = new HashSet<>();
+ private static final Map<WWidget, Positioner> positioners = new HashMap<>();
static {
- HudRenderCallback.EVENT.register(INSTANCE);
+ HudRenderCallback.EVENT.register((matrices, tickDelta) -> {
+ Window window = MinecraftClient.getInstance().getWindow();
+ int hudWidth = window.getScaledWidth();
+ int hudHeight = window.getScaledHeight();
+ for (WWidget widget : widgets) {
+ Positioner positioner = positioners.get(widget);
+ if (positioner != null) {
+ positioner.reposition(widget, hudWidth, hudHeight);
+ }
+
+ widget.paint(matrices, widget.getX(), widget.getY(), -1, -1);
+ }
+ });
+
ClientTickEvents.END_CLIENT_TICK.register(client -> {
- for (WWidget widget : INSTANCE.widgets) {
+ for (WWidget widget : widgets) {
widget.tick();
}
});
}
- private final Set<WWidget> widgets = new HashSet<>();
- private final Map<WWidget, Positioner> positioners = new HashMap<>();
-
/**
* Adds a new widget to the HUD.
*
* @param widget the widget
*/
- public void add(WWidget widget) {
+ public static void add(WWidget widget) {
widgets.add(widget);
}
@@ -51,7 +61,7 @@ public enum CottonHud implements HudRenderCallback {
* @param y the y offset
* @see Positioner#of documentation about the offsets
*/
- public void add(WWidget widget, int x, int y) {
+ public static void add(WWidget widget, int x, int y) {
add(widget, Positioner.of(x, y));
}
@@ -65,7 +75,7 @@ public enum CottonHud implements HudRenderCallback {
* @param height the height of the widget
* @see Positioner#of documentation about the offsets
*/
- public void add(WWidget widget, int x, int y, int width, int height) {
+ public static void add(WWidget widget, int x, int y, int width, int height) {
add(widget, Positioner.of(x, y));
widget.setSize(width, height);
}
@@ -76,7 +86,7 @@ public enum CottonHud implements HudRenderCallback {
* @param widget the widget
* @param positioner the positioner
*/
- public void add(WWidget widget, Positioner positioner) {
+ public static void add(WWidget widget, Positioner positioner) {
widgets.add(widget);
setPositioner(widget, positioner);
}
@@ -89,7 +99,7 @@ public enum CottonHud implements HudRenderCallback {
* @param width the width of the widget
* @param height the height of the widget
*/
- public void add(WWidget widget, Positioner positioner, int width, int height) {
+ public static void add(WWidget widget, Positioner positioner, int width, int height) {
widgets.add(widget);
widget.setSize(width, height);
setPositioner(widget, positioner);
@@ -101,7 +111,7 @@ public enum CottonHud implements HudRenderCallback {
* @param widget the widget
* @param positioner the positioner
*/
- public void setPositioner(WWidget widget, Positioner positioner) {
+ public static void setPositioner(WWidget widget, Positioner positioner) {
positioners.put(widget, positioner);
}
@@ -110,25 +120,10 @@ public enum CottonHud implements HudRenderCallback {
*
* @param widget the widget
*/
- public void remove(WWidget widget) {
+ public static void remove(WWidget widget) {
widgets.remove(widget);
}
- @Override
- public void onHudRender(MatrixStack matrices, float tickDelta) {
- Window window = MinecraftClient.getInstance().getWindow();
- int hudWidth = window.getScaledWidth();
- int hudHeight = window.getScaledHeight();
- for (WWidget widget : widgets) {
- Positioner positioner = positioners.get(widget);
- if (positioner != null) {
- positioner.reposition(widget, hudWidth, hudHeight);
- }
-
- widget.paint(matrices, widget.getX(), widget.getY(), -1, -1);
- }
- }
-
/**
* Positioners can be used to change the position of a widget based on the window dimensions.
*/