77 lines
2.0 KiB
Java
77 lines
2.0 KiB
Java
package mindustry.ui.dialogs;
|
|
|
|
import arc.*;
|
|
import arc.scene.ui.*;
|
|
import arc.util.*;
|
|
import mindustry.core.GameState.*;
|
|
import mindustry.game.EventType.*;
|
|
import mindustry.gen.*;
|
|
import mindustry.graphics.*;
|
|
|
|
import static mindustry.Vars.*;
|
|
|
|
public class BaseDialog extends Dialog{
|
|
protected boolean wasPaused;
|
|
/** If true, this dialog will pause the game while open. */
|
|
protected boolean shouldPause;
|
|
|
|
public BaseDialog(String title, DialogStyle style){
|
|
super(title, style);
|
|
setFillParent(true);
|
|
this.title.setAlignment(Align.center);
|
|
titleTable.row();
|
|
titleTable.image(Tex.whiteui, Pal.accent).growX().height(3f).pad(4f);
|
|
|
|
hidden(() -> {
|
|
if(shouldPause && state.isGame() && !net.active() && !wasPaused){
|
|
state.set(State.playing);
|
|
}
|
|
Sounds.back.play();
|
|
});
|
|
|
|
shown(() -> {
|
|
if(shouldPause && state.isGame() && !net.active()){
|
|
wasPaused = state.is(State.paused);
|
|
state.set(State.paused);
|
|
}
|
|
});
|
|
}
|
|
|
|
public BaseDialog(String title){
|
|
this(title, Core.scene.getStyle(DialogStyle.class));
|
|
}
|
|
|
|
/** Places the buttons as an overlay on top of the content. Used when the content can be scrolled through.*/
|
|
protected void makeButtonOverlay(){
|
|
clearChildren();
|
|
add(titleTable).growX().row();
|
|
stack(cont, buttons).grow();
|
|
buttons.bottom();
|
|
}
|
|
|
|
protected void onResize(Runnable run){
|
|
Events.on(ResizeEvent.class, event -> {
|
|
if(isShown() && Core.scene.getDialog() == this){
|
|
run.run();
|
|
updateScrollFocus();
|
|
}
|
|
});
|
|
}
|
|
|
|
public void addCloseListener(){
|
|
closeOnBack();
|
|
}
|
|
|
|
public void addCloseButton(float width){
|
|
buttons.defaults().size(width, 64f);
|
|
buttons.button("@back", Icon.left, this::hide).size(width, 64f);
|
|
|
|
addCloseListener();
|
|
}
|
|
|
|
@Override
|
|
public void addCloseButton(){
|
|
addCloseButton(210f);
|
|
}
|
|
}
|