diff --git a/core/src/io/anuke/mindustry/io/SaveIO.java b/core/src/io/anuke/mindustry/io/SaveIO.java index 6d11d19c6c..92cfcec4be 100644 --- a/core/src/io/anuke/mindustry/io/SaveIO.java +++ b/core/src/io/anuke/mindustry/io/SaveIO.java @@ -94,6 +94,14 @@ public class SaveIO{ put(enemyIDs.get(value), value); }}; + public static void saveToSlot(int slot){ + write(fileFor(slot)); + } + + public static void loadFromSlot(int slot){ + load(fileFor(slot)); + } + public static boolean isSaveValid(int slot){ try(DataInputStream stream = new DataInputStream(fileFor(slot).read())){ return stream.readInt() == fileVersionID; diff --git a/core/src/io/anuke/mindustry/ui/LoadDialog.java b/core/src/io/anuke/mindustry/ui/LoadDialog.java new file mode 100644 index 0000000000..5f12f36dfc --- /dev/null +++ b/core/src/io/anuke/mindustry/ui/LoadDialog.java @@ -0,0 +1,53 @@ +package io.anuke.mindustry.ui; + +import io.anuke.mindustry.Vars; +import io.anuke.mindustry.io.SaveIO; +import io.anuke.ucore.scene.ui.Dialog; +import io.anuke.ucore.scene.ui.TextButton; +import io.anuke.ucore.scene.ui.layout.Unit; + +public class LoadDialog extends Dialog{ + + public LoadDialog() { + super("Load Game"); + setup(); + + shown(()->{ + setup(); + }); + + getButtonTable().addButton("Back", ()->{ + hide(); + }).pad(8).size(180, 60); + } + + private void setup(){ + content().clear(); + + content().add("Select a save slot.").padBottom(4); + content().row(); + + for(int i = 0; i < Vars.saveSlots; i ++){ + final int slot = i; + + TextButton button = new TextButton("[yellow]Slot " + i); + button.getLabelCell().top().left().growX(); + button.row(); + button.pad(12); + button.add("[gray]" + (!SaveIO.isSaveValid(i) ? "" : "Last Saved: " + SaveIO.getTimeString(i))); + button.getLabel().setFontScale(1f); + button.setDisabled(!SaveIO.isSaveValid(i) ); + + button.clicked(()->{ + if(!button.isDisabled()){ + SaveIO.loadFromSlot(slot); + hide(); + } + }); + + content().add(button).size(400, 100).units(Unit.dp).pad(10); + content().row(); + } + + } +} diff --git a/core/src/io/anuke/mindustry/ui/MenuDialog.java b/core/src/io/anuke/mindustry/ui/MenuDialog.java index be7660ba42..580095924b 100644 --- a/core/src/io/anuke/mindustry/ui/MenuDialog.java +++ b/core/src/io/anuke/mindustry/ui/MenuDialog.java @@ -11,6 +11,7 @@ import io.anuke.ucore.scene.ui.layout.Unit; public class MenuDialog extends Dialog{ private SaveDialog save = new SaveDialog(); + private LoadDialog load = new LoadDialog(); public MenuDialog(){ super("Paused", "dialog"); @@ -44,7 +45,7 @@ public class MenuDialog extends Dialog{ content().row(); content().addButton("Load Game", ()->{ - + load.show(); }); content().row(); diff --git a/core/src/io/anuke/mindustry/ui/SaveDialog.java b/core/src/io/anuke/mindustry/ui/SaveDialog.java index f532b8740b..d27289e954 100644 --- a/core/src/io/anuke/mindustry/ui/SaveDialog.java +++ b/core/src/io/anuke/mindustry/ui/SaveDialog.java @@ -2,8 +2,10 @@ package io.anuke.mindustry.ui; import io.anuke.mindustry.Vars; import io.anuke.mindustry.io.SaveIO; +import io.anuke.ucore.scene.ui.ConfirmDialog; import io.anuke.ucore.scene.ui.Dialog; import io.anuke.ucore.scene.ui.TextButton; +import io.anuke.ucore.scene.ui.layout.Cell; import io.anuke.ucore.scene.ui.layout.Unit; public class SaveDialog extends Dialog{ @@ -11,6 +13,14 @@ public class SaveDialog extends Dialog{ public SaveDialog() { super("Save Game"); setup(); + + shown(()->{ + setup(); + }); + + getButtonTable().addButton("Back", ()->{ + hide(); + }).pad(8).size(180, 60); } private void setup(){ @@ -20,6 +30,8 @@ public class SaveDialog extends Dialog{ content().row(); for(int i = 0; i < Vars.saveSlots; i ++){ + final int slot = i; + TextButton button = new TextButton("[yellow]Slot " + i); button.getLabelCell().top().left().growX(); button.row(); @@ -28,7 +40,19 @@ public class SaveDialog extends Dialog{ button.getLabel().setFontScale(1f); button.clicked(()->{ - + if(SaveIO.isSaveValid(slot)){ + new ConfirmDialog("Overwrite", "Are you sure you want to overwrite\nthis save slot?", ()->{ + SaveIO.saveToSlot(slot); + hide(); + }){{ + content().pad(16); + for(Cell cell : getButtonTable().getCells()) + cell.size(110, 45).pad(4); + }}.show(); + }else{ + SaveIO.saveToSlot(slot); + hide(); + } }); content().add(button).size(400, 100).units(Unit.dp).pad(10); diff --git a/core/src/io/anuke/ucore/function/SegmentConsumer.java b/core/src/io/anuke/ucore/function/SegmentConsumer.java new file mode 100644 index 0000000000..c4a722114f --- /dev/null +++ b/core/src/io/anuke/ucore/function/SegmentConsumer.java @@ -0,0 +1,5 @@ +package io.anuke.ucore.function; + +public interface SegmentConsumer{ + public void accept(int x, int y, int x2, int y2); +} diff --git a/desktop/mindustry-saves/0.mins b/desktop/mindustry-saves/0.mins new file mode 100644 index 0000000000..87ca26375d Binary files /dev/null and b/desktop/mindustry-saves/0.mins differ