Saturn Screen implementation

This commit is contained in:
2026-03-07 15:37:37 +01:00
parent 7af945486c
commit 7fd5493995
2 changed files with 144 additions and 69 deletions
@@ -0,0 +1,110 @@
package org.saturnclient.ui;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
public abstract class SaturnScreen {
public static interface ScreenProvider {
public void close();
}
// General
public int width;
public int height;
public String title;
// Saturn Screen
public List<Element> elements = new ArrayList<>();
public float backgroundOpacity = 1.0f;
protected Instant start = null;
public int backgroundBlur = 10;
// Provider
public ScreenProvider provider;
public SaturnScreen() {
provider.close();
}
protected void init() {
elements.clear();
width *= 2;
height *= 2;
ui(); // abstraction to render the saturn ui and also render extra stuff here
}
public abstract void ui();
public void draw(Element element) {
ElementRenderer.INSTANCE.draw(elements, element);
}
// --------------
// Rendering
// --------------
public void render(RenderScope renderScope, int mouseX, int mouseY, float delta, long elapsed) {
renderScope.getMatrixStack().push();
renderScope.getMatrixStack().scale(0.5f, 0.5f, 0.5f);
ElementRenderer.INSTANCE.render(new ArrayList<>(elements), elapsed, renderScope, mouseX, mouseY);
renderScope.getMatrixStack().pop();
}
// --------------
// Events
// --------------
public boolean mouseClicked(double mouseX, double mouseY, int button) {
mouseX *= 2;
mouseY *= 2;
ElementRenderer.INSTANCE.mouseClicked(elements, mouseX, mouseY, button);
return false;
}
public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
mouseX *= 2;
mouseY *= 2;
ElementRenderer.INSTANCE.mouseDragged(elements, mouseX, mouseY, button, deltaX, deltaY);
return false;
}
public boolean mouseReleased(double mouseX, double mouseY, int button) {
mouseX *= 2;
mouseY *= 2;
ElementRenderer.INSTANCE.mouseReleased(elements, mouseX, mouseY, button);
return false;
}
public boolean mouseScrolled(
double mouseX,
double mouseY,
double horizontalAmount,
double verticalAmount) {
mouseX *= 2;
mouseY *= 2;
ElementRenderer.INSTANCE.mouseScrolled(elements, mouseX, mouseY, horizontalAmount, verticalAmount);
return false;
}
public void resize(int width, int height) {
elements.clear();
}
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
ElementRenderer.INSTANCE.keyPressed(elements, keyCode, scanCode, modifiers);
return false;
}
}