* Update Team.java * Update ServerControl.java * better * kill me please * kill me please * kill me please * Update bundle_ca.properties * kill me please * Update bundle_da.properties * kill me please * kill me please * Update bundle_et.properties * Update bundle_eu.properties * Update bundle_fi.properties * Update bundle_fil.properties * Update bundle_fr.properties * Update bundle_hu.properties * Update bundle_id_ID.properties * Update bundle_ja.properties * Update bundle_ko.properties * Update bundle_lt.properties * Update bundle_nl.properties * Update bundle_nl_BE.properties * Update bundle_pl.properties * Update bundle_pt_BR.properties * Update bundle_pt_PT.properties * Update bundle_ro.properties * Update bundle_ru.properties * Update bundle_sr.properties * Update bundle_sv.properties * Update bundle_th.properties * Update bundle_tr.properties * Update bundle_tk.properties * Update bundle_uk_UA.properties * Update bundle_vi.properties * Update bundle_zh_CN.properties * Update bundle_zh_TW.properties * Update World.java * Update CustomRulesDialog.java * skill issue * skill issue x2 * skill issue x3
167 lines
5.5 KiB
Java
167 lines
5.5 KiB
Java
package mindustry.ui.dialogs;
|
|
|
|
import arc.*;
|
|
import arc.flabel.*;
|
|
import arc.math.*;
|
|
import arc.scene.actions.*;
|
|
import arc.scene.ui.*;
|
|
import arc.scene.ui.layout.*;
|
|
import arc.util.*;
|
|
import mindustry.core.GameState.*;
|
|
import mindustry.game.EventType.*;
|
|
import mindustry.game.*;
|
|
import mindustry.gen.*;
|
|
import mindustry.graphics.*;
|
|
import mindustry.ui.*;
|
|
|
|
import static mindustry.Vars.*;
|
|
|
|
public class GameOverDialog extends BaseDialog{
|
|
private Team winner;
|
|
private boolean hudShown;
|
|
|
|
public GameOverDialog(){
|
|
super("@gameover");
|
|
setFillParent(true);
|
|
|
|
titleTable.remove();
|
|
|
|
shown(() -> {
|
|
hudShown = ui.hudfrag.shown;
|
|
ui.hudfrag.shown = false;
|
|
rebuild();
|
|
});
|
|
|
|
hidden(() -> ui.hudfrag.shown = hudShown);
|
|
|
|
Events.on(ResetEvent.class, e -> hide());
|
|
}
|
|
|
|
public void show(Team winner){
|
|
this.winner = winner;
|
|
show();
|
|
if(winner == player.team()){
|
|
Events.fire(new WinEvent());
|
|
}else{
|
|
Events.fire(new LoseEvent());
|
|
}
|
|
}
|
|
|
|
void rebuild(){
|
|
buttons.clear();
|
|
cont.clear();
|
|
|
|
buttons.margin(10);
|
|
|
|
cont.table(t -> {
|
|
if(state.rules.pvp && winner != null){
|
|
t.add(Core.bundle.format("gameover.pvp", winner.coloredName())).center().pad(6);
|
|
}else{
|
|
t.add(state.isCampaign() ? Core.bundle.format("sector.lost", state.getSector().name()) : "@gameover").center().pad(6);
|
|
}
|
|
t.row();
|
|
|
|
if(control.isHighScore()){
|
|
t.add("@highscore").pad(6);
|
|
t.row();
|
|
}
|
|
|
|
t.pane(p -> {
|
|
p.margin(13f);
|
|
p.left().defaults().left();
|
|
p.setBackground(Styles.black3);
|
|
|
|
p.table(stats -> {
|
|
if(state.rules.waves) addStat(stats, Core.bundle.get("stats.wave"), state.stats.wavesLasted, 0f);
|
|
addStat(stats, Core.bundle.get("stats.unitsCreated"), state.stats.unitsCreated, 0.05f);
|
|
addStat(stats, Core.bundle.get("stats.enemiesDestroyed"), state.stats.enemyUnitsDestroyed, 0.1f);
|
|
addStat(stats, Core.bundle.get("stats.built"), state.stats.buildingsBuilt, 0.15f);
|
|
addStat(stats, Core.bundle.get("stats.destroyed"), state.stats.buildingsDestroyed, 0.2f);
|
|
addStat(stats, Core.bundle.get("stats.deconstructed"), state.stats.buildingsDeconstructed, 0.25f);
|
|
}).top().grow().row();
|
|
|
|
if(control.saves.getCurrent() != null){
|
|
p.table(pt -> {
|
|
pt.add(new FLabel(Core.bundle.get("stats.playtime"))).left().pad(5).growX();
|
|
pt.add(new FLabel("[accent]" + control.saves.getCurrent().getPlayTime())).right().pad(5);
|
|
}).growX();
|
|
}
|
|
}).grow().pad(12).top();
|
|
}).center().minWidth(370).maxSize(600, 550).grow();
|
|
|
|
if(state.isCampaign() && net.client()){
|
|
cont.row();
|
|
cont.add("@gameover.waiting").padTop(20f).row();
|
|
}
|
|
|
|
if(state.isCampaign()){
|
|
if(net.client()){
|
|
buttons.button("@gameover.disconnect", () -> {
|
|
logic.reset();
|
|
net.reset();
|
|
hide();
|
|
state.set(State.menu);
|
|
}).size(170f, 60f);
|
|
}else{
|
|
buttons.button("@continue", () -> {
|
|
hide();
|
|
ui.planet.show();
|
|
}).size(170f, 60f);
|
|
}
|
|
}else{
|
|
buttons.button("@menu", () -> {
|
|
hide();
|
|
if(!ui.paused.checkPlaytest()){
|
|
logic.reset();
|
|
}
|
|
}).size(140f, 60f);
|
|
}
|
|
}
|
|
|
|
private void addStat(Table parent, String stat, int value, float delay){
|
|
parent.add(new StatLabel(stat, value, delay)).top().pad(5).growX().height(50).row();
|
|
}
|
|
|
|
private static class StatLabel extends Table {
|
|
private float progress = 0;
|
|
|
|
public StatLabel(String stat, int value, float delay){
|
|
setTransform(true);
|
|
setClip(true);
|
|
setBackground(Tex.whiteui);
|
|
setColor(Pal.accent);
|
|
margin(2f);
|
|
|
|
FLabel statLabel = new FLabel(stat);
|
|
statLabel.setStyle(Styles.outlineLabel);
|
|
statLabel.setWrap(true);
|
|
statLabel.pause();
|
|
|
|
Label valueLabel = new Label("", Styles.outlineLabel);
|
|
valueLabel.setAlignment(Align.right);
|
|
|
|
add(statLabel).left().growX().padLeft(5);
|
|
add(valueLabel).right().growX().padRight(5);
|
|
|
|
actions(
|
|
Actions.scaleTo(0, 1),
|
|
Actions.delay(delay),
|
|
Actions.parallel(
|
|
Actions.scaleTo(1, 1, 0.3f, Interp.pow3Out),
|
|
Actions.color(Pal.darkestGray, 0.3f, Interp.pow3Out),
|
|
Actions.sequence(
|
|
Actions.delay(0.3f),
|
|
Actions.run(() -> {
|
|
valueLabel.update(() -> {
|
|
progress = Math.min(1, progress + (Time.delta / 60));
|
|
valueLabel.setText("" + (int)Mathf.lerp(0, value, value < 10 ? progress : Interp.slowFast.apply(progress)));
|
|
});
|
|
statLabel.resume();
|
|
})
|
|
)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|