WIP campaign difficulty dialog
This commit is contained in:
86
core/src/mindustry/ui/dialogs/CampaignRulesDialog.java
Normal file
86
core/src/mindustry/ui/dialogs/CampaignRulesDialog.java
Normal file
@@ -0,0 +1,86 @@
|
||||
package mindustry.ui.dialogs;
|
||||
|
||||
import arc.*;
|
||||
import arc.func.*;
|
||||
import arc.scene.ui.*;
|
||||
import arc.scene.ui.layout.*;
|
||||
import mindustry.*;
|
||||
import mindustry.game.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.ui.*;
|
||||
|
||||
public class CampaignRulesDialog extends BaseDialog{
|
||||
Planet planet;
|
||||
Table current;
|
||||
|
||||
public CampaignRulesDialog(){
|
||||
super("@campaign.difficulty");
|
||||
|
||||
addCloseButton();
|
||||
|
||||
hidden(() -> {
|
||||
if(planet != null){
|
||||
planet.saveRules();
|
||||
|
||||
if(Vars.state.isGame() && Vars.state.isCampaign() && Vars.state.getPlanet() == planet){
|
||||
planet.campaignRules.apply(Vars.state.rules);
|
||||
Call.setRules(Vars.state.rules);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void rebuild(){
|
||||
CampaignRules rules = planet.campaignRules;
|
||||
cont.clear();
|
||||
|
||||
cont.top().pane(inner -> {
|
||||
inner.top().left().defaults().fillX().left().pad(5);
|
||||
current = inner;
|
||||
|
||||
current.table(Tex.button, t -> {
|
||||
t.margin(10f);
|
||||
var group = new ButtonGroup<>();
|
||||
var style = Styles.flatTogglet;
|
||||
|
||||
t.defaults().size(140f, 50f);
|
||||
|
||||
for(Difficulty diff : Difficulty.all){
|
||||
t.button(diff.localized(), style, () -> {
|
||||
rules.difficulty = diff;
|
||||
}).group(group).checked(b -> rules.difficulty == diff);
|
||||
}
|
||||
}).left().fill(false).expand(false, false).row();
|
||||
|
||||
if(planet.allowSectorInvasion){
|
||||
check("@rules.invasions", b -> rules.sectorInvasion = b, () -> rules.sectorInvasion);
|
||||
}
|
||||
|
||||
check("@rules.fog", b -> rules.fog = b, () -> rules.fog);
|
||||
check("@rules.showspawns", b -> rules.showSpawns = b, () -> rules.showSpawns);
|
||||
}).growY();
|
||||
}
|
||||
|
||||
public void show(Planet planet){
|
||||
this.planet = planet;
|
||||
|
||||
rebuild();
|
||||
show();
|
||||
}
|
||||
|
||||
void check(String text, Boolc cons, Boolp prov){
|
||||
check(text, cons, prov, () -> true);
|
||||
}
|
||||
|
||||
void check(String text, Boolc cons, Boolp prov, Boolp condition){
|
||||
String infoText = text.substring(1) + ".info";
|
||||
var cell = current.check(text, cons).checked(prov.get()).update(a -> a.setDisabled(!condition.get()));
|
||||
if(Core.bundle.has(infoText)){
|
||||
cell.tooltip(text + ".info");
|
||||
}
|
||||
cell.get().left();
|
||||
current.row();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -329,7 +329,7 @@ public class CustomRulesDialog extends BaseDialog{
|
||||
|
||||
for(Planet planet : content.planets().select(p -> p.accessible && p.visible && p.isLandable())){
|
||||
t.button(planet.localizedName, style, () -> {
|
||||
planet.applyRules(rules);
|
||||
planet.applyRules(rules, true);
|
||||
}).group(group).checked(b -> rules.planet == planet);
|
||||
|
||||
if(t.getChildren().size % 3 == 0){
|
||||
|
||||
@@ -67,10 +67,11 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
public Label hoverLabel = new Label("");
|
||||
|
||||
private Texture[] planetTextures;
|
||||
private CampaignRulesDialog campaignRules = new CampaignRulesDialog();
|
||||
|
||||
public PlanetDialog(){
|
||||
super("", Styles.fullDialog);
|
||||
|
||||
|
||||
state.renderer = this;
|
||||
state.drawUi = true;
|
||||
|
||||
@@ -387,7 +388,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
//preset sectors can only be selected once unlocked
|
||||
if(sector.preset != null){
|
||||
TechNode node = sector.preset.techNode;
|
||||
return node == null || node.parent == null || (node.parent.content.unlocked() && (!(node.parent.content instanceof SectorPreset preset) || preset.sector.hasBase()));
|
||||
return sector.preset.unlocked() || node == null || node.parent == null || (node.parent.content.unlocked() && (!(node.parent.content instanceof SectorPreset preset) || preset.sector.hasBase()));
|
||||
}
|
||||
|
||||
return sector.planet.generator != null ?
|
||||
@@ -474,7 +475,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
if(state.uiAlpha > 0.001f){
|
||||
for(Sector sec : planet.sectors){
|
||||
if(sec.hasBase()){
|
||||
if(planet.allowSectorInvasion){
|
||||
if(planet.campaignRules.sectorInvasion){
|
||||
for(Sector enemy : sec.near()){
|
||||
if(enemy.hasEnemyBase()){
|
||||
planets.drawArc(planet, enemy.tile.v, sec.tile.v, Team.crux.color.write(Tmp.c2).a(state.uiAlpha), Color.clear, 0.24f, 110f, 25);
|
||||
@@ -612,6 +613,10 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
t.top().left();
|
||||
ScrollPane pane = new ScrollPane(null, Styles.smallPane);
|
||||
t.add(pane).colspan(2).row();
|
||||
t.button("@campaign.difficulty", Icon.bookSmall, () -> {
|
||||
campaignRules.show(state.planet);
|
||||
}).margin(12f).size(208f, 40f).padTop(12f).visible(() -> state.planet.allowCampaignRules).row();
|
||||
t.add().height(64f); //padding for close button
|
||||
Table starsTable = new Table(Styles.black);
|
||||
pane.setWidget(starsTable);
|
||||
pane.setScrollingDisabled(true, false);
|
||||
@@ -1133,7 +1138,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
|
||||
if(sector.isAttacked()){
|
||||
addSurvivedInfo(sector, stable, false);
|
||||
}else if(sector.hasBase() && sector.planet.allowSectorInvasion && sector.near().contains(Sector::hasEnemyBase)){
|
||||
}else if(sector.hasBase() && sector.planet.campaignRules.sectorInvasion && sector.near().contains(Sector::hasEnemyBase)){
|
||||
stable.add("@sectors.vulnerable");
|
||||
stable.row();
|
||||
}else if(!sector.hasBase() && sector.hasEnemyBase()){
|
||||
|
||||
Reference in New Issue
Block a user