diff --git a/core/src/mindustry/core/World.java b/core/src/mindustry/core/World.java index c08c186b2b..7dacad6e59 100644 --- a/core/src/mindustry/core/World.java +++ b/core/src/mindustry/core/World.java @@ -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); diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index 177021f1cb..ede6161f49 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -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(){ diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index e63db3a4e8..68c07a239b 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -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); } diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index f1f574f954..1708005773 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -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");