From 016e5ab97e30ea105f6f1148d1266d92e28fb71f Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 17 Jun 2021 11:08:01 -0400 Subject: [PATCH] Env rules for many various blocks --- core/src/mindustry/content/Blocks.java | 1 + core/src/mindustry/content/Planets.java | 23 +----------- .../maps/planet/AsteroidGenerator.java | 37 +++++++++++++++++++ .../mindustry/world/blocks/defense/Wall.java | 3 ++ .../blocks/defense/turrets/PowerTurret.java | 1 + .../world/blocks/liquid/Conduit.java | 1 + .../world/blocks/liquid/LiquidBlock.java | 1 + .../world/blocks/logic/LogicBlock.java | 3 ++ .../mindustry/world/blocks/power/Battery.java | 2 + .../world/blocks/power/DecayGenerator.java | 2 + .../world/blocks/power/ImpactReactor.java | 1 + .../world/blocks/power/NuclearReactor.java | 1 + .../world/blocks/power/PowerNode.java | 1 + .../world/blocks/power/SolarGenerator.java | 1 + .../world/blocks/production/BeamDrill.java | 3 ++ .../world/blocks/production/SolidPump.java | 2 + .../world/blocks/storage/StorageBlock.java | 1 + .../world/blocks/storage/Unloader.java | 1 + .../world/blocks/units/CommandCenter.java | 1 + 19 files changed, 64 insertions(+), 22 deletions(-) create mode 100644 core/src/mindustry/maps/planet/AsteroidGenerator.java diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 16e1af2d52..c7beacbe6b 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -730,6 +730,7 @@ public class Blocks implements ContentList{ solid = true; outputsLiquid = true; drawer = new DrawMixer(); + envEnabled = Env.any; consumes.power(1f); consumes.item(Items.titanium); diff --git a/core/src/mindustry/content/Planets.java b/core/src/mindustry/content/Planets.java index 4adb33b98d..731ecd2506 100644 --- a/core/src/mindustry/content/Planets.java +++ b/core/src/mindustry/content/Planets.java @@ -6,15 +6,10 @@ import arc.math.geom.*; import arc.struct.*; import arc.util.*; import mindustry.ctype.*; -import mindustry.game.*; import mindustry.graphics.g3d.*; import mindustry.graphics.g3d.PlanetGrid.*; -import mindustry.maps.generators.*; import mindustry.maps.planet.*; import mindustry.type.*; -import mindustry.world.meta.*; - -import static mindustry.Vars.*; public class Planets implements ContentList{ public static Planet @@ -70,23 +65,7 @@ public class Planets implements ContentList{ drawOrbit = false; orbitOffset = offsets[fi]; - generator = new BlankPlanetGenerator(){ - @Override - public void generate(){ - pass((x, y) -> { - floor = Blocks.space; - }); - - Schematics.placeLaunchLoadout(width/2, height/2); - - state.rules.environment = Env.space; - } - - @Override - public int getSectorSize(Sector sector){ - return 300; - } - }; + generator = new AsteroidGenerator(); meshLoader = () -> { Seq meshes = new Seq<>(); diff --git a/core/src/mindustry/maps/planet/AsteroidGenerator.java b/core/src/mindustry/maps/planet/AsteroidGenerator.java new file mode 100644 index 0000000000..70b266e2dd --- /dev/null +++ b/core/src/mindustry/maps/planet/AsteroidGenerator.java @@ -0,0 +1,37 @@ +package mindustry.maps.planet; + +import arc.math.*; +import arc.util.noise.*; +import mindustry.content.*; +import mindustry.game.*; +import mindustry.maps.generators.*; +import mindustry.type.*; +import mindustry.world.meta.*; + +import static mindustry.Vars.*; + +public class AsteroidGenerator extends BlankPlanetGenerator{ + + @Override + public void generate(){ + int seed = state.rules.sector.planet.id; + int sx = width/2, sy = height/2; + + pass((x, y) -> { + floor = Blocks.space; + + if(Simplex.noise2d(seed, 5, 0.6f, 1f/ 100f, x, y) + Mathf.dst(x, y, sx, sy) / (float)width / 2f > 0.7f){ + floor = Blocks.stone; + } + }); + + Schematics.placeLaunchLoadout(sx, sy); + + state.rules.environment = Env.space; + } + + @Override + public int getSectorSize(Sector sector){ + return 450; + } +} diff --git a/core/src/mindustry/world/blocks/defense/Wall.java b/core/src/mindustry/world/blocks/defense/Wall.java index d8d1c620b4..b2fc1e08c8 100644 --- a/core/src/mindustry/world/blocks/defense/Wall.java +++ b/core/src/mindustry/world/blocks/defense/Wall.java @@ -36,6 +36,9 @@ public class Wall extends Block{ buildCostMultiplier = 6f; canOverdrive = false; drawDisabled = false; + + //it's a wall of course it's supported everywhere + envEnabled = Env.any; } @Override diff --git a/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java b/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java index be1d3c25b8..7dc4eed3f6 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java @@ -12,6 +12,7 @@ public class PowerTurret extends Turret{ public PowerTurret(String name){ super(name); hasPower = true; + envEnabled |= Env.space; } @Override diff --git a/core/src/mindustry/world/blocks/liquid/Conduit.java b/core/src/mindustry/world/blocks/liquid/Conduit.java index 393af2e8e5..11a4014df3 100644 --- a/core/src/mindustry/world/blocks/liquid/Conduit.java +++ b/core/src/mindustry/world/blocks/liquid/Conduit.java @@ -18,6 +18,7 @@ import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.*; import mindustry.world.blocks.distribution.*; +import mindustry.world.meta.*; import static mindustry.Vars.*; diff --git a/core/src/mindustry/world/blocks/liquid/LiquidBlock.java b/core/src/mindustry/world/blocks/liquid/LiquidBlock.java index eb9a3f16d3..ec5d40f571 100644 --- a/core/src/mindustry/world/blocks/liquid/LiquidBlock.java +++ b/core/src/mindustry/world/blocks/liquid/LiquidBlock.java @@ -19,6 +19,7 @@ public class LiquidBlock extends Block{ hasLiquids = true; group = BlockGroup.liquids; outputsLiquid = true; + envEnabled |= Env.space | Env.underwater; } @Override diff --git a/core/src/mindustry/world/blocks/logic/LogicBlock.java b/core/src/mindustry/world/blocks/logic/LogicBlock.java index a12ed08399..ff22cd7ffa 100644 --- a/core/src/mindustry/world/blocks/logic/LogicBlock.java +++ b/core/src/mindustry/world/blocks/logic/LogicBlock.java @@ -42,6 +42,9 @@ public class LogicBlock extends Block{ group = BlockGroup.logic; schematicPriority = 5; + //universal, no real requirements + envEnabled = Env.any; + config(byte[].class, (LogicBuild build, byte[] data) -> build.readCompressed(data, true)); config(Integer.class, (LogicBuild entity, Integer pos) -> { diff --git a/core/src/mindustry/world/blocks/power/Battery.java b/core/src/mindustry/world/blocks/power/Battery.java index f0cff96156..b3d36969fc 100644 --- a/core/src/mindustry/world/blocks/power/Battery.java +++ b/core/src/mindustry/world/blocks/power/Battery.java @@ -21,6 +21,8 @@ public class Battery extends PowerDistributor{ outputsPower = true; consumesPower = true; flags = EnumSet.of(BlockFlag.battery); + //TODO could be supported everywhere... + envEnabled |= Env.space; } public class BatteryBuild extends Building{ diff --git a/core/src/mindustry/world/blocks/power/DecayGenerator.java b/core/src/mindustry/world/blocks/power/DecayGenerator.java index becce39642..0bb9e2eac9 100644 --- a/core/src/mindustry/world/blocks/power/DecayGenerator.java +++ b/core/src/mindustry/world/blocks/power/DecayGenerator.java @@ -1,6 +1,7 @@ package mindustry.world.blocks.power; import mindustry.type.*; +import mindustry.world.meta.*; public class DecayGenerator extends ItemLiquidGenerator{ @@ -8,6 +9,7 @@ public class DecayGenerator extends ItemLiquidGenerator{ super(true, false, name); hasItems = true; hasLiquids = false; + envEnabled = Env.any; } @Override diff --git a/core/src/mindustry/world/blocks/power/ImpactReactor.java b/core/src/mindustry/world/blocks/power/ImpactReactor.java index 64e94d8c14..3679b2be80 100644 --- a/core/src/mindustry/world/blocks/power/ImpactReactor.java +++ b/core/src/mindustry/world/blocks/power/ImpactReactor.java @@ -43,6 +43,7 @@ public class ImpactReactor extends PowerGenerator{ flags = EnumSet.of(BlockFlag.reactor, BlockFlag.generator); lightRadius = 115f; emitLight = true; + envEnabled = Env.any; } @Override diff --git a/core/src/mindustry/world/blocks/power/NuclearReactor.java b/core/src/mindustry/world/blocks/power/NuclearReactor.java index 6ed9f11189..a26a99d5cd 100644 --- a/core/src/mindustry/world/blocks/power/NuclearReactor.java +++ b/core/src/mindustry/world/blocks/power/NuclearReactor.java @@ -56,6 +56,7 @@ public class NuclearReactor extends PowerGenerator{ rebuildable = false; flags = EnumSet.of(BlockFlag.reactor, BlockFlag.generator); schematicPriority = -5; + envEnabled = Env.any; } @Override diff --git a/core/src/mindustry/world/blocks/power/PowerNode.java b/core/src/mindustry/world/blocks/power/PowerNode.java index 313d995340..2cf6718522 100644 --- a/core/src/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/mindustry/world/blocks/power/PowerNode.java @@ -45,6 +45,7 @@ public class PowerNode extends PowerBlock{ swapDiagonalPlacement = true; schematicPriority = -10; drawDisabled = false; + envEnabled |= Env.space; config(Integer.class, (entity, value) -> { PowerModule power = entity.power; diff --git a/core/src/mindustry/world/blocks/power/SolarGenerator.java b/core/src/mindustry/world/blocks/power/SolarGenerator.java index 84e0b0ba81..bac6345115 100644 --- a/core/src/mindustry/world/blocks/power/SolarGenerator.java +++ b/core/src/mindustry/world/blocks/power/SolarGenerator.java @@ -12,6 +12,7 @@ public class SolarGenerator extends PowerGenerator{ super(name); //remove the BlockFlag.generator flag to make this a lower priority target than other generators. flags = EnumSet.of(); + envEnabled = Env.any; } @Override diff --git a/core/src/mindustry/world/blocks/production/BeamDrill.java b/core/src/mindustry/world/blocks/production/BeamDrill.java index 32ffdc90d2..37d9ccd8a5 100644 --- a/core/src/mindustry/world/blocks/production/BeamDrill.java +++ b/core/src/mindustry/world/blocks/production/BeamDrill.java @@ -14,6 +14,7 @@ import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; import mindustry.world.*; +import mindustry.world.meta.*; import static mindustry.Vars.*; @@ -37,6 +38,8 @@ public class BeamDrill extends Block{ update = true; solid = true; drawArrow = false; + + envEnabled |= Env.space; } @Override diff --git a/core/src/mindustry/world/blocks/production/SolidPump.java b/core/src/mindustry/world/blocks/production/SolidPump.java index e13090ec4e..109ac57658 100644 --- a/core/src/mindustry/world/blocks/production/SolidPump.java +++ b/core/src/mindustry/world/blocks/production/SolidPump.java @@ -31,6 +31,8 @@ public class SolidPump extends Pump{ public SolidPump(String name){ super(name); hasPower = true; + //only supports ground by default + envEnabled = Env.terrestrial; } @Override diff --git a/core/src/mindustry/world/blocks/storage/StorageBlock.java b/core/src/mindustry/world/blocks/storage/StorageBlock.java index 006d462e6f..f93c220e03 100644 --- a/core/src/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/mindustry/world/blocks/storage/StorageBlock.java @@ -22,6 +22,7 @@ public class StorageBlock extends Block{ destructible = true; group = BlockGroup.transportation; flags = EnumSet.of(BlockFlag.storage); + envEnabled = Env.any; } @Override diff --git a/core/src/mindustry/world/blocks/storage/Unloader.java b/core/src/mindustry/world/blocks/storage/Unloader.java index d43015b7cf..d535952e70 100644 --- a/core/src/mindustry/world/blocks/storage/Unloader.java +++ b/core/src/mindustry/world/blocks/storage/Unloader.java @@ -28,6 +28,7 @@ public class Unloader extends Block{ itemCapacity = 0; noUpdateDisabled = true; unloadable = false; + envEnabled = Env.any; config(Item.class, (UnloaderBuild tile, Item item) -> tile.sortItem = item); configClear((UnloaderBuild tile) -> tile.sortItem = null); diff --git a/core/src/mindustry/world/blocks/units/CommandCenter.java b/core/src/mindustry/world/blocks/units/CommandCenter.java index a2c9f34007..5ad9de807e 100644 --- a/core/src/mindustry/world/blocks/units/CommandCenter.java +++ b/core/src/mindustry/world/blocks/units/CommandCenter.java @@ -36,6 +36,7 @@ public class CommandCenter extends Block{ configurable = true; drawDisabled = false; logicConfigurable = true; + envEnabled = Env.any; config(UnitCommand.class, (CommandBuild build, UnitCommand command) -> { if(build.team.data().command != command){