From 6ce2f0ef2576958f7b74f12bb504562aae129ac4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 8 Aug 2017 12:01:00 -0400 Subject: [PATCH] Finished saving dialogs --- core/src/io/anuke/mindustry/io/SaveIO.java | 8 +++ .../src/io/anuke/mindustry/ui/LoadDialog.java | 53 ++++++++++++++++++ .../src/io/anuke/mindustry/ui/MenuDialog.java | 3 +- .../src/io/anuke/mindustry/ui/SaveDialog.java | 26 ++++++++- .../anuke/ucore/function/SegmentConsumer.java | 5 ++ desktop/mindustry-saves/0.mins | Bin 0 -> 1169 bytes 6 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 core/src/io/anuke/mindustry/ui/LoadDialog.java create mode 100644 core/src/io/anuke/ucore/function/SegmentConsumer.java create mode 100644 desktop/mindustry-saves/0.mins 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 0000000000000000000000000000000000000000..87ca26375dfe8776d455221c11cf79805b874b16 GIT binary patch literal 1169 zcmZPo1IE}xJvYo47#J8`MHYN=;b35JUICU!VPFK&8X$s!fidV00|P@D1B1CRNI-yr zL30*}!NMRa7K3{x;efPq1NE=Yu*fx%c7#NcCKFatCA85lI=pdzL)hTa0G zh=l@(!Oy^8un@%HV_*FC zaN21W_jtPmF+~q$@~- zpMk;jD2O4zz+eGm2pofoh#Uji2D4k#4a9@n29|@lThv|#;^_psS#jckhuY3@G~%2M}Qat3=Be%AOvOTeg+1MXCM)N1_tHlAO;@; jgI+p_0ZQT-P=*4S!N