animations and added string configs

This commit is contained in:
2025-03-26 16:11:51 +01:00
parent 1c849af6fc
commit 6fc49863e1
15 changed files with 289 additions and 146 deletions
@@ -9,6 +9,9 @@ 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.ui.SaturnAnimation;
import org.saturnclient.ui.animations.FadeIn;
import org.saturnclient.ui.animations.Slide;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -29,13 +32,18 @@ public class SaturnClient implements ModInitializer {
return ((int) (alpha * 255) << 24) | (NORMAL & 0x00FFFFFF); return ((int) (alpha * 255) << 24) | (NORMAL & 0x00FFFFFF);
} }
public static SaturnAnimation[] getAnimations() {
return new SaturnAnimation[] { new FadeIn(1), new Slide(3, 15) };
}
@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(_ -> ConfigManager.save() ClientLifecycleEvents.CLIENT_STOPPING.register(_o ->
ConfigManager.save()
); );
KeyInputHandler.register(); KeyInputHandler.register();
@@ -27,7 +27,7 @@ public class SaturnSocket {
@SuppressWarnings("resource") @SuppressWarnings("resource")
public static boolean authenticate() { public static boolean authenticate() {
// Register shutdown hook ONCE // Register shutdown hook ONCE
ClientLifecycleEvents.CLIENT_STOPPING.register(_ -> close()); ClientLifecycleEvents.CLIENT_STOPPING.register(_o -> close());
try { try {
MinecraftClient client = MinecraftClient.getInstance(); MinecraftClient client = MinecraftClient.getInstance();
@@ -4,8 +4,12 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive; import com.google.gson.JsonPrimitive;
public class Property<T> { public class Property<T> {
public enum PropertyType { public enum PropertyType {
BOOLEAN, INTEGER, FLOAT, STRING, UNKNOWN BOOLEAN,
INTEGER,
FLOAT,
STRING,
} }
public T value; public T value;
@@ -55,20 +59,16 @@ public class Property<T> {
if (value instanceof String) { if (value instanceof String) {
return PropertyType.STRING; return PropertyType.STRING;
} }
return PropertyType.UNKNOWN; return null;
} }
public boolean matchesJson(JsonElement element) { public boolean matchesJson(JsonElement element) {
if (element.isJsonPrimitive()) { if (element.isJsonPrimitive()) {
JsonPrimitive primitive = element.getAsJsonPrimitive(); JsonPrimitive primitive = element.getAsJsonPrimitive();
if (value instanceof Boolean && primitive.isBoolean()) if (value instanceof Boolean && primitive.isBoolean()) return true;
return true; if (value instanceof Integer && primitive.isNumber()) return true;
if (value instanceof Integer && primitive.isNumber()) if (value instanceof Float && primitive.isNumber()) return true;
return true; if (value instanceof String && primitive.isString()) return true;
if (value instanceof Float && primitive.isNumber())
return true;
if (value instanceof String && primitive.isString())
return true;
} }
return false; return false;
} }
@@ -1,11 +1,11 @@
package org.saturnclient.saturnclient.menus; package org.saturnclient.saturnclient.menus;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.auth.SaturnSocket; import org.saturnclient.saturnclient.auth.SaturnSocket;
import org.saturnclient.saturnclient.cloaks.Cloaks; import org.saturnclient.saturnclient.cloaks.Cloaks;
import org.saturnclient.ui.SaturnUi; import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.Textures; import org.saturnclient.ui.Textures;
import org.saturnclient.ui.animations.Slide;
import org.saturnclient.ui.widgets.SaturnClickableSprite; import org.saturnclient.ui.widgets.SaturnClickableSprite;
import org.saturnclient.ui.widgets.SaturnImage; import org.saturnclient.ui.widgets.SaturnImage;
import org.saturnclient.ui.widgets.SaturnScroll; import org.saturnclient.ui.widgets.SaturnScroll;
@@ -30,7 +30,7 @@ public class CloaksMenu extends SaturnUi {
.setY(rectY) .setY(rectY)
.setWidth(rectWidth) .setWidth(rectWidth)
.setHeight(rectHeight) .setHeight(rectHeight)
.setAnimations(new Slide(1, 10)) .setAnimations(SaturnClient.getAnimations())
); );
int tabsX = (width - 43) / 2; int tabsX = (width - 43) / 2;
@@ -42,7 +42,7 @@ public class CloaksMenu extends SaturnUi {
.setY(tabsY) .setY(tabsY)
.setWidth(43) .setWidth(43)
.setHeight(15) .setHeight(15)
.setAnimations(new Slide(1, 10)) .setAnimations(SaturnClient.getAnimations())
); );
int cloakWidth = 32; int cloakWidth = 32;
@@ -91,7 +91,7 @@ public class CloaksMenu extends SaturnUi {
.setY(rectY + 10) .setY(rectY + 10)
.setWidth(rectWidth - 17) .setWidth(rectWidth - 17)
.setHeight(rectHeight - 10) .setHeight(rectHeight - 10)
.setAnimations(new Slide(1, 10)) .setAnimations(SaturnClient.getAnimations())
); );
super.init(); super.init();
@@ -2,11 +2,11 @@ package org.saturnclient.saturnclient.menus;
import java.util.Map; import java.util.Map;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.config.ConfigManager; import org.saturnclient.saturnclient.config.ConfigManager;
import org.saturnclient.saturnclient.config.Property; import org.saturnclient.saturnclient.config.Property;
import org.saturnclient.ui.SaturnUi; import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.Textures; import org.saturnclient.ui.Textures;
import org.saturnclient.ui.animations.Slide;
import org.saturnclient.ui.components.SaturnFloat; import org.saturnclient.ui.components.SaturnFloat;
import org.saturnclient.ui.components.SaturnInteger; import org.saturnclient.ui.components.SaturnInteger;
import org.saturnclient.ui.components.SaturnString; import org.saturnclient.ui.components.SaturnString;
@@ -38,7 +38,7 @@ public class ConfigEditor extends SaturnUi {
.setY(rectY) .setY(rectY)
.setWidth(rectWidth) .setWidth(rectWidth)
.setHeight(rectHeight) .setHeight(rectHeight)
.setAnimations(new Slide(1, 10)) .setAnimations(SaturnClient.getAnimations())
); );
int tabsX = (width - 43) / 2; int tabsX = (width - 43) / 2;
@@ -50,7 +50,7 @@ public class ConfigEditor extends SaturnUi {
.setY(tabsY) .setY(tabsY)
.setWidth(43) .setWidth(43)
.setHeight(15) .setHeight(15)
.setAnimations(new Slide(1, 10)) .setAnimations(SaturnClient.getAnimations())
); );
SaturnScroll configScroll = new SaturnScroll(); SaturnScroll configScroll = new SaturnScroll();
@@ -170,6 +170,7 @@ public class ConfigEditor extends SaturnUi {
.setY(rectY + 10) .setY(rectY + 10)
.setWidth(rectWidth - 17) .setWidth(rectWidth - 17)
.setHeight(rectHeight - 10) .setHeight(rectHeight - 10)
.setAnimations(SaturnClient.getAnimations())
); );
super.init(); super.init();
@@ -1,17 +1,18 @@
package org.saturnclient.saturnclient.menus; package org.saturnclient.saturnclient.menus;
import net.minecraft.client.MinecraftClient;
import net.minecraft.text.Text;
import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.SaturnUi; import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.Textures; import org.saturnclient.ui.Textures;
import org.saturnclient.ui.animations.FadeIn; import org.saturnclient.ui.animations.FadeIn;
import org.saturnclient.ui.animations.Slide; import org.saturnclient.ui.animations.Slide;
import org.saturnclient.ui.widgets.SaturnButton; import org.saturnclient.ui.widgets.SaturnButton;
import org.saturnclient.ui.widgets.SaturnImageButton;
import org.saturnclient.ui.widgets.SaturnImage; import org.saturnclient.ui.widgets.SaturnImage;
import net.minecraft.client.MinecraftClient; import org.saturnclient.ui.widgets.SaturnImageButton;
import net.minecraft.text.Text;
public class MainMenu extends SaturnUi { public class MainMenu extends SaturnUi {
public MainMenu() { public MainMenu() {
super(Text.literal("Saturn Client")); super(Text.literal("Saturn Client"));
} }
@@ -26,32 +27,35 @@ public class MainMenu extends SaturnUi {
draw( draw(
new SaturnButton("Mods", () -> { new SaturnButton("Mods", () -> {
client.setScreen(new ModMenu()); client.setScreen(new ModMenu());
}).setX((width - buttonWidth) / 2).setY((height - buttonHeight) / })
2).setWidth(buttonWidth) .setX((width - buttonWidth) / 2)
.setY((height - buttonHeight) / 2)
.setWidth(buttonWidth)
.setHeight(buttonHeight) .setHeight(buttonHeight)
.setAnimations(new FadeIn(2))); .setAnimations(new FadeIn(2))
);
draw( draw(
new SaturnImageButton(Textures.HUD_ICON, 14, 14, new SaturnImageButton(Textures.HUD_ICON, 14, 14, () -> {
() -> {
client.setScreen(new HudEditor()); client.setScreen(new HudEditor());
}) })
.setX((width - buttonWidth - (buttonHeight * 2) - 6) / 2) .setX((width - buttonWidth - (buttonHeight * 2) - 6) / 2)
.setY((height - buttonHeight) / 2) .setY((height - buttonHeight) / 2)
.setWidth(buttonHeight) .setWidth(buttonHeight)
.setHeight(buttonHeight) .setHeight(buttonHeight)
.setAnimations(new FadeIn(2))); .setAnimations(new FadeIn(2))
);
draw( draw(
new SaturnImageButton(Textures.COSMETICS, 14, 14, new SaturnImageButton(Textures.COSMETICS, 14, 14, () -> {
() -> {
client.setScreen(new CloaksMenu()); client.setScreen(new CloaksMenu());
}) })
.setX((width / 2) + (buttonWidth / 2) + 3) .setX((width / 2) + (buttonWidth / 2) + 3)
.setY((height - buttonHeight) / 2) .setY((height - buttonHeight) / 2)
.setWidth(buttonHeight) .setWidth(buttonHeight)
.setHeight(buttonHeight) .setHeight(buttonHeight)
.setAnimations(new FadeIn(2))); .setAnimations(new FadeIn(2))
);
int logoSize = 49; int logoSize = 49;
@@ -61,7 +65,8 @@ public class MainMenu extends SaturnUi {
.setY((height - 8) / 2 - 23) .setY((height - 8) / 2 - 23)
.setWidth(logoSize) .setWidth(logoSize)
.setHeight(8) .setHeight(8)
.setAnimations(new FadeIn(2))); .setAnimations(new FadeIn(2))
);
draw( draw(
new SaturnImage(Textures.LOGO) new SaturnImage(Textures.LOGO)
@@ -69,7 +74,8 @@ public class MainMenu extends SaturnUi {
.setY(height / 2 - logoSize - 24) .setY(height / 2 - logoSize - 24)
.setWidth(logoSize) .setWidth(logoSize)
.setHeight(logoSize) .setHeight(logoSize)
.setAnimations(new Slide(2, 14))); .setAnimations(new Slide(2, 14))
);
super.init(); super.init();
} }
@@ -7,8 +7,6 @@ import org.saturnclient.saturnmods.ModManager;
import org.saturnclient.saturnmods.SaturnMod; import org.saturnclient.saturnmods.SaturnMod;
import org.saturnclient.ui.SaturnUi; import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.Textures; import org.saturnclient.ui.Textures;
import org.saturnclient.ui.animations.FadeIn;
import org.saturnclient.ui.animations.Slide;
import org.saturnclient.ui.components.SaturnModComp; import org.saturnclient.ui.components.SaturnModComp;
import org.saturnclient.ui.widgets.SaturnClickableImage; import org.saturnclient.ui.widgets.SaturnClickableImage;
import org.saturnclient.ui.widgets.SaturnScroll; import org.saturnclient.ui.widgets.SaturnScroll;
@@ -33,7 +31,7 @@ public class ModMenu extends SaturnUi {
.setY(modsY) .setY(modsY)
.setWidth(rectWidth) .setWidth(rectWidth)
.setHeight(rectHeight) .setHeight(rectHeight)
.setAnimations(new Slide(1, 10)) .setAnimations(SaturnClient.getAnimations())
); );
int tabsX = (width - 43) / 2; int tabsX = (width - 43) / 2;
@@ -45,7 +43,7 @@ public class ModMenu extends SaturnUi {
.setY(tabsY) .setY(tabsY)
.setWidth(43) .setWidth(43)
.setHeight(15) .setHeight(15)
.setAnimations(new Slide(1, 10)) .setAnimations(SaturnClient.getAnimations())
); );
int tabSize = 9; int tabSize = 9;
@@ -58,8 +56,7 @@ public class ModMenu extends SaturnUi {
.setY(tabsY + 3) .setY(tabsY + 3)
.setWidth(tabSize) .setWidth(tabSize)
.setHeight(tabSize) .setHeight(tabSize)
.setAnimations(new FadeIn(2)) .setAnimations(SaturnClient.getAnimations())
.setAnimations(new Slide(1, 10))
); );
draw( draw(
@@ -70,8 +67,7 @@ public class ModMenu extends SaturnUi {
.setY(tabsY + 3) .setY(tabsY + 3)
.setWidth(tabSize) .setWidth(tabSize)
.setHeight(tabSize) .setHeight(tabSize)
.setAnimations(new FadeIn(2)) .setAnimations(SaturnClient.getAnimations())
.setAnimations(new Slide(1, 10))
); );
draw( draw(
@@ -82,8 +78,7 @@ public class ModMenu extends SaturnUi {
.setY(tabsY + 3) .setY(tabsY + 3)
.setWidth(tabSize) .setWidth(tabSize)
.setHeight(tabSize) .setHeight(tabSize)
.setAnimations(new FadeIn(2)) .setAnimations(SaturnClient.getAnimations())
.setAnimations(new Slide(1, 10))
); );
int modX = 0; int modX = 0;
@@ -119,7 +114,7 @@ public class ModMenu extends SaturnUi {
.setY(modsY + 10) .setY(modsY + 10)
.setWidth(rectWidth - 17) .setWidth(rectWidth - 17)
.setHeight(rectHeight - 20) .setHeight(rectHeight - 20)
.setAnimations(new Slide(1, 10)) .setAnimations(SaturnClient.getAnimations())
); );
super.init(); super.init();
@@ -11,49 +11,10 @@ import org.saturnclient.saturnmods.mods.Coordinates;
public class ModManager { public class ModManager {
public static SaturnMod[] MODS = { public static SaturnMod[] MODS = { new Coordinates(), new ArmorDisplay() };
new Coordinates(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new ArmorDisplay(),
new Coordinates(),
};
public static void init() { public static void init() {
HudRenderCallback.EVENT.register((context, _) -> { HudRenderCallback.EVENT.register((context, _o) -> {
MinecraftClient client = MinecraftClient.getInstance(); MinecraftClient client = MinecraftClient.getInstance();
TextRenderer textRenderer = client.textRenderer; TextRenderer textRenderer = client.textRenderer;
+20 -18
View File
@@ -63,11 +63,13 @@ public class SaturnUi extends Screen {
for (SaturnWidget widget : new ArrayList<>(widgets)) { for (SaturnWidget widget : new ArrayList<>(widgets)) {
if (!widget.visible) continue; if (!widget.visible) continue;
double adjustedMouseX = mouseX - widget.x;
double adjustedMouseY = mouseY - widget.y;
boolean isMouseInside = boolean isMouseInside =
widget.x < mouseX && adjustedMouseX >= 0 &&
widget.x + widget.width > mouseX && adjustedMouseX <= (widget.width * widget.scale) &&
widget.y < mouseY && adjustedMouseY >= 0 &&
widget.y + widget.height > mouseY; adjustedMouseY <= (widget.height * widget.scale);
MatrixStack matrices = context.getMatrices(); MatrixStack matrices = context.getMatrices();
matrices.push(); matrices.push();
@@ -76,8 +78,8 @@ public class SaturnUi extends Screen {
widget.render( widget.render(
context, context,
isMouseInside, isMouseInside,
mouseX - widget.x, (int) (adjustedMouseX / widget.scale),
mouseY - widget.y (int) (adjustedMouseY / widget.scale)
); );
matrices.pop(); matrices.pop();
} }
@@ -90,13 +92,13 @@ public class SaturnUi extends Screen {
widget.focused = false; widget.focused = false;
if (!widget.visible) continue; if (!widget.visible) continue;
double adjustedMouseX = (mouseX - widget.x) / widget.scale; double adjustedMouseX = mouseX - widget.x;
double adjustedMouseY = (mouseY - widget.y) / widget.scale; double adjustedMouseY = mouseY - widget.y;
boolean isMouseInside = boolean isMouseInside =
adjustedMouseX >= 0 && adjustedMouseX >= 0 &&
adjustedMouseX <= widget.width && adjustedMouseX <= (widget.width * widget.scale) &&
adjustedMouseY >= 0 && adjustedMouseY >= 0 &&
adjustedMouseY <= widget.height; adjustedMouseY <= (widget.height * widget.scale);
SaturnClient.LOGGER.info( SaturnClient.LOGGER.info(
"CLick mouse X: " + "CLick mouse X: " +
@@ -108,8 +110,8 @@ public class SaturnUi extends Screen {
if (isMouseInside) { if (isMouseInside) {
widget.focused = true; widget.focused = true;
widget.click( widget.click(
((int) mouseX) - widget.x, (int) (adjustedMouseX / widget.scale),
((int) mouseY) - widget.y (int) (adjustedMouseY / widget.scale)
); );
} }
} }
@@ -141,18 +143,18 @@ public class SaturnUi extends Screen {
double verticalAmount double verticalAmount
) { ) {
for (SaturnWidget widget : new ArrayList<>(widgets)) { for (SaturnWidget widget : new ArrayList<>(widgets)) {
double adjustedMouseX = (mouseX - widget.x) / widget.scale; double adjustedMouseX = mouseX - widget.x;
double adjustedMouseY = (mouseY - widget.y) / widget.scale; double adjustedMouseY = mouseY - widget.y;
boolean isMouseInside = boolean isMouseInside =
adjustedMouseX >= 0 && adjustedMouseX >= 0 &&
adjustedMouseX <= widget.width && adjustedMouseX <= (widget.width * widget.scale) &&
adjustedMouseY >= 0 && adjustedMouseY >= 0 &&
adjustedMouseY <= widget.height; adjustedMouseY <= (widget.height * widget.scale);
if (isMouseInside) { if (isMouseInside) {
widget.mouseScrolled( widget.mouseScrolled(
((int) mouseX) - widget.x, (int) (adjustedMouseX / widget.scale),
((int) mouseY) - widget.y, (int) (adjustedMouseY / widget.scale),
horizontalAmount, horizontalAmount,
verticalAmount verticalAmount
); );
@@ -40,7 +40,7 @@ public class SaturnFloat extends SaturnWidget {
for (int i = 0; i < visibleText.length(); i++) { for (int i = 0; i < visibleText.length(); i++) {
textWidth = textRenderer.getWidth(visibleText.substring(0, i + 1)); textWidth = textRenderer.getWidth(visibleText.substring(0, i + 1));
if (textWidth > (mouseX - x)) { if (textWidth > mouseX) {
break; break;
} }
@@ -0,0 +1,168 @@
package org.saturnclient.ui.components;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import org.lwjgl.glfw.GLFW;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.config.Property;
import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.SaturnWidget;
import org.saturnclient.ui.Textures;
public class SaturnString extends SaturnWidget {
public Property<String> prop;
public int cursorPosition = 0;
private TextRenderer textRenderer = MinecraftClient.getInstance()
.textRenderer;
public SaturnString(Property<String> prop, int x, int y, int width) {
this.x = x;
this.y = y;
this.width = width;
this.prop = prop;
this.height = textRenderer.fontHeight + 4;
this.scale = 0.8f;
}
@Override
public void click(int mouseX, int mouseY) {
int scrollOffset = getScrollOffset();
String visibleText = prop.value.substring(scrollOffset);
int newCursorPos = scrollOffset;
int textWidth = 0;
for (int i = 0; i < visibleText.length(); i++) {
textWidth = textRenderer.getWidth(visibleText.substring(0, i + 1));
if (textWidth > mouseX) {
break;
}
newCursorPos++;
}
cursorPosition = newCursorPos;
}
@Override
public void charTyped(char chr) {
prop.value =
prop.value.substring(0, cursorPosition) +
chr +
prop.value.substring(cursorPosition);
cursorPosition++;
}
@Override
public void keyPressed(int keyCode, int scanCode, int modifiers) {
if (keyCode == GLFW.GLFW_KEY_BACKSPACE) {
if (cursorPosition > 0) {
prop.value =
prop.value.substring(0, cursorPosition - 1) +
prop.value.substring(cursorPosition);
cursorPosition--;
}
} else if (keyCode == GLFW.GLFW_KEY_LEFT) {
if (cursorPosition > 0) {
cursorPosition--;
}
} else if (keyCode == GLFW.GLFW_KEY_RIGHT) {
if (cursorPosition < prop.value.length()) {
cursorPosition++;
}
}
}
@Override
public void render(
DrawContext context,
boolean hovering,
int mouseX,
int mouseY
) {
context.drawGuiTexture(
RenderLayer::getGuiTextured,
Textures.BUTTON_BORDER,
0,
0,
this.width,
this.height,
focused ? SaturnClient.COLOR : SaturnClient.getWhite(this.alpha)
);
int scrollOffset = getScrollOffset();
String visibleText = getVisibleText(scrollOffset);
int textColor = focused ? 0xFFFFFF : 0xAAAAAA;
context.drawText(
textRenderer,
SaturnUi.text(visibleText),
2,
2,
textColor,
false
);
if (focused) {
int cursorX =
2 +
textRenderer.getWidth(
SaturnUi.text(
visibleText.substring(0, cursorPosition - scrollOffset)
)
);
context.fill(
cursorX,
2,
cursorX + 1,
textRenderer.fontHeight + 3,
0xFFFFFFFF
);
}
}
public void clearText() {
prop.value = "";
cursorPosition = 1;
}
private int getScrollOffset() {
if (prop.value.isEmpty()) {
return 0;
}
int offset = 0;
int maxWidth = width - 4; // Available width for prop.value
while (offset < cursorPosition) { // Ensure cursor remains visible
String visibleText = prop.value.substring(offset, cursorPosition);
if (textRenderer.getWidth(SaturnUi.text(visibleText)) > maxWidth) {
offset++;
} else {
break;
}
}
return offset;
}
private String getVisibleText(int scrollOffset) {
String visibleText = prop.value.substring(scrollOffset);
// Ensure prop.value does not overflow past the available width
for (int i = 1; i <= visibleText.length(); i++) {
if (
textRenderer.getWidth(
SaturnUi.text(visibleText.substring(0, i))
) >
width - 4
) {
return visibleText.substring(0, i - 1); // Trim overflow
}
}
return visibleText;
}
}
@@ -25,7 +25,7 @@ public class SaturnClickableImage extends SaturnWidget {
} }
public SaturnClickableImage(Identifier texture, Runnable onPress) { public SaturnClickableImage(Identifier texture, Runnable onPress) {
this(texture, _ -> { this(texture, _o -> {
onPress.run(); onPress.run();
}); });
} }
@@ -25,7 +25,7 @@ public class SaturnClickableSprite extends SaturnWidget {
} }
public SaturnClickableSprite(Identifier sprite, Runnable onPress) { public SaturnClickableSprite(Identifier sprite, Runnable onPress) {
this(sprite, _ -> { this(sprite, _o -> {
onPress.run(); onPress.run();
}); });
} }
@@ -19,7 +19,7 @@ public class SaturnImageButton extends SaturnButton {
int imageHeight, int imageHeight,
Consumer<SaturnImageButton> onPress Consumer<SaturnImageButton> onPress
) { ) {
super("", _ -> {}); super("", _o -> {});
this.sprite = sprite; this.sprite = sprite;
this.imageWidth = imageWidth; this.imageWidth = imageWidth;
this.imageHeight = imageHeight; this.imageHeight = imageHeight;
@@ -32,7 +32,7 @@ public class SaturnImageButton extends SaturnButton {
int imageHeight, int imageHeight,
Runnable onPress Runnable onPress
) { ) {
this(sprite, imageWidth, imageHeight, _ -> { this(sprite, imageWidth, imageHeight, _o -> {
onPress.run(); onPress.run();
}); });
} }
@@ -42,13 +42,13 @@ public class SaturnScroll extends SaturnWidget {
for (SaturnWidget widget : children) { for (SaturnWidget widget : children) {
if (!widget.visible) continue; if (!widget.visible) continue;
double adjustedMouseX = (mouseX - widget.x) * scale; double adjustedMouseX = (mouseX - widget.x);
double adjustedMouseY = (mouseY - widget.y + scroll) * scale; double adjustedMouseY = (mouseY - widget.y + scroll);
boolean isMouseInside = boolean isMouseInside =
adjustedMouseX >= 0 && adjustedMouseX >= 0 &&
adjustedMouseX <= widget.width && adjustedMouseX <= (widget.width * widget.scale) &&
adjustedMouseY >= 0 && adjustedMouseY >= 0 &&
adjustedMouseY <= widget.height; adjustedMouseY <= (widget.height * widget.scale);
if ( if (
widget.y - scroll < height && widget.y + widget.height > scroll widget.y - scroll < height && widget.y + widget.height > scroll
@@ -61,8 +61,8 @@ public class SaturnScroll extends SaturnWidget {
widget.render( widget.render(
context, context,
isMouseInside, isMouseInside,
(int) adjustedMouseX, (int) (adjustedMouseX / widget.scale),
(int) adjustedMouseY (int) (adjustedMouseY / widget.scale)
); );
matrices.pop(); matrices.pop();
} }
@@ -126,18 +126,20 @@ public class SaturnScroll extends SaturnWidget {
continue; continue;
} }
double adjustedMouseX = (mouseX - widget.x) * scale; double adjustedMouseX = (mouseX - widget.x);
double adjustedMouseY = double adjustedMouseY = (mouseY - (widget.y - scroll));
(mouseY - (widget.y - scroll)) * widget.scale;
boolean isMouseInside = boolean isMouseInside =
adjustedMouseX >= 0 && adjustedMouseX >= 0 &&
adjustedMouseX <= widget.width && adjustedMouseX <= (widget.width * widget.scale) &&
adjustedMouseY >= 0 && adjustedMouseY >= 0 &&
adjustedMouseY <= widget.height; adjustedMouseY <= (widget.height * widget.scale);
if (isMouseInside) { if (isMouseInside) {
widget.focused = true; widget.focused = true;
widget.click((int) adjustedMouseX, (int) adjustedMouseY); widget.click(
(int) (adjustedMouseX / widget.scale),
(int) (adjustedMouseY / widget.scale)
);
} }
} }
} }