Save slot previews

This commit is contained in:
Anuken
2019-08-30 15:01:38 -04:00
parent 6e2cd81c9f
commit 26d44ea030
8 changed files with 1097 additions and 994 deletions

View File

@@ -1,13 +1,14 @@
package io.anuke.mindustry.ui;
import io.anuke.arc.graphics.Texture;
import io.anuke.arc.graphics.*;
import io.anuke.arc.graphics.g2d.*;
import io.anuke.arc.scene.ui.Image;
import io.anuke.arc.scene.ui.layout.UnitScl;
import io.anuke.mindustry.graphics.Pal;
public class BorderImage extends Image{
private float thickness = 4f;
public float thickness = 4f;
public Color borderColor = Pal.gray;
public BorderImage(){
@@ -27,6 +28,11 @@ public class BorderImage extends Image{
thickness = thick;
}
public BorderImage border(Color color){
this.borderColor = color;
return this;
}
@Override
public void draw(){
super.draw();
@@ -34,7 +40,7 @@ public class BorderImage extends Image{
float scaleX = getScaleX();
float scaleY = getScaleY();
Draw.color(Pal.gray);
Draw.color(borderColor);
Draw.alpha(parentAlpha);
Lines.stroke(UnitScl.dp.scl(thickness));
Lines.rect(x + imageX, y + imageY, imageWidth * scaleX, imageHeight * scaleY);

View File

@@ -3,6 +3,9 @@ package io.anuke.mindustry.ui.dialogs;
import io.anuke.arc.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.files.*;
import io.anuke.arc.graphics.*;
import io.anuke.arc.graphics.g2d.*;
import io.anuke.arc.scene.style.*;
import io.anuke.arc.scene.ui.*;
import io.anuke.arc.scene.ui.layout.*;
import io.anuke.arc.util.*;
@@ -13,6 +16,7 @@ import io.anuke.mindustry.game.Saves.*;
import io.anuke.mindustry.io.*;
import io.anuke.mindustry.io.SaveIO.*;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.ui.*;
import java.io.*;
@@ -56,76 +60,96 @@ public class LoadDialog extends FloatingDialog{
for(SaveSlot slot : array){
if(slot.isHidden()) continue;
TextButton button = new TextButton("[accent]" + slot.getName(), "clear");
button.getLabelCell().growX().left();
button.getLabelCell().padBottom(8f);
button.getLabelCell().top().left().growX();
TextButton button = new TextButton("", "clear");
button.getLabel().remove();
button.clearChildren();
button.defaults().left();
button.table(t -> {
t.right();
button.table(title -> {
title.add("[accent]" + slot.getName()).left().growX();
t.addImageButton("icon-floppy", "emptytoggle", iconsize, () -> {
slot.setAutosave(!slot.isAutosave());
}).checked(slot.isAutosave()).right();
title.table(t -> {
t.right();
t.addImageButton("icon-trash", "empty", iconsize, () -> {
ui.showConfirm("$confirm", "$save.delete.confirm", () -> {
slot.delete();
setup();
});
}).size(iconsize).right();
t.addImageButton("icon-floppy", "emptytoggle", iconsize, () -> {
slot.setAutosave(!slot.isAutosave());
}).checked(slot.isAutosave()).right();
t.addImageButton("icon-pencil", "empty", iconsize, () -> {
ui.showTextInput("$save.rename", "$save.rename.text", slot.getName(), text -> {
slot.setName(text);
setup();
});
}).size(iconsize).right();
t.addImageButton("icon-trash", "empty", iconsize, () -> {
ui.showConfirm("$confirm", "$save.delete.confirm", () -> {
slot.delete();
setup();
});
}).size(iconsize).right();
t.addImageButton("icon-save", "empty", iconsize, () -> {
if(!ios){
Platform.instance.showFileChooser(Core.bundle.get("save.export"), "Mindustry Save", file -> {
t.addImageButton("icon-pencil", "empty", iconsize, () -> {
ui.showTextInput("$save.rename", "$save.rename.text", slot.getName(), text -> {
slot.setName(text);
setup();
});
}).size(iconsize).right();
t.addImageButton("icon-save", "empty", iconsize, () -> {
if(!ios){
Platform.instance.showFileChooser(Core.bundle.get("save.export"), "Mindustry Save", file -> {
try{
slot.exportFile(file);
setup();
}catch(IOException e){
ui.showError(Core.bundle.format("save.export.fail", Strings.parseException(e, true)));
}
}, false, FileChooser.saveFiles);
}else{
try{
FileHandle file = Core.files.local("save-" + slot.getName() + "." + Vars.saveExtension);
slot.exportFile(file);
setup();
}catch(IOException e){
Platform.instance.shareFile(file);
}catch(Exception e){
ui.showError(Core.bundle.format("save.export.fail", Strings.parseException(e, true)));
}
}, false, FileChooser.saveFiles);
}else{
try{
FileHandle file = Core.files.local("save-" + slot.getName() + "." + Vars.saveExtension);
slot.exportFile(file);
Platform.instance.shareFile(file);
}catch(Exception e){
ui.showError(Core.bundle.format("save.export.fail", Strings.parseException(e, true)));
}
}
}).size(iconsize).right();
}).size(iconsize).right();
}).padRight(-10).growX();
}).padRight(-10).growX();
}).growX().colspan(2);
button.row();
String color = "[lightgray]";
TextureRegion def = Core.atlas.find("nomap");
button.add(new BorderImage(def, 4f)).update(i -> {
TextureRegionDrawable draw = (TextureRegionDrawable)i.getDrawable();
if(draw.getRegion().getTexture().isDisposed()){
draw.setRegion(def);
}
Texture text = slot.previewTexture();
if(draw.getRegion() == def && text != null){
draw.setRegion(new TextureRegion(text));
}
}).size(160f).padRight(5);
button.table(meta -> {
meta.left();
meta.defaults().padBottom(3).left();
meta.row();
meta.add(Core.bundle.format("save.map", color + (slot.getMap() == null ? Core.bundle.get("unknown") : slot.getMap().name())));
meta.row();
meta.add(Core.bundle.format("save.wave", color + slot.getWave()));
meta.row();
meta.label(() -> Core.bundle.format("save.autosave", color + Core.bundle.get(slot.isAutosave() ? "on" : "off")));
meta.row();
meta.label(() -> Core.bundle.format("save.playtime", color + slot.getPlayTime()));
meta.row();
meta.add(Core.bundle.format("save.date", color + slot.getDate())).colspan(2).padTop(5).right();
meta.row();
});
button.defaults().padBottom(3);
button.row();
button.add(Core.bundle.format("save.map", color + (slot.getMap() == null ? Core.bundle.get("unknown") : slot.getMap().name())));
button.row();
button.add(Core.bundle.format("save.wave", color + slot.getWave()));
button.row();
button.label(() -> Core.bundle.format("save.autosave", color + Core.bundle.get(slot.isAutosave() ? "on" : "off")));
button.row();
button.label(() -> Core.bundle.format("save.playtime", color + slot.getPlayTime()));
button.row();
button.add(Core.bundle.format("save.date", color + slot.getDate())).colspan(2).padTop(5).right();
button.row();
modifyButton(button, slot);
slots.add(button).uniformX().fillX().pad(4).padRight(-4).margin(10f).marginLeft(20f).marginRight(20f);
slots.row();
slots.add(button).uniformX().fillX().pad(4).padRight(-4).margin(10f).row();
}
cont.add(pane);