From 9633c57fe0e4764470bc3f736bbc7ee5d8a85d95 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 18 Feb 2022 18:06:33 -0500 Subject: [PATCH] Erekir rule option --- core/assets/bundles/bundle.properties | 2 ++ core/src/mindustry/core/Renderer.java | 2 +- core/src/mindustry/core/World.java | 2 +- .../mindustry/entities/comp/BuildingComp.java | 2 +- .../src/mindustry/entities/comp/UnitComp.java | 2 +- core/src/mindustry/game/Rules.java | 4 ++-- .../maps/planet/AsteroidGenerator.java | 2 +- .../maps/planet/ErekirPlanetGenerator.java | 2 +- .../maps/planet/SerpuloPlanetGenerator.java | 2 +- .../maps/planet/TantrosPlanetGenerator.java | 2 +- .../ui/dialogs/CustomRulesDialog.java | 20 +++++++++++++++++++ .../ui/fragments/PlacementFragment.java | 4 ++-- core/src/mindustry/world/Block.java | 2 +- .../world/blocks/payloads/PayloadRouter.java | 2 +- .../world/blocks/payloads/PayloadSource.java | 2 +- .../world/blocks/storage/CoreBlock.java | 2 +- 16 files changed, 38 insertions(+), 16 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 68ffc71fc4..52a4df78fa 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -640,6 +640,7 @@ threat.eradication = Eradication planets = Planets planet.serpulo.name = Serpulo +planet.erekir.name = Erekir planet.sun.name = Sun sector.impact0078.name = Impact 0078 @@ -1085,6 +1086,7 @@ rules.title.unit = Units rules.title.experimental = Experimental rules.title.environment = Environment rules.title.teams = Teams +rules.title.planet = Planet rules.lighting = Lighting rules.enemyLights = Enemy Lights rules.fire = Fire diff --git a/core/src/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java index 56043a4f78..b613ca78fc 100644 --- a/core/src/mindustry/core/Renderer.java +++ b/core/src/mindustry/core/Renderer.java @@ -319,7 +319,7 @@ public class Renderer implements ApplicationListener{ //render all matching environments for(var renderer : envRenderers){ - if((renderer.env & state.rules.environment) == renderer.env){ + if((renderer.env & state.rules.env) == renderer.env){ renderer.renderer.run(); } } diff --git a/core/src/mindustry/core/World.java b/core/src/mindustry/core/World.java index 1564f0bffa..18bc72cdc8 100644 --- a/core/src/mindustry/core/World.java +++ b/core/src/mindustry/core/World.java @@ -308,7 +308,7 @@ public class World{ } state.rules.cloudColor = sector.planet.landCloudColor; - state.rules.environment = sector.planet.defaultEnv; + state.rules.env = sector.planet.defaultEnv; state.rules.hiddenBuildItems.clear(); state.rules.hiddenBuildItems.addAll(sector.planet.hiddenItems); sector.planet.ruleSetter.get(state.rules); diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 098341f1d0..aa8246242a 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -502,7 +502,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, /** @return whether this block is allowed to update based on team/environment */ public boolean allowUpdate(){ - return team != Team.derelict && block.supportsEnv(state.rules.environment); + return team != Team.derelict && block.supportsEnv(state.rules.env); } public BlockStatus status(){ diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index fda535b269..cc29aa5f1b 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -382,7 +382,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I wasHealed = false; //check if environment is unsupported - if(!type.supportsEnv(state.rules.environment) && !dead){ + if(!type.supportsEnv(state.rules.env) && !dead){ Call.unitEnvDeath(self()); team.data().updateCount(type, -1); } diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index cfa1196db1..ef0c9a277a 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -92,7 +92,7 @@ public class Rules{ /** Environment drag multiplier. */ public float dragMultiplier = 1f; /** Environmental flags that dictate visuals & how blocks function. */ - public int environment = Env.terrestrial | Env.spores | Env.groundOil | Env.groundWater | Env.oxygen; + public int env = Env.terrestrial | Env.spores | Env.groundOil | Env.groundWater | Env.oxygen; /** Attributes of the environment. */ public Attributes attributes = new Attributes(); /** Sector for saves that have them. */ @@ -176,7 +176,7 @@ public class Rules{ } public boolean hasEnv(int env){ - return (environment & env) != 0; + return (this.env & env) != 0; } public float unitBuildSpeed(Team team){ diff --git a/core/src/mindustry/maps/planet/AsteroidGenerator.java b/core/src/mindustry/maps/planet/AsteroidGenerator.java index 959d1564e5..301d5c2e9c 100644 --- a/core/src/mindustry/maps/planet/AsteroidGenerator.java +++ b/core/src/mindustry/maps/planet/AsteroidGenerator.java @@ -142,7 +142,7 @@ public class AsteroidGenerator extends BlankPlanetGenerator{ state.rules.dragMultiplier = 0.7f; //yes, space actually has 0 drag but true 0% drag is very annoying state.rules.borderDarkness = false; - state.rules.environment = Env.space; + state.rules.env = Env.space; state.rules.waves = true; //TODO ??? diff --git a/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java b/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java index 7c606678e7..c78709ada2 100644 --- a/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java @@ -443,7 +443,7 @@ public class ErekirPlanetGenerator extends PlanetGenerator{ //it is very hot state.rules.attributes.set(Attribute.heat, 0.8f); - state.rules.environment = sector.planet.defaultEnv; + state.rules.env = sector.planet.defaultEnv; state.rules.placeRangeCheck = true; //TODO remove slag and arkycite around core. diff --git a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java index ce917f8d40..8dc0312489 100644 --- a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java @@ -645,7 +645,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ state.rules.waveSpacing = Mathf.lerp(60 * 65 * 2, 60f * 60f * 1f, Math.max(difficulty - waveTimeDec, 0f)); state.rules.waves = sector.info.waves = true; - state.rules.environment = sector.planet.defaultEnv; + state.rules.env = sector.planet.defaultEnv; state.rules.enemyCoreBuildRadius = 600f; //spawn air only when spawn is blocked diff --git a/core/src/mindustry/maps/planet/TantrosPlanetGenerator.java b/core/src/mindustry/maps/planet/TantrosPlanetGenerator.java index e2b5d3309b..a3803e4d36 100644 --- a/core/src/mindustry/maps/planet/TantrosPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/TantrosPlanetGenerator.java @@ -87,7 +87,7 @@ public class TantrosPlanetGenerator extends PlanetGenerator{ Schematics.placeLaunchLoadout(width / 2, height / 2); - Vars.state.rules.environment = Env.underwater; + Vars.state.rules.env = Env.underwater; state.rules.canGameOver = false; } diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 8a18f2feeb..5ea8acfa70 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -214,6 +214,26 @@ public class CustomRulesDialog extends BaseDialog{ main.button("@rules.weather", this::weatherDialog).width(250f).left().row(); + title("@rules.title.planet"); + + main.table(Tex.button, t -> { + t.margin(10f); + var group = new ButtonGroup<>(); + var style = Styles.clearTogglet; + + t.defaults().size(140f, 50f); + + //TODO dynamic selection + for(Planet planet : new Planet[]{Planets.serpulo, Planets.erekir}){ + t.button(planet.localizedName, style, () -> { + rules.env = planet.defaultEnv; + rules.hiddenBuildItems.clear(); + rules.hiddenBuildItems.addAll(planet.hiddenItems); + planet.ruleSetter.get(rules); + }).group(group).checked(rules.env == planet.defaultEnv); + } + }).left().fill(false).expand(false, false).row(); + title("@rules.title.teams"); team("@rules.playerteam", t -> rules.defaultTeam = t, () -> rules.defaultTeam); diff --git a/core/src/mindustry/ui/fragments/PlacementFragment.java b/core/src/mindustry/ui/fragments/PlacementFragment.java index 82303ff20f..87b8890aee 100644 --- a/core/src/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/mindustry/ui/fragments/PlacementFragment.java @@ -373,7 +373,7 @@ public class PlacementFragment extends Fragment{ topTable.row(); topTable.table(b -> { b.image(Icon.cancel).padRight(2).color(Color.scarlet); - b.add(!player.isBuilder() ? "@unit.nobuild" : !displayBlock.supportsEnv(state.rules.environment) ? "@unsupported.environment" : "@banned").width(190f).wrap(); + b.add(!player.isBuilder() ? "@unit.nobuild" : !displayBlock.supportsEnv(state.rules.env) ? "@unsupported.environment" : "@banned").width(190f).wrap(); b.left(); }).padTop(2).left(); } @@ -552,7 +552,7 @@ public class PlacementFragment extends Fragment{ boolean unlocked(Block block){ return block.unlockedNow() && block.placeablePlayer && block.environmentBuildable() && - block.supportsEnv(state.rules.environment); //TODO this hides env unsupported blocks, not always a good thing + block.supportsEnv(state.rules.env); //TODO this hides env unsupported blocks, not always a good thing } boolean hasInfoBox(){ diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index e7588195c6..df7b0cc865 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -809,7 +809,7 @@ public class Block extends UnlockableContent implements Senseable{ } public boolean isPlaceable(){ - return isVisible() && (!state.rules.bannedBlocks.contains(this) || state.rules.editor) && supportsEnv(state.rules.environment); + return isVisible() && (!state.rules.bannedBlocks.contains(this) || state.rules.editor) && supportsEnv(state.rules.env); } /** @return whether this block supports a specific environment. */ diff --git a/core/src/mindustry/world/blocks/payloads/PayloadRouter.java b/core/src/mindustry/world/blocks/payloads/PayloadRouter.java index 9986937639..5393a01b46 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadRouter.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadRouter.java @@ -48,7 +48,7 @@ public class PayloadRouter extends PayloadConveyor{ } public boolean canSort(UnitType t){ - return !t.isHidden() && !t.isBanned() && t.supportsEnv(state.rules.environment); + return !t.isHidden() && !t.isBanned() && t.supportsEnv(state.rules.env); } public class PayloadRouterBuild extends PayloadConveyorBuild{ diff --git a/core/src/mindustry/world/blocks/payloads/PayloadSource.java b/core/src/mindustry/world/blocks/payloads/PayloadSource.java index 4411d52193..d33be38b9b 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadSource.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadSource.java @@ -77,7 +77,7 @@ public class PayloadSource extends PayloadBlock{ } public boolean canProduce(UnitType t){ - return !t.isHidden() && !t.isBanned() && t.supportsEnv(state.rules.environment); + return !t.isHidden() && !t.isBanned() && t.supportsEnv(state.rules.env); } public class PayloadSourceBuild extends PayloadBlockBuild{ diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index 3dd64ac05a..2f0aec4685 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -276,7 +276,7 @@ public class CoreBlock extends StorageBlock{ public void requestSpawn(Player player){ //do not try to respawn in unsupported environments at all - if(!unitType.supportsEnv(state.rules.environment)) return; + if(!unitType.supportsEnv(state.rules.env)) return; Call.playerSpawn(tile, player); }