Dynamic selection of planet tech in rules dialog (#8487)

* Dynamic selection of planets in rules dialog

* Code cleanup

* Do not let Anuken/Mindustry#8494 happen again

* Fixed inconsistency with campaign sectors
This commit is contained in:
Slotterleet
2023-06-02 17:41:12 +02:00
committed by GitHub
parent 4e0e48ea32
commit 38b9027000
4 changed files with 13 additions and 9 deletions

View File

@@ -320,6 +320,7 @@ public class World{
state.rules.cloudColor = sector.planet.landCloudColor;
state.rules.env = sector.planet.defaultEnv;
state.rules.planet = sector.planet;
state.rules.hiddenBuildItems.clear();
state.rules.hiddenBuildItems.addAll(sector.planet.hiddenItems);
sector.planet.applyRules(state.rules);

View File

@@ -191,6 +191,8 @@ public class Rules{
public float backgroundOffsetX = 0.1f, backgroundOffsetY = 0.1f;
/** Parameters for planet rendered in the background. Cannot be changed once a map is loaded. */
public @Nullable PlanetParams planetBackground;
/** Rules from this planet are applied. If it's {@code sun}, mixed tech is enabled. */
public Planet planet = Planets.serpulo;
/** Copies this ruleset exactly. Not efficient at all, do not use often. */
public Rules copy(){

View File

@@ -211,6 +211,7 @@ public class Planet extends UnlockableContent{
rules.attributes.clear();
rules.attributes.add(defaultAttributes);
rules.env = defaultEnv;
rules.planet = this;
rules.hiddenBuildItems.clear();
rules.hiddenBuildItems.addAll(hiddenItems);
}

View File

@@ -249,15 +249,14 @@ public class CustomRulesDialog extends BaseDialog{
t.defaults().size(140f, 50f);
//TODO dynamic selection of planets
for(Planet planet : new Planet[]{Planets.serpulo, Planets.erekir}){
for(Planet planet : content.planets().select(p -> p.accessible && p.visible && p.isLandable())){
t.button(planet.localizedName, style, () -> {
rules.env = planet.defaultEnv;
rules.attributes.clear();
rules.attributes.add(planet.defaultAttributes);
rules.hiddenBuildItems.clear();
rules.hiddenBuildItems.addAll(planet.hiddenItems);
}).group(group).checked(b -> rules.env == planet.defaultEnv);
planet.applyRules(rules);
}).group(group).checked(b -> rules.planet == planet);
if(t.getChildren().size % 3 == 0){
t.row();
}
}
t.button("@rules.anyenv", style, () -> {
@@ -267,8 +266,9 @@ public class CustomRulesDialog extends BaseDialog{
}else{
rules.env = Vars.defaultEnv;
rules.hiddenBuildItems.clear();
rules.planet = Planets.sun;
}
}).group(group).checked(b -> rules.hiddenBuildItems.size == 0);
}).group(group).checked(b -> rules.planet == Planets.sun);
}).left().fill(false).expand(false, false).row();
title("@rules.title.teams");