diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/io/anuke/mindustry/core/UI.java index 5df0526caa..d57d230993 100644 --- a/core/src/io/anuke/mindustry/core/UI.java +++ b/core/src/io/anuke/mindustry/core/UI.java @@ -233,6 +233,10 @@ public class UI extends SceneModule{ } public void loadLogic(Callable call){ + loadLogic("$text.loading", call); + } + + public void loadLogic(String text, Callable call){ loadfrag.show(); Timers.runTask(7f, () -> { threads.run(() -> { diff --git a/core/src/io/anuke/mindustry/io/Saves.java b/core/src/io/anuke/mindustry/io/Saves.java index 79b5756936..4096974e97 100644 --- a/core/src/io/anuke/mindustry/io/Saves.java +++ b/core/src/io/anuke/mindustry/io/Saves.java @@ -4,7 +4,9 @@ import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.game.Difficulty; +import io.anuke.mindustry.game.EventType.StateChangeEvent; import io.anuke.mindustry.game.GameMode; +import io.anuke.ucore.core.Events; import io.anuke.ucore.core.Settings; import io.anuke.ucore.core.Timers; import io.anuke.ucore.util.ThreadArray; @@ -20,6 +22,14 @@ public class Saves{ private boolean saving; private float time; + public Saves(){ + Events.on(StateChangeEvent.class, (prev, state) -> { + if(state == State.menu){ + threads.run(() -> current = null); + } + }); + } + public void load(){ saves.clear(); for(int i = 0; i < saveSlots; i++){ @@ -37,9 +47,6 @@ public class Saves{ } public void update(){ - if(state.is(State.menu)){ - current = null; - } if(!state.is(State.menu) && !state.gameOver && current != null && current.isAutosave()){ time += Timers.delta(); @@ -109,15 +116,15 @@ public class Saves{ } public void load(){ - current = this; SaveIO.loadFromSlot(index); meta = SaveIO.getData(index); + current = this; } public void save(){ - current = this; SaveIO.saveToSlot(index); meta = SaveIO.getData(index); + current = this; } public String getDate(){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java index d2be114720..a517f2894c 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java @@ -1,9 +1,7 @@ package io.anuke.mindustry.ui.dialogs; -import com.badlogic.gdx.utils.reflect.ClassReflection; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.net.Net; -import io.anuke.ucore.core.Timers; import io.anuke.ucore.scene.builders.build; import io.anuke.ucore.scene.builders.imagebutton; import io.anuke.ucore.util.Bundles; @@ -130,15 +128,12 @@ public class PausedDialog extends FloatingDialog{ return; } - ui.loadfrag.show("$text.saveload"); - - Timers.runTask(5f, () -> { - ui.loadfrag.hide(); + ui.loadLogic("$text.saveload", () -> { try{ control.getSaves().getCurrent().save(); }catch(Throwable e){ - e = (e.getCause() == null ? e : e.getCause()); - ui.showError("[orange]" + Bundles.get("text.savefail") + "\n[white]" + ClassReflection.getSimpleName(e.getClass()) + ": " + e.getMessage() + "\n" + "at " + e.getStackTrace()[0].getFileName() + ":" + e.getStackTrace()[0].getLineNumber()); + e.printStackTrace(); + threads.runGraphics(() -> ui.showError("[orange]" + Bundles.get("text.savefail"))); } state.set(State.menu); });