package game.gui; import game.Game; import game.Server; 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 makeLoadTask(final Server server, final String user) { return new GuiLoading("Lade Welt ...", new Callback() { boolean started = false; public void poll(Game gm, GuiLoading gui) { if(!this.started && server.isStarted()) { this.started = true; // gm.displayGuiScreen(null); server.setVar("viewDistance", "" + gm.renderDistance); gm.connectToIntegrated(server, user); // return; } 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 makeIntermittentTask(final Server server) { return new GuiLoading("Lade Welt ...", new Callback() { public void poll(Game gm, GuiLoading gui) { int progress = server.getProgress(); // if(progress == -2) { // gm.displayGuiScreen(null); // return; // } 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 makeSaveTask(final Server server) { return new GuiLoading("Speichere Welt ...", 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 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); } }