1
mirror of https://github.com/Shiewk/Widgets.git synced 2026-04-28 11:34:17 +02:00
Files
Widgets/src/main/java/de/shiewk/widgets/ModWidget.java
T
Shiewk df5b83a3f7 Add helpful context menus (right click) to the position editing screen
- Right click on widget: Opening widget settings, setting anchor or deactivating the widget
- Right click on empty space: Enabling widgets
2025-11-24 11:41:08 +01:00

79 lines
2.3 KiB
Java

package de.shiewk.widgets;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import java.util.List;
import java.util.Objects;
public abstract class ModWidget {
private final Identifier id;
private final WidgetSettings settings;
protected ModWidget(Identifier id, List<WidgetSettingOption> customSettings) {
Objects.requireNonNull(id, "id");
this.id = id;
this.settings = WidgetSettings.ofId(id, customSettings);
}
public float getScaleFactor(){
return 1f;
}
public final Identifier getId() {
return id;
}
public final WidgetSettings getSettings() {
return settings;
}
public abstract void render(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY);
public abstract void tick();
public abstract Text getName();
public abstract Text getDescription();
public abstract void onSettingsChanged(WidgetSettings settings);
public int getX(int scaledScreenWidth){
return settings.anchor.getAlignStartPosX(scaledScreenWidth) + settings.offsetX;
}
public int getY(int scaledScreenHeight){
return settings.anchor.getAlignStartPosY(scaledScreenHeight) + settings.offsetY;
}
public abstract int width();
public abstract int height();
public float scaledWidth() {
return width() * getScaleFactor();
}
public float scaledHeight() {
return height() * getScaleFactor();
}
public void move(int dx, int dy) {
settings.offsetX += dx;
settings.offsetY += dy;
}
public void setPos(Anchor anchor, int offsetX, int offsetY){
getSettings().setPos(anchor, offsetX, offsetY);
}
public void setAbsolutePos(int x, int y, int scaledWindowWidth, int scaledWindowHeight) {
Anchor anchor = Anchor.getAnchor(scaledWindowWidth, scaledWindowHeight, x, y);
if (anchor == null) {
throw new IllegalArgumentException("Provided coordinates have no corresponding anchor");
}
settings.setPos(
anchor,
x - anchor.getAlignStartPosX(scaledWindowWidth),
y - anchor.getAlignStartPosY(scaledWindowHeight)
);
}
}