diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index b2c41cd59d..a98c8ed03f 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -532,6 +532,8 @@ error.crashtitle = An error has occured blocks.input = Input blocks.output = Output blocks.booster = Booster +blocks.tiles = Required Tiles +blocks.affinities = Affinities block.unknown = [lightgray]??? blocks.powercapacity = Power Capacity blocks.powershot = Power/Shot diff --git a/core/src/mindustry/world/blocks/power/ThermalGenerator.java b/core/src/mindustry/world/blocks/power/ThermalGenerator.java index 6c1debe03b..cc40b6328e 100644 --- a/core/src/mindustry/world/blocks/power/ThermalGenerator.java +++ b/core/src/mindustry/world/blocks/power/ThermalGenerator.java @@ -13,11 +13,19 @@ import static mindustry.Vars.renderer; public class ThermalGenerator extends PowerGenerator{ public Effect generateEffect = Fx.none; + public Attribute attribute = Attribute.heat; public ThermalGenerator(String name){ super(name); } + @Override + public void setStats(){ + super.setStats(); + + stats.add(BlockStat.tiles, attribute); + } + @Override public void update(Tile tile){ GeneratorEntity entity = tile.ent(); @@ -29,7 +37,7 @@ public class ThermalGenerator extends PowerGenerator{ @Override public void drawPlace(int x, int y, int rotation, boolean valid){ - drawPlaceText(Core.bundle.formatFloat("bar.efficiency", sumAttribute(Attribute.heat, x, y) * 100, 1), x, y, valid); + drawPlaceText(Core.bundle.formatFloat("bar.efficiency", sumAttribute(attribute, x, y) * 100, 1), x, y, valid); } @Override @@ -43,7 +51,7 @@ public class ThermalGenerator extends PowerGenerator{ super.onProximityAdded(tile); GeneratorEntity entity = tile.ent(); - entity.productionEfficiency = sumAttribute(Attribute.heat, tile.x, tile.y); + entity.productionEfficiency = sumAttribute(attribute, tile.x, tile.y); } @Override @@ -56,6 +64,6 @@ public class ThermalGenerator extends PowerGenerator{ @Override public boolean canPlaceOn(Tile tile){ //make sure there's heat at this location - return tile.getLinkedTilesAs(this, tempTiles).sumf(other -> other.floor().attributes.get(Attribute.heat)) > 0.01f; + return tile.getLinkedTilesAs(this, tempTiles).sumf(other -> other.floor().attributes.get(attribute)) > 0.01f; } } diff --git a/core/src/mindustry/world/blocks/production/Cultivator.java b/core/src/mindustry/world/blocks/production/Cultivator.java index 3d924c1dbf..d4b5aa5014 100644 --- a/core/src/mindustry/world/blocks/production/Cultivator.java +++ b/core/src/mindustry/world/blocks/production/Cultivator.java @@ -1,17 +1,16 @@ package mindustry.world.blocks.production; -import arc.Core; -import arc.graphics.Color; +import arc.*; +import arc.graphics.*; import arc.graphics.g2d.*; -import arc.math.Mathf; -import arc.math.Rand; -import arc.util.Time; -import mindustry.content.Fx; -import mindustry.entities.type.TileEntity; -import mindustry.graphics.Pal; -import mindustry.ui.Bar; -import mindustry.world.Tile; -import mindustry.world.meta.Attribute; +import arc.math.*; +import arc.util.*; +import mindustry.content.*; +import mindustry.entities.type.*; +import mindustry.graphics.*; +import mindustry.ui.*; +import mindustry.world.*; +import mindustry.world.meta.*; import java.io.*; @@ -57,6 +56,13 @@ public class Cultivator extends GenericCrafter{ () -> ((CultivatorEntity)entity).warmup)); } + @Override + public void setStats(){ + super.setStats(); + + stats.add(BlockStat.affinities, attribute); + } + @Override public void drawPlace(int x, int y, int rotation, boolean valid){ drawPlaceText(Core.bundle.formatFloat("bar.efficiency", (1 + sumAttribute(attribute, x, y)) * 100, 1), x, y, valid); diff --git a/core/src/mindustry/world/blocks/production/SolidPump.java b/core/src/mindustry/world/blocks/production/SolidPump.java index ac199c7b27..395420069e 100644 --- a/core/src/mindustry/world/blocks/production/SolidPump.java +++ b/core/src/mindustry/world/blocks/production/SolidPump.java @@ -64,6 +64,7 @@ public class SolidPump extends Pump{ stats.remove(BlockStat.output); stats.add(BlockStat.output, result, 60f * pumpAmount, true); + stats.add(BlockStat.affinities, attribute); } @Override diff --git a/core/src/mindustry/world/meta/BlockStat.java b/core/src/mindustry/world/meta/BlockStat.java index 162df3dd37..089ad53e45 100644 --- a/core/src/mindustry/world/meta/BlockStat.java +++ b/core/src/mindustry/world/meta/BlockStat.java @@ -24,6 +24,7 @@ public enum BlockStat{ powerConnections(StatCategory.power), basePowerGeneration(StatCategory.power), + tiles(StatCategory.crafting), input(StatCategory.crafting), output(StatCategory.crafting), productionTime(StatCategory.crafting), @@ -45,7 +46,8 @@ public enum BlockStat{ ammo(StatCategory.shooting), booster(StatCategory.optional), - boostEffect(StatCategory.optional); + boostEffect(StatCategory.optional), + affinities(StatCategory.optional); public final StatCategory category; diff --git a/core/src/mindustry/world/meta/BlockStats.java b/core/src/mindustry/world/meta/BlockStats.java index 931482a49a..d91e25bc31 100644 --- a/core/src/mindustry/world/meta/BlockStats.java +++ b/core/src/mindustry/world/meta/BlockStats.java @@ -1,9 +1,11 @@ package mindustry.world.meta; -import arc.struct.Array; -import arc.struct.ObjectMap.Entry; -import arc.struct.OrderedMap; +import arc.math.*; +import arc.struct.*; +import arc.struct.ObjectMap.*; +import mindustry.*; import mindustry.type.*; +import mindustry.world.*; import mindustry.world.meta.values.*; /** Hold and organizes a list of block stats. */ @@ -36,6 +38,13 @@ public class BlockStats{ add(stat, new LiquidValue(liquid, amount, perSecond)); } + public void add(BlockStat stat, Attribute attr){ + for(Block block : Vars.content.blocks()){ + if(!block.isFloor() || Mathf.zero(block.asFloor().attributes.get(attr))) continue; + add(stat, new FloorValue(block.asFloor())); + } + } + /** Adds a single string value with this stat. */ public void add(BlockStat stat, String format, Object... args){ add(stat, new StringValue(format, args)); diff --git a/core/src/mindustry/world/meta/values/FloorValue.java b/core/src/mindustry/world/meta/values/FloorValue.java new file mode 100644 index 0000000000..7993a60eb0 --- /dev/null +++ b/core/src/mindustry/world/meta/values/FloorValue.java @@ -0,0 +1,21 @@ +package mindustry.world.meta.values; + +import arc.scene.ui.*; +import arc.scene.ui.layout.*; +import mindustry.ui.*; +import mindustry.world.blocks.*; +import mindustry.world.meta.*; + +public class FloorValue implements StatValue{ + private final Floor floor; + + public FloorValue(Floor floor){ + this.floor = floor; + } + + @Override + public void display(Table table){ + table.add(new Image(floor.icon(Cicon.small))).padRight(3); + table.add(floor.localizedName).padRight(3); + } +} \ No newline at end of file