Finished most of new save system, added new localized strings

This commit is contained in:
Anuken
2017-12-29 15:54:59 -05:00
parent 6774ea67ce
commit 036a246769
37 changed files with 681 additions and 379 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}
});
}

View File

@@ -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);
});
});
}