From 1665e7506844f411c34f1939738e85b96fade92e Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 12 Feb 2019 00:06:08 -0500 Subject: [PATCH] Improved block bar config --- core/src/io/anuke/mindustry/world/Block.java | 46 ++++++++++--------- .../anuke/mindustry/world/BlockStorage.java | 2 + .../anuke/mindustry/world/meta/BlockBars.java | 22 +++++++++ 3 files changed, 49 insertions(+), 21 deletions(-) create mode 100644 core/src/io/anuke/mindustry/world/meta/BlockBars.java diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 080cb57c69..0867765cda 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -6,7 +6,7 @@ import io.anuke.arc.Graphics.Cursor.SystemCursor; import io.anuke.arc.collection.Array; import io.anuke.arc.collection.EnumSet; import io.anuke.arc.function.BooleanProvider; -import io.anuke.arc.function.Supplier; +import io.anuke.arc.function.Function; import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Lines; @@ -292,6 +292,7 @@ public class Block extends BlockStorage{ } setStats(); + setBars(); consumes.checkRequired(this); @@ -362,6 +363,25 @@ public class Block extends BlockStorage{ if(hasItems) stats.add(BlockStat.itemCapacity, itemCapacity, StatUnit.items); } + public void setBars(){ + bars.add("health", entity -> new Bar("blocks.health", Pal.health, entity::healthf).blink(Color.WHITE)); + + if(hasLiquids){ + Function current; + if(consumes.has(ConsumeLiquid.class)){ + Liquid liquid = consumes.liquid(); + current = entity -> liquid; + }else{ + current = entity -> entity.liquids.current(); + } + bars.add("liquid", entity -> new Bar(() -> entity.liquids.get(current.get(entity)) <= 0.001f ? Core.bundle.get("blocks.liquid") : current.get(entity).localizedName(), () -> current.get(entity).color, () -> entity.liquids.get(current.get(entity)) / liquidCapacity)); + } + + if(hasPower && consumes.has(ConsumePower.class)){ + bars.add("power", entity -> new Bar(consumes.get(ConsumePower.class).isBuffered ? "blocks.power" : "blocks.power.satisfaction", Pal.power, () -> entity.power.satisfaction)); + } + } + public boolean isSolidFor(Tile tile){ return false; } @@ -479,28 +499,12 @@ public class Block extends BlockStorage{ } } - public void displayBars(Tile tile, Table bars){ - TileEntity entity = tile.entity; - - bars.add(new Bar("blocks.health", Pal.health, entity::healthf).blink(Color.WHITE)); - bars.row(); - - if(entity.liquids != null){ - Supplier current; - if(consumes.has(ConsumeLiquid.class)){ - Liquid liquid = consumes.liquid(); - current = () -> liquid; - }else{ - current = () -> entity.liquids.current(); - } - bars.add(new Bar(() -> entity.liquids.get(current.get()) <= 0.001f ? Core.bundle.get("blocks.liquid") : current.get().localizedName(), () -> current.get().color, () -> entity.liquids.get(current.get()) / liquidCapacity)).growX(); - bars.row(); + public void displayBars(Tile tile, Table table){ + for(Function bar : bars.list()){ + table.add(bar.get(tile.entity)).growX(); + table.row(); } - if(entity.power != null && consumes.has(ConsumePower.class)){ - bars.add(new Bar(consumes.get(ConsumePower.class).isBuffered ? "blocks.power" : "blocks.power.satisfaction", Pal.power, () -> entity.power.satisfaction)).growX(); - bars.row(); - } } public TextureRegion icon(Icon icon){ diff --git a/core/src/io/anuke/mindustry/world/BlockStorage.java b/core/src/io/anuke/mindustry/world/BlockStorage.java index 398d533011..a0308a9271 100644 --- a/core/src/io/anuke/mindustry/world/BlockStorage.java +++ b/core/src/io/anuke/mindustry/world/BlockStorage.java @@ -16,6 +16,7 @@ import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.consumers.ConsumeItem; import io.anuke.mindustry.world.consumers.ConsumeLiquid; import io.anuke.mindustry.world.consumers.Consumers; +import io.anuke.mindustry.world.meta.BlockBars; import io.anuke.mindustry.world.meta.BlockStats; import io.anuke.mindustry.world.meta.Producers; @@ -34,6 +35,7 @@ public abstract class BlockStorage extends UnlockableContent{ public float liquidFlowFactor = 4.9f; public final BlockStats stats = new BlockStats(); + public final BlockBars bars = new BlockBars(); public final Consumers consumes = new Consumers(); public final Producers produces = new Producers(); diff --git a/core/src/io/anuke/mindustry/world/meta/BlockBars.java b/core/src/io/anuke/mindustry/world/meta/BlockBars.java new file mode 100644 index 0000000000..e0624cf0f8 --- /dev/null +++ b/core/src/io/anuke/mindustry/world/meta/BlockBars.java @@ -0,0 +1,22 @@ +package io.anuke.mindustry.world.meta; + +import io.anuke.arc.collection.OrderedMap; +import io.anuke.arc.function.Function; +import io.anuke.mindustry.entities.type.TileEntity; +import io.anuke.mindustry.ui.Bar; + +public class BlockBars{ + private OrderedMap> bars = new OrderedMap<>(); + + public void add(String name,Function sup){ + bars.put(name, sup); + } + + public void remove(String name){ + bars.remove(name); + } + + public Iterable> list(){ + return bars.values(); + } +}