Finished most of new save system, added new localized strings
This commit is contained in:
@@ -59,7 +59,7 @@ public class FileChooser extends FloatingDialog{
|
||||
if(!open) Mindustry.platforms.addDialog(filefield);
|
||||
filefield.setDisabled(open);
|
||||
|
||||
ok = new TextButton(open ? "$text.save" : "$text.save");
|
||||
ok = new TextButton(open ? "$text.load" : "$text.save");
|
||||
|
||||
ok.clicked(() -> {
|
||||
if(ok.isDisabled()) return;
|
||||
|
||||
@@ -12,7 +12,7 @@ import io.anuke.ucore.scene.event.InputEvent;
|
||||
import io.anuke.ucore.scene.ui.*;
|
||||
import io.anuke.ucore.scene.ui.layout.Stack;
|
||||
import io.anuke.ucore.scene.ui.layout.Table;
|
||||
import io.anuke.ucore.scene.utils.ClickListener;
|
||||
import io.anuke.ucore.scene.event.ClickListener;
|
||||
import io.anuke.ucore.scene.utils.Elements;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
import io.anuke.ucore.util.Tmp;
|
||||
|
||||
@@ -1,21 +1,28 @@
|
||||
package io.anuke.mindustry.ui;
|
||||
|
||||
import com.badlogic.gdx.utils.Align;
|
||||
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import io.anuke.mindustry.Vars;
|
||||
import io.anuke.mindustry.core.GameState;
|
||||
import io.anuke.mindustry.core.GameState.State;
|
||||
import io.anuke.mindustry.io.SaveIO;
|
||||
import io.anuke.mindustry.io.Saves.SaveSlot;
|
||||
import io.anuke.ucore.UCore;
|
||||
import io.anuke.ucore.core.Core;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.scene.ui.Label;
|
||||
import io.anuke.ucore.scene.builders.button;
|
||||
import io.anuke.ucore.scene.builders.dialog;
|
||||
import io.anuke.ucore.scene.ui.Dialog;
|
||||
import io.anuke.ucore.scene.ui.ScrollPane;
|
||||
import io.anuke.ucore.scene.ui.TextButton;
|
||||
import io.anuke.ucore.scene.ui.layout.Table;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class LoadDialog extends FloatingDialog{
|
||||
ScrollPane pane;
|
||||
Table slots;
|
||||
|
||||
public LoadDialog() {
|
||||
this("$text.loadgame");
|
||||
@@ -33,37 +40,112 @@ public class LoadDialog extends FloatingDialog{
|
||||
addCloseButton();
|
||||
}
|
||||
|
||||
private void setup(){
|
||||
protected void setup(){
|
||||
content().clear();
|
||||
|
||||
content().add("$text.selectslot").padBottom(2);
|
||||
content().row();
|
||||
|
||||
Table slots = new Table();
|
||||
pane = new ScrollPane(slots);
|
||||
slots = new Table();
|
||||
pane = new ScrollPane(slots, "clear-black");
|
||||
pane.setFadeScrollBars(false);
|
||||
pane.setScrollingDisabled(true, false);
|
||||
|
||||
slots.marginRight(24);
|
||||
|
||||
for(int i = 0; i < Vars.saveSlots; i++){
|
||||
Timers.runTask(2f, () -> Core.scene.setScrollFocus(pane));
|
||||
|
||||
TextButton button = new TextButton(Bundles.format("text.slot", (i + 1)));
|
||||
button.margin(12);
|
||||
Array<SaveSlot> array = Vars.control.getSaves().getSaveSlots();
|
||||
|
||||
for(SaveSlot slot : array){
|
||||
|
||||
TextButton button = new TextButton("[accent]" + slot.getName(), "clear");
|
||||
button.getLabelCell().growX().left();
|
||||
button.getLabelCell().padBottom(8f);
|
||||
button.getLabelCell().top().left().growX();
|
||||
|
||||
button.row();
|
||||
button.defaults().left();
|
||||
|
||||
Label info = new Label("[gray]" + (!SaveIO.isSaveValid(i) ? Bundles.get("text.empty") : SaveIO.getMode(i) + ", "
|
||||
+ Bundles.get("map."+SaveIO.getMap(i).name+".name", SaveIO.getMap(i).name) + ", " + Bundles.format("text.save.wave", SaveIO.getWave(i)) + "\n"
|
||||
+ Bundles.format("text.save.date", SaveIO.getTimeString(i))));
|
||||
info.setAlignment(Align.center, Align.center);
|
||||
button.table(t -> {
|
||||
t.right();
|
||||
|
||||
button.add(info).padBottom(3).padTop(7);
|
||||
button.row();
|
||||
button.row();
|
||||
modifyButton(button, i);
|
||||
t.addIButton("icon-floppy", "emptytoggle", 14*3, () -> {
|
||||
slot.setAutosave(!slot.isAutosave());
|
||||
}).checked(slot.isAutosave()).right();
|
||||
|
||||
slots.add(button).size(404, 104).pad(4);
|
||||
t.addIButton("icon-trash", "empty", 14*3, () -> {
|
||||
Vars.ui.showConfirm("$text.confirm", "$text.save.delete.confirm", () -> {
|
||||
slot.delete();
|
||||
setup();
|
||||
});
|
||||
}).size(14*3).right();
|
||||
|
||||
t.addIButton("icon-dots", "empty", 14*3, () -> {
|
||||
FloatingDialog dialog = new FloatingDialog("Save Options");
|
||||
dialog.addCloseButton();
|
||||
|
||||
dialog.content().defaults().left().uniformX().size(230f, 60f);
|
||||
|
||||
dialog.content().addImageTextButton("$text.save.rename", "icon-rename", 14*3, () -> {
|
||||
Vars.ui.showTextInput("$text.save.rename", "$text.save.rename.text", slot.getName(), text -> {
|
||||
slot.setName(text);
|
||||
dialog.hide();
|
||||
setup();
|
||||
});
|
||||
});
|
||||
|
||||
dialog.content().row();
|
||||
|
||||
dialog.content().addImageTextButton("$text.save.import", "icon-save", 14*3, () -> {
|
||||
new FileChooser("$text.save.import", f -> f.extension().equals("mins"), true, file -> {
|
||||
if(SaveIO.isSaveValid(file)){
|
||||
try{
|
||||
slot.importFile(file);
|
||||
setup();
|
||||
}catch (IOException e){
|
||||
Vars.ui.showError(Bundles.format("text.save.import.fail", Strings.parseException(e, false)));
|
||||
}
|
||||
}else{
|
||||
Vars.ui.showError("$text.save.import.invalid");
|
||||
}
|
||||
dialog.hide();
|
||||
}).show();
|
||||
});
|
||||
|
||||
dialog.content().row();
|
||||
|
||||
dialog.content().addImageTextButton("$text.save.export", "icon-load", 14*3, () -> {
|
||||
new FileChooser("$text.save.export", false, file -> {
|
||||
try{
|
||||
slot.exportFile(file);
|
||||
setup();
|
||||
}catch (IOException e){
|
||||
Vars.ui.showError(Bundles.format("text.save.export.fail", Strings.parseException(e, false)));
|
||||
}
|
||||
dialog.hide();
|
||||
}).show();
|
||||
});
|
||||
|
||||
dialog.show();
|
||||
}).size(14*3).right();
|
||||
|
||||
}).padRight(-10).growX();
|
||||
|
||||
String color = "[lightgray]";
|
||||
|
||||
button.defaults().padBottom(3);
|
||||
button.row();
|
||||
button.add(Bundles.format("text.save.map", color+slot.getMap().localized()));
|
||||
button.row();
|
||||
button.add(Bundles.get("text.level.mode") + " " +color+ slot.getMode());
|
||||
button.row();
|
||||
button.add(Bundles.format("text.save.wave", color+slot.getWave()));
|
||||
button.row();
|
||||
button.label(() -> Bundles.format("text.save.autosave", color + Bundles.get(slot.isAutosave() ? "text.on" : "text.off")));
|
||||
button.row();
|
||||
button.add();
|
||||
button.add(Bundles.format("text.save.date", color+slot.getDate()));
|
||||
button.row();
|
||||
modifyButton(button, slot);
|
||||
|
||||
slots.add(button).uniformX().fillX().pad(4).padRight(-4).margin(10f).marginLeft(20f).marginRight(20f);
|
||||
slots.row();
|
||||
}
|
||||
|
||||
@@ -71,17 +153,16 @@ public class LoadDialog extends FloatingDialog{
|
||||
|
||||
}
|
||||
|
||||
public void modifyButton(TextButton button, int slot){
|
||||
button.setDisabled(!SaveIO.isSaveValid(slot));
|
||||
public void modifyButton(TextButton button, SaveSlot slot){
|
||||
button.clicked(() -> {
|
||||
if(!button.isDisabled()){
|
||||
if(!button.childrenPressed()){
|
||||
Vars.ui.showLoading();
|
||||
|
||||
Timers.runTask(3f, () -> {
|
||||
Vars.ui.hideLoading();
|
||||
hide();
|
||||
try{
|
||||
SaveIO.loadFromSlot(slot);
|
||||
SaveIO.loadFromSlot(slot.index);
|
||||
GameState.set(State.playing);
|
||||
Vars.ui.hideMenu();
|
||||
}catch(Exception e){
|
||||
@@ -90,7 +171,6 @@ public class LoadDialog extends FloatingDialog{
|
||||
GameState.set(State.menu);
|
||||
Vars.control.reset();
|
||||
Vars.ui.showError("$text.save.corrupted");
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -4,8 +4,12 @@ import com.badlogic.gdx.utils.reflect.ClassReflection;
|
||||
|
||||
import io.anuke.mindustry.Vars;
|
||||
import io.anuke.mindustry.io.SaveIO;
|
||||
import io.anuke.mindustry.io.Saves;
|
||||
import io.anuke.mindustry.io.Saves.SaveSlot;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.scene.builders.button;
|
||||
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.util.Bundles;
|
||||
@@ -17,21 +21,31 @@ public class SaveDialog extends LoadDialog{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void modifyButton(TextButton button, int slot){
|
||||
protected void setup(){
|
||||
super.setup();
|
||||
|
||||
if(!Vars.control.getSaves().canAddSave()){
|
||||
return;
|
||||
}
|
||||
|
||||
slots.row();
|
||||
slots.addImageTextButton("$text.save.new", "icon-add", "clear", 14*3, () -> {
|
||||
Vars.ui.showTextInput("$text.save", "$text.save.newslot", "", text -> {
|
||||
Vars.control.getSaves().addSave(text);
|
||||
setup();
|
||||
});
|
||||
}).fillX().margin(10f).height(70f).pad(4f).padRight(-4);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void modifyButton(TextButton button, SaveSlot slot){
|
||||
button.clicked(() -> {
|
||||
if(SaveIO.isSaveValid(slot)){
|
||||
new ConfirmDialog("$text.overwrite", "$text.save.overwrite", () -> {
|
||||
save(slot);
|
||||
}){
|
||||
{
|
||||
content().margin(16);
|
||||
for(Cell<?> cell : getButtonTable().getCells())
|
||||
cell.size(110, 45).pad(4);
|
||||
}
|
||||
}.show();
|
||||
}else{
|
||||
save(slot);
|
||||
}
|
||||
if(button.childrenPressed()) return;
|
||||
|
||||
Vars.ui.showConfirm("$text.overwrite", "$text.save.overwrite", () -> {
|
||||
save(slot.index);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user