ui update

This commit is contained in:
2025-03-23 17:10:06 +01:00
parent 3ff01d9fff
commit 48d9fbe1e5
13 changed files with 425 additions and 139 deletions
@@ -4,12 +4,11 @@ import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
import net.minecraft.client.font.TextRenderer; import net.minecraft.client.font.TextRenderer;
import net.minecraft.util.math.ColorHelper; import net.minecraft.util.math.ColorHelper;
import org.saturnclient.saturnclient.auth.SaturnSocket;
import org.saturnclient.saturnclient.cloaks.Cloaks; import org.saturnclient.saturnclient.cloaks.Cloaks;
import org.saturnclient.saturnclient.config.ConfigManager; import org.saturnclient.saturnclient.config.ConfigManager;
import org.saturnclient.saturnclient.event.KeyInputHandler; import org.saturnclient.saturnclient.event.KeyInputHandler;
import org.saturnclient.saturnmods.ModManager; import org.saturnclient.saturnmods.ModManager;
import org.saturnclient.saturnclient.auth.SaturnSocket;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -18,19 +17,26 @@ import org.slf4j.LoggerFactory;
* Originally created by IIpho3nix and modified for Saturn Client by leo. * Originally created by IIpho3nix and modified for Saturn Client by leo.
*/ */
public class SaturnClient implements ModInitializer { public class SaturnClient implements ModInitializer {
public static final String MOD_ID = "saturnclient"; public static final String MOD_ID = "saturnclient";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
public static int COLOR = ColorHelper.getArgb(255, 251, 60, 79); public static int COLOR = ColorHelper.getArgb(255, 251, 60, 79);
public static int WHITE = ColorHelper.getArgb(255, 255, 255, 255); public static int WHITE = ColorHelper.getArgb(255, 255, 255, 255);
public static int NORMAL = ColorHelper.getArgb(255, 182, 182, 182);
public static TextRenderer textRenderer = null; public static TextRenderer textRenderer = null;
public static int getWhite(float alpha) {
return ((int) (alpha * 255) << 24) | (NORMAL & 0x00FFFFFF);
}
@Override @Override
public void onInitialize() { public void onInitialize() {
LOGGER.info("Initializing " + MOD_ID); LOGGER.info("Initializing " + MOD_ID);
ModManager.init(); ModManager.init();
ConfigManager.load(); ConfigManager.load();
ClientLifecycleEvents.CLIENT_STOPPING.register(c -> ConfigManager.save()); ClientLifecycleEvents.CLIENT_STOPPING.register(c -> ConfigManager.save()
);
KeyInputHandler.register(); KeyInputHandler.register();
if (SaturnSocket.authenticate()) { if (SaturnSocket.authenticate()) {
@@ -1,11 +1,11 @@
package org.saturnclient.ui; package org.saturnclient.ui;
public class SaturnAnimation { public class SaturnAnimation {
public int delay = 0; public int delay = 0;
public int lastTick = 0; public int lastTick = 0;
public void init(SaturnWidget widget) { public void init(SaturnWidget widget) {}
}
public boolean run(SaturnWidget widget, int tick) { public boolean run(SaturnWidget widget, int tick) {
return true; return true;
@@ -3,6 +3,7 @@ package org.saturnclient.ui;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
public class SaturnWidget { public class SaturnWidget {
public int x = 0; public int x = 0;
public int y = 0; public int y = 0;
public int width = 0; public int width = 0;
@@ -11,24 +12,27 @@ public class SaturnWidget {
public SaturnAnimation[] animations = null; public SaturnAnimation[] animations = null;
public boolean visible = true; public boolean visible = true;
public void init() { public void init() {}
}
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { public void render(
} DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {}
public void click(int mouseX, int mouseY) { public void click(int mouseX, int mouseY) {}
}
public void keyPressed(int keyCode, int scanCode, int modifiers) { public void keyPressed(int keyCode, int scanCode, int modifiers) {}
}
public void charTyped(char typedChar) { public void charTyped(char typedChar) {}
}
public void mouseScrolled(int mouseX, int mouseY, double horizontalAmount, public void mouseScrolled(
double verticalAmount) { int mouseX,
} int mouseY,
double horizontalAmount,
double verticalAmount
) {}
public SaturnWidget setX(int x) { public SaturnWidget setX(int x) {
this.x = x; this.x = x;
@@ -1,5 +1,9 @@
package org.saturnclient.ui.components; package org.saturnclient.ui.components;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.math.ColorHelper;
import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.menus.ConfigEditor; import org.saturnclient.saturnclient.menus.ConfigEditor;
import org.saturnclient.saturnmods.SaturnMod; import org.saturnclient.saturnmods.SaturnMod;
@@ -7,12 +11,8 @@ import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.SaturnWidget; import org.saturnclient.ui.SaturnWidget;
import org.saturnclient.ui.Textures; import org.saturnclient.ui.Textures;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.math.ColorHelper;
public class SaturnModComp extends SaturnWidget { public class SaturnModComp extends SaturnWidget {
SaturnMod mod; SaturnMod mod;
public SaturnModComp(SaturnMod mod) { public SaturnModComp(SaturnMod mod) {
@@ -20,39 +20,97 @@ public class SaturnModComp extends SaturnWidget {
} }
@Override @Override
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
boolean enabled = mod.isEnabled(); boolean enabled = mod.isEnabled();
boolean hovering_settings = settingsHovering(mouseX, mouseY); boolean hovering_settings = settingsHovering(mouseX, mouseY);
int color = !hovering_settings && (enabled || hovering) ? SaturnClient.COLOR : ColorHelper.getWhite(alpha); int color = !hovering_settings && (enabled || hovering)
? SaturnClient.COLOR
: SaturnClient.getWhite(alpha);
int size = 12; int size = 12;
if (enabled) { if (enabled) {
context.drawTexture(RenderLayer::getGuiTextured, Textures.MOD_BG, x, y, 0, 0, 86, 20, 86, context.drawTexture(
20, SaturnClient.COLOR); RenderLayer::getGuiTextured,
Textures.MOD_BG,
x,
y,
0,
0,
86,
20,
86,
20,
SaturnClient.COLOR
);
} }
context.drawTexture(RenderLayer::getGuiTextured, Textures.MOD, x, y, 0, 0, 86, 20, 86, context.drawTexture(
20, color); RenderLayer::getGuiTextured,
Textures.MOD,
x,
y,
0,
0,
86,
20,
86,
20,
color
);
context.drawTexture(RenderLayer::getGuiTextured, mod.getIconTexture(), x + 4, y + 4, 0, 0, size, size, context.drawTexture(
RenderLayer::getGuiTextured,
mod.getIconTexture(),
x + 4,
y + 4,
0,
0,
size, size,
size, color); size,
size,
size,
color
);
context.drawText(SaturnClient.textRenderer, SaturnUi.text(mod.getName()), x + 20, context.drawText(
SaturnClient.textRenderer,
SaturnUi.text(mod.getName()),
x + 20,
y + (21 - SaturnClient.textRenderer.fontHeight) / 2, y + (21 - SaturnClient.textRenderer.fontHeight) / 2,
color, false); color,
false
);
context.drawTexture(RenderLayer::getGuiTextured, Textures.SETTINGS, x + 77, context.drawTexture(
y + 11, 0, 0, 7, 7, 7, 7, hovering_settings ? SaturnClient.COLOR : ColorHelper.getWhite(alpha)); RenderLayer::getGuiTextured,
Textures.SETTINGS,
x + 77,
y + 11,
0,
0,
7,
7,
7,
7,
hovering_settings
? SaturnClient.COLOR
: SaturnClient.getWhite(alpha)
);
} }
@Override @Override
public void click(int mouseX, int mouseY) { public void click(int mouseX, int mouseY) {
if (settingsHovering(mouseX, mouseY)) { if (settingsHovering(mouseX, mouseY)) {
MinecraftClient.getInstance().setScreen(new ConfigEditor(mod.getConfig())); MinecraftClient.getInstance()
.setScreen(new ConfigEditor(mod.getConfig()));
} else { } else {
mod.setEnabled(!mod.isEnabled()); mod.setEnabled(!mod.isEnabled());
} }
@@ -63,7 +121,11 @@ public class SaturnModComp extends SaturnWidget {
int sY = y + 11; int sY = y + 11;
int size = 7; int size = 7;
return sX < mouseX && sX + size > mouseX return (
&& sY < mouseY && sY + size > mouseY; sX < mouseX &&
sX + size > mouseX &&
sY < mouseY &&
sY + size > mouseY
);
} }
} }
@@ -1,15 +1,15 @@
package org.saturnclient.ui.components; package org.saturnclient.ui.components;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.math.ColorHelper;
import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.config.Property; import org.saturnclient.saturnclient.config.Property;
import org.saturnclient.ui.SaturnWidget; import org.saturnclient.ui.SaturnWidget;
import org.saturnclient.ui.Textures; import org.saturnclient.ui.Textures;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.math.ColorHelper;
public class SaturnToggle extends SaturnWidget { public class SaturnToggle extends SaturnWidget {
Property<Boolean> prop; Property<Boolean> prop;
public SaturnToggle(Property<Boolean> prop) { public SaturnToggle(Property<Boolean> prop) {
@@ -19,17 +19,46 @@ public class SaturnToggle extends SaturnWidget {
} }
@Override @Override
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { public void render(
int color = prop.value ? SaturnClient.COLOR : ColorHelper.getWhite(alpha); DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
int color = prop.value
? SaturnClient.COLOR
: SaturnClient.getWhite(alpha);
int w = 16; int w = 16;
int h = 6; int h = 6;
int s = 8; int s = 8;
context.drawTexture(RenderLayer::getGuiTextured, Textures.TOGGLE_BG, x, context.drawTexture(
y + 1, 0, 0, w, h, w, h, color); RenderLayer::getGuiTextured,
Textures.TOGGLE_BG,
x,
y + 1,
0,
0,
w,
h,
w,
h,
color
);
context.drawTexture(RenderLayer::getGuiTextured, Textures.TOGGLE_INDICATOR, prop.value ? x + 8 : x, context.drawTexture(
y, 0, 0, s, s, s, s, color); RenderLayer::getGuiTextured,
Textures.TOGGLE_INDICATOR,
prop.value ? x + 8 : x,
y,
0,
0,
s,
s,
s,
s,
color
);
} }
@Override @Override
@@ -1,19 +1,20 @@
package org.saturnclient.ui.widgets; package org.saturnclient.ui.widgets;
import java.util.function.Consumer;
import org.lwjgl.opengl.GL11;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.SaturnWidget;
import org.saturnclient.ui.Textures;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import java.util.function.Consumer;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.math.ColorHelper; import net.minecraft.util.math.ColorHelper;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import org.lwjgl.opengl.GL11;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.SaturnWidget;
import org.saturnclient.ui.Textures;
public class SaturnButton extends SaturnWidget { public class SaturnButton extends SaturnWidget {
public boolean active = true; public boolean active = true;
public String text; public String text;
public Consumer<SaturnButton> onPress; public Consumer<SaturnButton> onPress;
@@ -25,37 +26,73 @@ public class SaturnButton extends SaturnWidget {
} }
public SaturnButton(String text, Runnable onPress) { public SaturnButton(String text, Runnable onPress) {
this(text, (b) -> { this(text, b -> {
onPress.run(); onPress.run();
}); });
} }
@Override @Override
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
MinecraftClient minecraftClient = MinecraftClient.getInstance(); MinecraftClient minecraftClient = MinecraftClient.getInstance();
int hoverColor = ((int) (alpha * 255) << 24) | (SaturnClient.COLOR & 0x00FFFFFF); int hoverColor =
((int) (alpha * 255) << 24) | (SaturnClient.COLOR & 0x00FFFFFF);
if (background) { if (background) {
RenderSystem.setShaderTexture(0, Textures.BUTTON); RenderSystem.setShaderTexture(0, Textures.BUTTON);
RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR_MIPMAP_LINEAR); RenderSystem.texParameter(
GL11.GL_TEXTURE_2D,
GL11.GL_TEXTURE_MIN_FILTER,
GL11.GL_LINEAR_MIPMAP_LINEAR
);
context.drawGuiTexture(RenderLayer::getGuiTextured, Textures.BUTTON, this.x, context.drawGuiTexture(
this.y, this.width, this.height, ColorHelper.getWhite(this.alpha)); RenderLayer::getGuiTextured,
Textures.BUTTON,
this.x,
this.y,
this.width,
this.height,
SaturnClient.getWhite(this.alpha)
);
if (hovering) { if (hovering) {
context.drawGuiTexture(RenderLayer::getGuiTextured, Textures.BUTTON_BORDER, this.x, context.drawGuiTexture(
this.y, this.width, this.height, hoverColor); RenderLayer::getGuiTextured,
Textures.BUTTON_BORDER,
this.x,
this.y,
this.width,
this.height,
hoverColor
);
} }
} }
if (alpha != 0.0f) { if (alpha != 0.0f) {
int i = this.active ? 16777215 : 10526880; int i = this.active ? 16777215 : 10526880;
context.drawText(minecraftClient.textRenderer, context.drawText(
minecraftClient.textRenderer,
SaturnUi.text(text), SaturnUi.text(text),
this.x + ((this.width - minecraftClient.textRenderer.getWidth(SaturnUi.text(text))) / 2), this.x +
this.y + ((this.height - minecraftClient.textRenderer.fontHeight + 1) / 2), ((this.width -
hovering ? hoverColor : i | MathHelper.ceil(this.alpha * 255.0F) << 24, false); minecraftClient.textRenderer.getWidth(
SaturnUi.text(text)
)) /
2),
this.y +
((this.height - minecraftClient.textRenderer.fontHeight + 1) /
2),
hovering
? hoverColor
: i | (MathHelper.ceil(this.alpha * 255.0F) << 24),
false
);
} }
} }
@@ -1,38 +1,57 @@
package org.saturnclient.ui.widgets; package org.saturnclient.ui.widgets;
import java.util.function.Consumer; import java.util.function.Consumer;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnWidget;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.ColorHelper; import net.minecraft.util.math.ColorHelper;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnWidget;
public class SaturnClickableImage extends SaturnWidget { public class SaturnClickableImage extends SaturnWidget {
public Identifier texture; public Identifier texture;
public boolean selected = false; public boolean selected = false;
public Consumer<SaturnClickableImage> onPress; public Consumer<SaturnClickableImage> onPress;
public int color = ColorHelper.getWhite(1.0f); public int color = SaturnClient.getWhite(1.0f);
public int hoverColor = SaturnClient.COLOR; public int hoverColor = SaturnClient.COLOR;
public SaturnClickableImage(Identifier texture, Consumer<SaturnClickableImage> onPress) { public SaturnClickableImage(
Identifier texture,
Consumer<SaturnClickableImage> onPress
) {
this.texture = texture; this.texture = texture;
this.onPress = onPress; this.onPress = onPress;
} }
public SaturnClickableImage(Identifier texture, Runnable onPress) { public SaturnClickableImage(Identifier texture, Runnable onPress) {
this(texture, (m) -> { this(texture, m -> {
onPress.run(); onPress.run();
}); });
} }
@Override @Override
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { public void render(
context.drawTexture(RenderLayer::getGuiTextured, texture, x, y, 0, 0, width, height, width, DrawContext context,
height, (hovering || selected ? hoverColor : color) | MathHelper.ceil(this.alpha * 255.0F) << 24); boolean hovering,
int mouseX,
int mouseY
) {
context.drawTexture(
RenderLayer::getGuiTextured,
texture,
x,
y,
0,
0,
width,
height,
width,
height,
(hovering || selected ? hoverColor : color) |
(MathHelper.ceil(this.alpha * 255.0F) << 24)
);
} }
@Override @Override
@@ -44,5 +63,4 @@ public class SaturnClickableImage extends SaturnWidget {
this.selected = selected; this.selected = selected;
return this; return this;
} }
} }
@@ -1,39 +1,53 @@
package org.saturnclient.ui.widgets; package org.saturnclient.ui.widgets;
import java.util.function.Consumer; import java.util.function.Consumer;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnWidget;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.ColorHelper; import net.minecraft.util.math.ColorHelper;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnWidget;
public class SaturnClickableSprite extends SaturnWidget { public class SaturnClickableSprite extends SaturnWidget {
public Identifier sprite; public Identifier sprite;
public boolean selected = false; public boolean selected = false;
public Consumer<SaturnClickableSprite> onPress; public Consumer<SaturnClickableSprite> onPress;
public int color = ColorHelper.getWhite(1.0f); public int color = SaturnClient.getWhite(1.0f);
public int hoverColor = SaturnClient.COLOR; public int hoverColor = SaturnClient.COLOR;
public SaturnClickableSprite(Identifier sprite, Consumer<SaturnClickableSprite> onPress) { public SaturnClickableSprite(
Identifier sprite,
Consumer<SaturnClickableSprite> onPress
) {
this.sprite = sprite; this.sprite = sprite;
this.onPress = onPress; this.onPress = onPress;
} }
public SaturnClickableSprite(Identifier sprite, Runnable onPress) { public SaturnClickableSprite(Identifier sprite, Runnable onPress) {
this(sprite, (m) -> { this(sprite, m -> {
onPress.run(); onPress.run();
}); });
} }
@Override @Override
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { public void render(
context.drawGuiTexture(RenderLayer::getGuiTextured, sprite, this.x, DrawContext context,
this.y, this.width, this.height, boolean hovering,
(hovering || selected ? hoverColor : color) | MathHelper.ceil(this.alpha * 255.0F) << 24); int mouseX,
int mouseY
) {
context.drawGuiTexture(
RenderLayer::getGuiTextured,
sprite,
this.x,
this.y,
this.width,
this.height,
(hovering || selected ? hoverColor : color) |
(MathHelper.ceil(this.alpha * 255.0F) << 24)
);
} }
@Override @Override
@@ -1,13 +1,14 @@
package org.saturnclient.ui.widgets; package org.saturnclient.ui.widgets;
import org.saturnclient.ui.SaturnWidget;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.ColorHelper; import net.minecraft.util.math.ColorHelper;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnWidget;
public class SaturnImage extends SaturnWidget { public class SaturnImage extends SaturnWidget {
private final Identifier sprite; private final Identifier sprite;
public SaturnImage(Identifier sprite) { public SaturnImage(Identifier sprite) {
@@ -15,8 +16,24 @@ public class SaturnImage extends SaturnWidget {
} }
@Override @Override
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { public void render(
context.drawTexture(RenderLayer::getGuiTextured, sprite, x, y, 0, 0, width, height, width, DrawContext context,
height, ColorHelper.getWhite(alpha)); boolean hovering,
int mouseX,
int mouseY
) {
context.drawTexture(
RenderLayer::getGuiTextured,
sprite,
x,
y,
0,
0,
width,
height,
width,
height,
ColorHelper.getWhite(alpha)
);
} }
} }
@@ -1,42 +1,68 @@
package org.saturnclient.ui.widgets; package org.saturnclient.ui.widgets;
import java.util.function.Consumer; import java.util.function.Consumer;
import org.saturnclient.saturnclient.SaturnClient;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.ColorHelper; import net.minecraft.util.math.ColorHelper;
import org.saturnclient.saturnclient.SaturnClient;
public class SaturnImageButton extends SaturnButton { public class SaturnImageButton extends SaturnButton {
public Identifier sprite; public Identifier sprite;
public int imageWidth; public int imageWidth;
public int imageHeight; public int imageHeight;
public Consumer<SaturnImageButton> onPress; public Consumer<SaturnImageButton> onPress;
public SaturnImageButton(Identifier sprite, int imageWidth, int imageHeight, Consumer<SaturnImageButton> onPress) { public SaturnImageButton(
super("", (b) -> { Identifier sprite,
}); int imageWidth,
int imageHeight,
Consumer<SaturnImageButton> onPress
) {
super("", b -> {});
this.sprite = sprite; this.sprite = sprite;
this.imageWidth = imageWidth; this.imageWidth = imageWidth;
this.imageHeight = imageHeight; this.imageHeight = imageHeight;
this.onPress = onPress; this.onPress = onPress;
} }
public SaturnImageButton(Identifier sprite, int imageWidth, int imageHeight, Runnable onPress) { public SaturnImageButton(
this(sprite, imageWidth, imageHeight, (b) -> { Identifier sprite,
int imageWidth,
int imageHeight,
Runnable onPress
) {
this(sprite, imageWidth, imageHeight, b -> {
onPress.run(); onPress.run();
}); });
} }
@Override @Override
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
super.render(context, hovering, mouseX, mouseY); super.render(context, hovering, mouseX, mouseY);
int hoverColor = ((int) (alpha * 255) << 24) | (SaturnClient.COLOR & 0x00FFFFFF); int hoverColor =
((int) (alpha * 255) << 24) | (SaturnClient.COLOR & 0x00FFFFFF);
context.drawTexture(RenderLayer::getGuiTextured, sprite, (x + (width - imageWidth) / 2), context.drawTexture(
(y + (height - imageHeight) / 2), 0, 0, imageWidth, imageHeight, imageWidth, RenderLayer::getGuiTextured,
imageHeight, hovering ? hoverColor : ColorHelper.getWhite(alpha)); sprite,
(x + (width - imageWidth) / 2),
(y + (height - imageHeight) / 2),
0,
0,
imageWidth,
imageHeight,
imageWidth,
imageHeight,
hovering ? hoverColor : SaturnClient.getWhite(alpha)
);
} }
@Override @Override
@@ -1,24 +1,32 @@
package org.saturnclient.ui.widgets; package org.saturnclient.ui.widgets;
import org.lwjgl.glfw.GLFW;
import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.SaturnWidget;
import org.saturnclient.ui.Textures;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer; import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.math.ColorHelper; import net.minecraft.util.math.ColorHelper;
import org.lwjgl.glfw.GLFW;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.SaturnWidget;
import org.saturnclient.ui.Textures;
public class SaturnInputBox extends SaturnWidget { public class SaturnInputBox extends SaturnWidget {
public String text = ""; public String text = "";
public String placeholder = ""; public String placeholder = "";
public int cursorPosition = 0; public int cursorPosition = 0;
public boolean focused = false; public boolean focused = false;
private TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; private TextRenderer textRenderer = MinecraftClient.getInstance()
.textRenderer;
public SaturnInputBox(String placeholder, int x, int y, int width, int height) { public SaturnInputBox(
String placeholder,
int x,
int y,
int width,
int height
) {
this.x = x; this.x = x;
this.y = y; this.y = y;
this.width = width; this.width = width;
@@ -34,8 +42,10 @@ public class SaturnInputBox extends SaturnWidget {
@Override @Override
public void charTyped(char chr) { public void charTyped(char chr) {
if (focused) { if (focused) {
text = text.substring(0, cursorPosition) + chr text =
+ text.substring(cursorPosition); text.substring(0, cursorPosition) +
chr +
text.substring(cursorPosition);
cursorPosition++; cursorPosition++;
} }
@@ -46,7 +56,9 @@ public class SaturnInputBox extends SaturnWidget {
if (focused) { if (focused) {
if (keyCode == GLFW.GLFW_KEY_BACKSPACE) { if (keyCode == GLFW.GLFW_KEY_BACKSPACE) {
if (cursorPosition > 0) { if (cursorPosition > 0) {
text = text.substring(0, cursorPosition - 1) + text.substring(cursorPosition); text =
text.substring(0, cursorPosition - 1) +
text.substring(cursorPosition);
cursorPosition--; cursorPosition--;
} }
} else if (keyCode == GLFW.GLFW_KEY_LEFT) { } else if (keyCode == GLFW.GLFW_KEY_LEFT) {
@@ -62,22 +74,51 @@ public class SaturnInputBox extends SaturnWidget {
} }
@Override @Override
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { public void render(
context.drawGuiTexture(RenderLayer::getGuiTextured, Textures.BUTTON, this.x, DrawContext context,
this.y, this.width, this.height, ColorHelper.getWhite(this.alpha)); boolean hovering,
int mouseX,
int mouseY
) {
context.drawGuiTexture(
RenderLayer::getGuiTextured,
Textures.BUTTON,
this.x,
this.y,
this.width,
this.height,
SaturnClient.getWhite(this.alpha)
);
int scrollOffset = getScrollOffset(); int scrollOffset = getScrollOffset();
String visibleText = text.substring(scrollOffset); String visibleText = text.substring(scrollOffset);
int textColor = focused ? 0xFFFFFF : 0xAAAAAA; int textColor = focused ? 0xFFFFFF : 0xAAAAAA;
context.drawText(textRenderer, context.drawText(
SaturnUi.text(visibleText), x + 5, textRenderer,
y + 5, textColor, false); SaturnUi.text(visibleText),
x + 5,
y + 5,
textColor,
false
);
if (focused) { if (focused) {
int cursorX = x + 5 int cursorX =
+ textRenderer.getWidth(SaturnUi.text(visibleText.substring(0, cursorPosition - scrollOffset))); x +
context.fill(cursorX, y + 3, cursorX + 1, y + height - 3, 0xFFFFFFFF); 5 +
textRenderer.getWidth(
SaturnUi.text(
visibleText.substring(0, cursorPosition - scrollOffset)
)
);
context.fill(
cursorX,
y + 3,
cursorX + 1,
y + height - 3,
0xFFFFFFFF
);
} }
} }
@@ -94,11 +135,19 @@ public class SaturnInputBox extends SaturnWidget {
int offset = 0; int offset = 0;
if (cursorPosition == text.length()) { if (cursorPosition == text.length()) {
while (textRenderer.getWidth(SaturnUi.text(text.substring(offset))) > width) { while (
textRenderer.getWidth(SaturnUi.text(text.substring(offset))) >
width
) {
offset++; offset++;
} }
} else { } else {
while (textRenderer.getWidth(SaturnUi.text(text.substring(offset, cursorPosition))) > width) { while (
textRenderer.getWidth(
SaturnUi.text(text.substring(offset, cursorPosition))
) >
width
) {
offset++; offset++;
} }
} }
@@ -1,13 +1,14 @@
package org.saturnclient.ui.widgets; package org.saturnclient.ui.widgets;
import org.saturnclient.ui.SaturnWidget;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.ColorHelper; import net.minecraft.util.math.ColorHelper;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnWidget;
public class SaturnSprite extends SaturnWidget { public class SaturnSprite extends SaturnWidget {
private final Identifier sprite; private final Identifier sprite;
public SaturnSprite(Identifier sprite) { public SaturnSprite(Identifier sprite) {
@@ -15,8 +16,20 @@ public class SaturnSprite extends SaturnWidget {
} }
@Override @Override
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { public void render(
context.drawGuiTexture(RenderLayer::getGuiTextured, sprite, this.x, DrawContext context,
this.y, this.width, this.height, ColorHelper.getWhite(this.alpha)); boolean hovering,
int mouseX,
int mouseY
) {
context.drawGuiTexture(
RenderLayer::getGuiTextured,
sprite,
this.x,
this.y,
this.width,
this.height,
ColorHelper.getWhite(this.alpha)
);
} }
} }
@@ -1,12 +1,13 @@
package org.saturnclient.ui.widgets; package org.saturnclient.ui.widgets;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.util.math.ColorHelper;
import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnUi; import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.SaturnWidget; import org.saturnclient.ui.SaturnWidget;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.util.math.ColorHelper;
public class SaturnText extends SaturnWidget { public class SaturnText extends SaturnWidget {
private String text; private String text;
public SaturnText(String text) { public SaturnText(String text) {
@@ -20,9 +21,19 @@ public class SaturnText extends SaturnWidget {
} }
@Override @Override
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) { public void render(
context.drawText(SaturnClient.textRenderer, DrawContext context,
SaturnUi.text(text), x, y, boolean hovering,
ColorHelper.getWhite(alpha), false); int mouseX,
int mouseY
) {
context.drawText(
SaturnClient.textRenderer,
SaturnUi.text(text),
x,
y,
SaturnClient.getWhite(alpha),
false
);
} }
} }