138 lines
4.6 KiB
Java
138 lines
4.6 KiB
Java
package mindustry.ui.dialogs;
|
|
|
|
import arc.*;
|
|
import arc.input.*;
|
|
import mindustry.core.GameState.*;
|
|
import mindustry.gen.*;
|
|
|
|
import static mindustry.Vars.*;
|
|
|
|
public class PausedDialog extends FloatingDialog{
|
|
private SaveDialog save = new SaveDialog();
|
|
private LoadDialog load = new LoadDialog();
|
|
private boolean wasClient = false;
|
|
|
|
public PausedDialog(){
|
|
super("$menu");
|
|
shouldPause = true;
|
|
|
|
shown(this::rebuild);
|
|
|
|
keyDown(key -> {
|
|
if(key == KeyCode.ESCAPE || key == KeyCode.BACK){
|
|
hide();
|
|
}
|
|
});
|
|
}
|
|
|
|
void rebuild(){
|
|
cont.clear();
|
|
|
|
update(() -> {
|
|
if(state.is(State.menu) && isShown()){
|
|
hide();
|
|
}
|
|
});
|
|
|
|
if(!mobile){
|
|
float dw = 220f;
|
|
cont.defaults().width(dw).height(55).pad(5f);
|
|
|
|
cont.addImageTextButton("$back", Icon.left, this::hide).colspan(2).width(dw * 2 + 20f);
|
|
|
|
cont.row();
|
|
if(world.isZone()){
|
|
cont.addImageTextButton("$techtree", Icon.tree, ui.tech::show);
|
|
}else{
|
|
cont.addImageTextButton("$database", Icon.book, ui.database::show);
|
|
}
|
|
cont.addImageTextButton("$settings", Icon.settings, ui.settings::show);
|
|
|
|
if(!state.rules.tutorial){
|
|
if(!world.isZone() && !state.isEditor()){
|
|
cont.row();
|
|
cont.addImageTextButton("$savegame", Icon.save, save::show);
|
|
cont.addImageTextButton("$loadgame", Icon.upload, load::show).disabled(b -> net.active());
|
|
}
|
|
|
|
cont.row();
|
|
|
|
cont.addImageTextButton("$hostserver", Icon.host, () -> {
|
|
if(net.server() && steam){
|
|
platform.inviteFriends();
|
|
}else{
|
|
if(steam){
|
|
ui.host.runHost();
|
|
}else{
|
|
ui.host.show();
|
|
}
|
|
}
|
|
}).disabled(b -> !((steam && net.server()) || !net.active())).colspan(2).width(dw * 2 + 20f).update(e -> e.setText(net.server() && steam ? "$invitefriends" : "$hostserver"));
|
|
}
|
|
|
|
cont.row();
|
|
|
|
cont.addImageTextButton("$quit", Icon.exit, this::showQuitConfirm).colspan(2).width(dw + 20f).update(s -> s.setText(control.saves.getCurrent() != null && control.saves.getCurrent().isAutosave() ? "$save.quit" : "$quit"));
|
|
|
|
}else{
|
|
cont.defaults().size(130f).pad(5);
|
|
cont.addRowImageTextButton("$back", Icon.play, this::hide);
|
|
cont.addRowImageTextButton("$settings", Icon.settings, ui.settings::show);
|
|
|
|
if(!world.isZone() && !state.isEditor()){
|
|
cont.addRowImageTextButton("$save", Icon.save, save::show);
|
|
|
|
cont.row();
|
|
|
|
cont.addRowImageTextButton("$load", Icon.download, load::show).disabled(b -> net.active());
|
|
}else{
|
|
cont.row();
|
|
}
|
|
|
|
cont.addRowImageTextButton("$hostserver.mobile", Icon.host, ui.host::show).disabled(b -> net.active());
|
|
|
|
cont.addRowImageTextButton("$quit", Icon.exit, this::showQuitConfirm).update(s -> {
|
|
s.setText(control.saves.getCurrent() != null && control.saves.getCurrent().isAutosave() ? "$save.quit" : "$quit");
|
|
s.getLabelCell().growX().wrap();
|
|
});
|
|
}
|
|
}
|
|
|
|
void showQuitConfirm(){
|
|
ui.showConfirm("$confirm", state.rules.tutorial ? "$quit.confirm.tutorial" : "$quit.confirm", () -> {
|
|
if(state.rules.tutorial){
|
|
Core.settings.put("playedtutorial", true);
|
|
Core.settings.save();
|
|
}
|
|
wasClient = net.client();
|
|
if(net.client()) netClient.disconnectQuietly();
|
|
runExitSave();
|
|
hide();
|
|
});
|
|
}
|
|
|
|
public void runExitSave(){
|
|
if(state.isEditor() && !wasClient){
|
|
ui.editor.resumeEditing();
|
|
return;
|
|
}
|
|
|
|
if(control.saves.getCurrent() == null || !control.saves.getCurrent().isAutosave() || state.rules.tutorial || wasClient){
|
|
state.set(State.menu);
|
|
logic.reset();
|
|
return;
|
|
}
|
|
|
|
ui.loadAnd("$saveload", () -> {
|
|
try{
|
|
control.saves.getCurrent().save();
|
|
}catch(Throwable e){
|
|
e.printStackTrace();
|
|
ui.showException("[accent]" + Core.bundle.get("savefail"), e);
|
|
}
|
|
state.set(State.menu);
|
|
logic.reset();
|
|
});
|
|
}
|
|
}
|