tcr/java/src/game/gui/GuiLoading.java
2025-05-03 22:42:03 +02:00

161 lines
4 KiB
Java

package game.gui;
import game.Game;
import game.ServerProcess;
import game.gui.element.Bar;
import game.gui.element.Label;
public class GuiLoading extends Gui {
public static interface Callback {
void poll(Game gm, GuiLoading gui);
}
private final String message;
private final Callback callback;
private Label headerLabel;
private Label taskLabel;
private Bar progressBar1;
private Bar progressBar2;
public static GuiLoading makeStartTask(final ServerProcess server) {
return new GuiLoading("Starte Server ...", new Callback() {
boolean started = false;
public void poll(Game gm, GuiLoading gui) {
if(!this.started && server.isStarted()) {
this.started = true;
gm.displayGuiScreen(GuiMenu.INSTANCE);
}
int progress = server.getProgress();
if(progress < 0) {
gui.resetBar();
}
else {
gui.setBar(null, "Chunks", Math.max(1, server.getTotal()));
gui.setProgress(progress);
}
gui.setTask(server.getMessage());
}
});
}
public static GuiLoading makeStopTask(final ServerProcess server) {
return new GuiLoading("Beende Server ...", new Callback() {
public void poll(Game gm, GuiLoading gui) {
if(server.isStopped()) {
gm.displayGuiScreen(GuiMenu.INSTANCE);
return;
}
int progress = server.getProgress();
if(progress < 0) {
gui.resetBar();
}
else {
gui.setBar(null, "Dimensionen", Math.max(1, server.getTotal()));
gui.setProgress(progress);
}
gui.setTask(server.getMessage());
}
});
}
public static GuiLoading makeServerTask(String message) {
return new GuiLoading(message, new Callback() {
public void poll(Game gm, GuiLoading gui) {
int progress = gm.progress;
if(progress < 0) {
gui.resetBar();
}
else {
gui.setBar(null, "Chunks", Math.max(1, gm.total));
gui.setProgress(progress);
}
gui.setTask(gm.message);
}
});
}
public static GuiLoading makeWaitTask(String message) {
return new GuiLoading(message, new Callback() {
public void poll(Game gm, GuiLoading gui) {
}
});
}
public GuiLoading(String message, Callback callback) {
this.message = message;
this.callback = callback;
}
public void init(int width, int height) {
this.taskLabel = this.add(new Label(0, 40, 500, 20, ""));
this.progressBar1 = this.add(new Bar(0, 80, 500, 24));
this.progressBar2 = this.add(new Bar(0, 120, 500, 24));
this.shift();
this.headerLabel = this.add(new Label(0, 40, width, 20, this.message));
this.progressBar1.visible = false;
this.progressBar2.visible = false;
}
public String getTitle() {
return this.message;
}
public void setTask(String task) {
this.taskLabel.setText(task == null ? "" : task);
}
public void setBar(String desc) {
this.progressBar1.visible = true;
this.progressBar1.setDescription(desc);
}
public void setBar(String desc, String unit, int total) {
this.progressBar1.visible = true;
this.progressBar1.setDescription(desc, unit, total);
}
public void setBar(String desc, int total) {
this.progressBar1.visible = true;
this.progressBar1.setDescription(desc, total);
}
public void setProgress(float progress) {
this.progressBar1.setProgress(progress);
}
public void resetBar() {
this.progressBar1.resetProgress();
this.progressBar1.visible = false;
}
public void setSub(String desc) {
this.progressBar2.visible = true;
this.progressBar2.setDescription(desc);
}
public void setSub(String desc, String unit, int total) {
this.progressBar2.visible = true;
this.progressBar2.setDescription(desc, unit, total);
}
public void setSub(String desc, int total) {
this.progressBar2.visible = true;
this.progressBar2.setDescription(desc, total);
}
public void setSubProgress(float progress) {
this.progressBar2.setProgress(progress);
}
public void resetSub() {
this.progressBar2.resetProgress();
this.progressBar2.visible = false;
}
public void updateScreen() {
if(this.callback != null)
this.callback.poll(this.gm, this);
}
}