animations and added string configs
This commit is contained in:
@@ -9,6 +9,9 @@ import org.saturnclient.saturnclient.cloaks.Cloaks;
|
||||
import org.saturnclient.saturnclient.config.ConfigManager;
|
||||
import org.saturnclient.saturnclient.event.KeyInputHandler;
|
||||
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.LoggerFactory;
|
||||
|
||||
@@ -29,13 +32,18 @@ public class SaturnClient implements ModInitializer {
|
||||
return ((int) (alpha * 255) << 24) | (NORMAL & 0x00FFFFFF);
|
||||
}
|
||||
|
||||
public static SaturnAnimation[] getAnimations() {
|
||||
return new SaturnAnimation[] { new FadeIn(1), new Slide(3, 15) };
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitialize() {
|
||||
LOGGER.info("Initializing " + MOD_ID);
|
||||
ModManager.init();
|
||||
ConfigManager.load();
|
||||
|
||||
ClientLifecycleEvents.CLIENT_STOPPING.register(_ -> ConfigManager.save()
|
||||
ClientLifecycleEvents.CLIENT_STOPPING.register(_o ->
|
||||
ConfigManager.save()
|
||||
);
|
||||
|
||||
KeyInputHandler.register();
|
||||
|
||||
@@ -27,7 +27,7 @@ public class SaturnSocket {
|
||||
@SuppressWarnings("resource")
|
||||
public static boolean authenticate() {
|
||||
// Register shutdown hook ONCE
|
||||
ClientLifecycleEvents.CLIENT_STOPPING.register(_ -> close());
|
||||
ClientLifecycleEvents.CLIENT_STOPPING.register(_o -> close());
|
||||
|
||||
try {
|
||||
MinecraftClient client = MinecraftClient.getInstance();
|
||||
|
||||
@@ -4,8 +4,12 @@ import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
|
||||
public class Property<T> {
|
||||
|
||||
public enum PropertyType {
|
||||
BOOLEAN, INTEGER, FLOAT, STRING, UNKNOWN
|
||||
BOOLEAN,
|
||||
INTEGER,
|
||||
FLOAT,
|
||||
STRING,
|
||||
}
|
||||
|
||||
public T value;
|
||||
@@ -55,20 +59,16 @@ public class Property<T> {
|
||||
if (value instanceof String) {
|
||||
return PropertyType.STRING;
|
||||
}
|
||||
return PropertyType.UNKNOWN;
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean matchesJson(JsonElement element) {
|
||||
if (element.isJsonPrimitive()) {
|
||||
JsonPrimitive primitive = element.getAsJsonPrimitive();
|
||||
if (value instanceof Boolean && primitive.isBoolean())
|
||||
return true;
|
||||
if (value instanceof Integer && primitive.isNumber())
|
||||
return true;
|
||||
if (value instanceof Float && primitive.isNumber())
|
||||
return true;
|
||||
if (value instanceof String && primitive.isString())
|
||||
return true;
|
||||
if (value instanceof Boolean && primitive.isBoolean()) return true;
|
||||
if (value instanceof Integer && primitive.isNumber()) return true;
|
||||
if (value instanceof Float && primitive.isNumber()) return true;
|
||||
if (value instanceof String && primitive.isString()) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package org.saturnclient.saturnclient.menus;
|
||||
|
||||
import net.minecraft.text.Text;
|
||||
import org.saturnclient.saturnclient.SaturnClient;
|
||||
import org.saturnclient.saturnclient.auth.SaturnSocket;
|
||||
import org.saturnclient.saturnclient.cloaks.Cloaks;
|
||||
import org.saturnclient.ui.SaturnUi;
|
||||
import org.saturnclient.ui.Textures;
|
||||
import org.saturnclient.ui.animations.Slide;
|
||||
import org.saturnclient.ui.widgets.SaturnClickableSprite;
|
||||
import org.saturnclient.ui.widgets.SaturnImage;
|
||||
import org.saturnclient.ui.widgets.SaturnScroll;
|
||||
@@ -30,7 +30,7 @@ public class CloaksMenu extends SaturnUi {
|
||||
.setY(rectY)
|
||||
.setWidth(rectWidth)
|
||||
.setHeight(rectHeight)
|
||||
.setAnimations(new Slide(1, 10))
|
||||
.setAnimations(SaturnClient.getAnimations())
|
||||
);
|
||||
|
||||
int tabsX = (width - 43) / 2;
|
||||
@@ -42,7 +42,7 @@ public class CloaksMenu extends SaturnUi {
|
||||
.setY(tabsY)
|
||||
.setWidth(43)
|
||||
.setHeight(15)
|
||||
.setAnimations(new Slide(1, 10))
|
||||
.setAnimations(SaturnClient.getAnimations())
|
||||
);
|
||||
|
||||
int cloakWidth = 32;
|
||||
@@ -91,7 +91,7 @@ public class CloaksMenu extends SaturnUi {
|
||||
.setY(rectY + 10)
|
||||
.setWidth(rectWidth - 17)
|
||||
.setHeight(rectHeight - 10)
|
||||
.setAnimations(new Slide(1, 10))
|
||||
.setAnimations(SaturnClient.getAnimations())
|
||||
);
|
||||
|
||||
super.init();
|
||||
|
||||
@@ -2,11 +2,11 @@ package org.saturnclient.saturnclient.menus;
|
||||
|
||||
import java.util.Map;
|
||||
import net.minecraft.text.Text;
|
||||
import org.saturnclient.saturnclient.SaturnClient;
|
||||
import org.saturnclient.saturnclient.config.ConfigManager;
|
||||
import org.saturnclient.saturnclient.config.Property;
|
||||
import org.saturnclient.ui.SaturnUi;
|
||||
import org.saturnclient.ui.Textures;
|
||||
import org.saturnclient.ui.animations.Slide;
|
||||
import org.saturnclient.ui.components.SaturnFloat;
|
||||
import org.saturnclient.ui.components.SaturnInteger;
|
||||
import org.saturnclient.ui.components.SaturnString;
|
||||
@@ -38,7 +38,7 @@ public class ConfigEditor extends SaturnUi {
|
||||
.setY(rectY)
|
||||
.setWidth(rectWidth)
|
||||
.setHeight(rectHeight)
|
||||
.setAnimations(new Slide(1, 10))
|
||||
.setAnimations(SaturnClient.getAnimations())
|
||||
);
|
||||
|
||||
int tabsX = (width - 43) / 2;
|
||||
@@ -50,7 +50,7 @@ public class ConfigEditor extends SaturnUi {
|
||||
.setY(tabsY)
|
||||
.setWidth(43)
|
||||
.setHeight(15)
|
||||
.setAnimations(new Slide(1, 10))
|
||||
.setAnimations(SaturnClient.getAnimations())
|
||||
);
|
||||
|
||||
SaturnScroll configScroll = new SaturnScroll();
|
||||
@@ -170,6 +170,7 @@ public class ConfigEditor extends SaturnUi {
|
||||
.setY(rectY + 10)
|
||||
.setWidth(rectWidth - 17)
|
||||
.setHeight(rectHeight - 10)
|
||||
.setAnimations(SaturnClient.getAnimations())
|
||||
);
|
||||
|
||||
super.init();
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
package org.saturnclient.saturnclient.menus;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.text.Text;
|
||||
import org.saturnclient.saturnclient.SaturnClient;
|
||||
import org.saturnclient.ui.SaturnUi;
|
||||
import org.saturnclient.ui.Textures;
|
||||
import org.saturnclient.ui.animations.FadeIn;
|
||||
import org.saturnclient.ui.animations.Slide;
|
||||
import org.saturnclient.ui.widgets.SaturnButton;
|
||||
import org.saturnclient.ui.widgets.SaturnImageButton;
|
||||
import org.saturnclient.ui.widgets.SaturnImage;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.text.Text;
|
||||
import org.saturnclient.ui.widgets.SaturnImageButton;
|
||||
|
||||
public class MainMenu extends SaturnUi {
|
||||
|
||||
public MainMenu() {
|
||||
super(Text.literal("Saturn Client"));
|
||||
}
|
||||
@@ -24,52 +25,57 @@ public class MainMenu extends SaturnUi {
|
||||
int buttonHeight = 25;
|
||||
|
||||
draw(
|
||||
new SaturnButton("Mods", () -> {
|
||||
client.setScreen(new ModMenu());
|
||||
}).setX((width - buttonWidth) / 2).setY((height - buttonHeight) /
|
||||
2).setWidth(buttonWidth)
|
||||
.setHeight(buttonHeight)
|
||||
.setAnimations(new FadeIn(2)));
|
||||
new SaturnButton("Mods", () -> {
|
||||
client.setScreen(new ModMenu());
|
||||
})
|
||||
.setX((width - buttonWidth) / 2)
|
||||
.setY((height - buttonHeight) / 2)
|
||||
.setWidth(buttonWidth)
|
||||
.setHeight(buttonHeight)
|
||||
.setAnimations(new FadeIn(2))
|
||||
);
|
||||
|
||||
draw(
|
||||
new SaturnImageButton(Textures.HUD_ICON, 14, 14,
|
||||
() -> {
|
||||
client.setScreen(new HudEditor());
|
||||
})
|
||||
.setX((width - buttonWidth - (buttonHeight * 2) - 6) / 2)
|
||||
.setY((height - buttonHeight) / 2)
|
||||
.setWidth(buttonHeight)
|
||||
.setHeight(buttonHeight)
|
||||
.setAnimations(new FadeIn(2)));
|
||||
new SaturnImageButton(Textures.HUD_ICON, 14, 14, () -> {
|
||||
client.setScreen(new HudEditor());
|
||||
})
|
||||
.setX((width - buttonWidth - (buttonHeight * 2) - 6) / 2)
|
||||
.setY((height - buttonHeight) / 2)
|
||||
.setWidth(buttonHeight)
|
||||
.setHeight(buttonHeight)
|
||||
.setAnimations(new FadeIn(2))
|
||||
);
|
||||
|
||||
draw(
|
||||
new SaturnImageButton(Textures.COSMETICS, 14, 14,
|
||||
() -> {
|
||||
client.setScreen(new CloaksMenu());
|
||||
})
|
||||
.setX((width / 2) + (buttonWidth / 2) + 3)
|
||||
.setY((height - buttonHeight) / 2)
|
||||
.setWidth(buttonHeight)
|
||||
.setHeight(buttonHeight)
|
||||
.setAnimations(new FadeIn(2)));
|
||||
new SaturnImageButton(Textures.COSMETICS, 14, 14, () -> {
|
||||
client.setScreen(new CloaksMenu());
|
||||
})
|
||||
.setX((width / 2) + (buttonWidth / 2) + 3)
|
||||
.setY((height - buttonHeight) / 2)
|
||||
.setWidth(buttonHeight)
|
||||
.setHeight(buttonHeight)
|
||||
.setAnimations(new FadeIn(2))
|
||||
);
|
||||
|
||||
int logoSize = 49;
|
||||
|
||||
draw(
|
||||
new SaturnImage(Textures.LOGO_TEXT)
|
||||
.setX((width - logoSize) / 2)
|
||||
.setY((height - 8) / 2 - 23)
|
||||
.setWidth(logoSize)
|
||||
.setHeight(8)
|
||||
.setAnimations(new FadeIn(2)));
|
||||
new SaturnImage(Textures.LOGO_TEXT)
|
||||
.setX((width - logoSize) / 2)
|
||||
.setY((height - 8) / 2 - 23)
|
||||
.setWidth(logoSize)
|
||||
.setHeight(8)
|
||||
.setAnimations(new FadeIn(2))
|
||||
);
|
||||
|
||||
draw(
|
||||
new SaturnImage(Textures.LOGO)
|
||||
.setX((width - logoSize) / 2)
|
||||
.setY(height / 2 - logoSize - 24)
|
||||
.setWidth(logoSize)
|
||||
.setHeight(logoSize)
|
||||
.setAnimations(new Slide(2, 14)));
|
||||
new SaturnImage(Textures.LOGO)
|
||||
.setX((width - logoSize) / 2)
|
||||
.setY(height / 2 - logoSize - 24)
|
||||
.setWidth(logoSize)
|
||||
.setHeight(logoSize)
|
||||
.setAnimations(new Slide(2, 14))
|
||||
);
|
||||
|
||||
super.init();
|
||||
}
|
||||
|
||||
@@ -7,8 +7,6 @@ import org.saturnclient.saturnmods.ModManager;
|
||||
import org.saturnclient.saturnmods.SaturnMod;
|
||||
import org.saturnclient.ui.SaturnUi;
|
||||
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.widgets.SaturnClickableImage;
|
||||
import org.saturnclient.ui.widgets.SaturnScroll;
|
||||
@@ -33,7 +31,7 @@ public class ModMenu extends SaturnUi {
|
||||
.setY(modsY)
|
||||
.setWidth(rectWidth)
|
||||
.setHeight(rectHeight)
|
||||
.setAnimations(new Slide(1, 10))
|
||||
.setAnimations(SaturnClient.getAnimations())
|
||||
);
|
||||
|
||||
int tabsX = (width - 43) / 2;
|
||||
@@ -45,7 +43,7 @@ public class ModMenu extends SaturnUi {
|
||||
.setY(tabsY)
|
||||
.setWidth(43)
|
||||
.setHeight(15)
|
||||
.setAnimations(new Slide(1, 10))
|
||||
.setAnimations(SaturnClient.getAnimations())
|
||||
);
|
||||
|
||||
int tabSize = 9;
|
||||
@@ -58,8 +56,7 @@ public class ModMenu extends SaturnUi {
|
||||
.setY(tabsY + 3)
|
||||
.setWidth(tabSize)
|
||||
.setHeight(tabSize)
|
||||
.setAnimations(new FadeIn(2))
|
||||
.setAnimations(new Slide(1, 10))
|
||||
.setAnimations(SaturnClient.getAnimations())
|
||||
);
|
||||
|
||||
draw(
|
||||
@@ -70,8 +67,7 @@ public class ModMenu extends SaturnUi {
|
||||
.setY(tabsY + 3)
|
||||
.setWidth(tabSize)
|
||||
.setHeight(tabSize)
|
||||
.setAnimations(new FadeIn(2))
|
||||
.setAnimations(new Slide(1, 10))
|
||||
.setAnimations(SaturnClient.getAnimations())
|
||||
);
|
||||
|
||||
draw(
|
||||
@@ -82,8 +78,7 @@ public class ModMenu extends SaturnUi {
|
||||
.setY(tabsY + 3)
|
||||
.setWidth(tabSize)
|
||||
.setHeight(tabSize)
|
||||
.setAnimations(new FadeIn(2))
|
||||
.setAnimations(new Slide(1, 10))
|
||||
.setAnimations(SaturnClient.getAnimations())
|
||||
);
|
||||
|
||||
int modX = 0;
|
||||
@@ -119,7 +114,7 @@ public class ModMenu extends SaturnUi {
|
||||
.setY(modsY + 10)
|
||||
.setWidth(rectWidth - 17)
|
||||
.setHeight(rectHeight - 20)
|
||||
.setAnimations(new Slide(1, 10))
|
||||
.setAnimations(SaturnClient.getAnimations())
|
||||
);
|
||||
|
||||
super.init();
|
||||
|
||||
@@ -11,49 +11,10 @@ import org.saturnclient.saturnmods.mods.Coordinates;
|
||||
|
||||
public class ModManager {
|
||||
|
||||
public static SaturnMod[] MODS = {
|
||||
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 SaturnMod[] MODS = { new Coordinates(), new ArmorDisplay() };
|
||||
|
||||
public static void init() {
|
||||
HudRenderCallback.EVENT.register((context, _) -> {
|
||||
HudRenderCallback.EVENT.register((context, _o) -> {
|
||||
MinecraftClient client = MinecraftClient.getInstance();
|
||||
TextRenderer textRenderer = client.textRenderer;
|
||||
|
||||
|
||||
@@ -63,11 +63,13 @@ public class SaturnUi extends Screen {
|
||||
for (SaturnWidget widget : new ArrayList<>(widgets)) {
|
||||
if (!widget.visible) continue;
|
||||
|
||||
double adjustedMouseX = mouseX - widget.x;
|
||||
double adjustedMouseY = mouseY - widget.y;
|
||||
boolean isMouseInside =
|
||||
widget.x < mouseX &&
|
||||
widget.x + widget.width > mouseX &&
|
||||
widget.y < mouseY &&
|
||||
widget.y + widget.height > mouseY;
|
||||
adjustedMouseX >= 0 &&
|
||||
adjustedMouseX <= (widget.width * widget.scale) &&
|
||||
adjustedMouseY >= 0 &&
|
||||
adjustedMouseY <= (widget.height * widget.scale);
|
||||
|
||||
MatrixStack matrices = context.getMatrices();
|
||||
matrices.push();
|
||||
@@ -76,8 +78,8 @@ public class SaturnUi extends Screen {
|
||||
widget.render(
|
||||
context,
|
||||
isMouseInside,
|
||||
mouseX - widget.x,
|
||||
mouseY - widget.y
|
||||
(int) (adjustedMouseX / widget.scale),
|
||||
(int) (adjustedMouseY / widget.scale)
|
||||
);
|
||||
matrices.pop();
|
||||
}
|
||||
@@ -90,13 +92,13 @@ public class SaturnUi extends Screen {
|
||||
widget.focused = false;
|
||||
if (!widget.visible) continue;
|
||||
|
||||
double adjustedMouseX = (mouseX - widget.x) / widget.scale;
|
||||
double adjustedMouseY = (mouseY - widget.y) / widget.scale;
|
||||
double adjustedMouseX = mouseX - widget.x;
|
||||
double adjustedMouseY = mouseY - widget.y;
|
||||
boolean isMouseInside =
|
||||
adjustedMouseX >= 0 &&
|
||||
adjustedMouseX <= widget.width &&
|
||||
adjustedMouseX <= (widget.width * widget.scale) &&
|
||||
adjustedMouseY >= 0 &&
|
||||
adjustedMouseY <= widget.height;
|
||||
adjustedMouseY <= (widget.height * widget.scale);
|
||||
|
||||
SaturnClient.LOGGER.info(
|
||||
"CLick mouse X: " +
|
||||
@@ -108,8 +110,8 @@ public class SaturnUi extends Screen {
|
||||
if (isMouseInside) {
|
||||
widget.focused = true;
|
||||
widget.click(
|
||||
((int) mouseX) - widget.x,
|
||||
((int) mouseY) - widget.y
|
||||
(int) (adjustedMouseX / widget.scale),
|
||||
(int) (adjustedMouseY / widget.scale)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -141,18 +143,18 @@ public class SaturnUi extends Screen {
|
||||
double verticalAmount
|
||||
) {
|
||||
for (SaturnWidget widget : new ArrayList<>(widgets)) {
|
||||
double adjustedMouseX = (mouseX - widget.x) / widget.scale;
|
||||
double adjustedMouseY = (mouseY - widget.y) / widget.scale;
|
||||
double adjustedMouseX = mouseX - widget.x;
|
||||
double adjustedMouseY = mouseY - widget.y;
|
||||
boolean isMouseInside =
|
||||
adjustedMouseX >= 0 &&
|
||||
adjustedMouseX <= widget.width &&
|
||||
adjustedMouseX <= (widget.width * widget.scale) &&
|
||||
adjustedMouseY >= 0 &&
|
||||
adjustedMouseY <= widget.height;
|
||||
adjustedMouseY <= (widget.height * widget.scale);
|
||||
|
||||
if (isMouseInside) {
|
||||
widget.mouseScrolled(
|
||||
((int) mouseX) - widget.x,
|
||||
((int) mouseY) - widget.y,
|
||||
(int) (adjustedMouseX / widget.scale),
|
||||
(int) (adjustedMouseY / widget.scale),
|
||||
horizontalAmount,
|
||||
verticalAmount
|
||||
);
|
||||
|
||||
@@ -40,7 +40,7 @@ public class SaturnFloat extends SaturnWidget {
|
||||
for (int i = 0; i < visibleText.length(); i++) {
|
||||
textWidth = textRenderer.getWidth(visibleText.substring(0, i + 1));
|
||||
|
||||
if (textWidth > (mouseX - x)) {
|
||||
if (textWidth > mouseX) {
|
||||
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) {
|
||||
this(texture, _ -> {
|
||||
this(texture, _o -> {
|
||||
onPress.run();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ public class SaturnClickableSprite extends SaturnWidget {
|
||||
}
|
||||
|
||||
public SaturnClickableSprite(Identifier sprite, Runnable onPress) {
|
||||
this(sprite, _ -> {
|
||||
this(sprite, _o -> {
|
||||
onPress.run();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ public class SaturnImageButton extends SaturnButton {
|
||||
int imageHeight,
|
||||
Consumer<SaturnImageButton> onPress
|
||||
) {
|
||||
super("", _ -> {});
|
||||
super("", _o -> {});
|
||||
this.sprite = sprite;
|
||||
this.imageWidth = imageWidth;
|
||||
this.imageHeight = imageHeight;
|
||||
@@ -32,7 +32,7 @@ public class SaturnImageButton extends SaturnButton {
|
||||
int imageHeight,
|
||||
Runnable onPress
|
||||
) {
|
||||
this(sprite, imageWidth, imageHeight, _ -> {
|
||||
this(sprite, imageWidth, imageHeight, _o -> {
|
||||
onPress.run();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -42,13 +42,13 @@ public class SaturnScroll extends SaturnWidget {
|
||||
for (SaturnWidget widget : children) {
|
||||
if (!widget.visible) continue;
|
||||
|
||||
double adjustedMouseX = (mouseX - widget.x) * scale;
|
||||
double adjustedMouseY = (mouseY - widget.y + scroll) * scale;
|
||||
double adjustedMouseX = (mouseX - widget.x);
|
||||
double adjustedMouseY = (mouseY - widget.y + scroll);
|
||||
boolean isMouseInside =
|
||||
adjustedMouseX >= 0 &&
|
||||
adjustedMouseX <= widget.width &&
|
||||
adjustedMouseX <= (widget.width * widget.scale) &&
|
||||
adjustedMouseY >= 0 &&
|
||||
adjustedMouseY <= widget.height;
|
||||
adjustedMouseY <= (widget.height * widget.scale);
|
||||
|
||||
if (
|
||||
widget.y - scroll < height && widget.y + widget.height > scroll
|
||||
@@ -61,8 +61,8 @@ public class SaturnScroll extends SaturnWidget {
|
||||
widget.render(
|
||||
context,
|
||||
isMouseInside,
|
||||
(int) adjustedMouseX,
|
||||
(int) adjustedMouseY
|
||||
(int) (adjustedMouseX / widget.scale),
|
||||
(int) (adjustedMouseY / widget.scale)
|
||||
);
|
||||
matrices.pop();
|
||||
}
|
||||
@@ -126,18 +126,20 @@ public class SaturnScroll extends SaturnWidget {
|
||||
continue;
|
||||
}
|
||||
|
||||
double adjustedMouseX = (mouseX - widget.x) * scale;
|
||||
double adjustedMouseY =
|
||||
(mouseY - (widget.y - scroll)) * widget.scale;
|
||||
double adjustedMouseX = (mouseX - widget.x);
|
||||
double adjustedMouseY = (mouseY - (widget.y - scroll));
|
||||
boolean isMouseInside =
|
||||
adjustedMouseX >= 0 &&
|
||||
adjustedMouseX <= widget.width &&
|
||||
adjustedMouseX <= (widget.width * widget.scale) &&
|
||||
adjustedMouseY >= 0 &&
|
||||
adjustedMouseY <= widget.height;
|
||||
adjustedMouseY <= (widget.height * widget.scale);
|
||||
|
||||
if (isMouseInside) {
|
||||
widget.focused = true;
|
||||
widget.click((int) adjustedMouseX, (int) adjustedMouseY);
|
||||
widget.click(
|
||||
(int) (adjustedMouseX / widget.scale),
|
||||
(int) (adjustedMouseY / widget.scale)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user