Files
Mindustry/core/src/mindustry/ui/dialogs/BaseDialog.java
2023-06-11 23:18:04 -04:00

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