From f5410c5712d78a7fd4f58a2fff7d5d9f1e96a143 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 30 Dec 2020 16:58:42 -0500 Subject: [PATCH] #4129 --- .../mindustry/entities/abilities/Ability.java | 5 +++++ .../entities/abilities/ForceFieldAbility.java | 7 +++++++ .../mindustry/entities/comp/PayloadComp.java | 17 +++++++++++++++++ core/src/mindustry/type/UnitType.java | 17 +++++++++++++++++ core/src/mindustry/ui/dialogs/PlanetDialog.java | 1 - .../src/mindustry/ui/fragments/HudFragment.java | 14 ++++++++++++++ .../world/blocks/payloads/BuildPayload.java | 5 +++++ .../world/blocks/payloads/Payload.java | 5 +++++ .../world/blocks/payloads/UnitPayload.java | 5 +++++ .../mindustry/world/blocks/power/Battery.java | 4 ++-- 10 files changed, 77 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/entities/abilities/Ability.java b/core/src/mindustry/entities/abilities/Ability.java index cb6e94547b..c11c393602 100644 --- a/core/src/mindustry/entities/abilities/Ability.java +++ b/core/src/mindustry/entities/abilities/Ability.java @@ -1,6 +1,7 @@ package mindustry.entities.abilities; import arc.*; +import arc.scene.ui.layout.*; import mindustry.gen.*; public abstract class Ability implements Cloneable{ @@ -16,6 +17,10 @@ public abstract class Ability implements Cloneable{ } } + public void displayBars(Unit unit, Table bars){ + + } + /** @return localized ability name; mods should override this. */ public String localized(){ return Core.bundle.get("ability." + getClass().getSimpleName().replace("Ability", "").toLowerCase()); diff --git a/core/src/mindustry/entities/abilities/ForceFieldAbility.java b/core/src/mindustry/entities/abilities/ForceFieldAbility.java index d341191a74..38961a6433 100644 --- a/core/src/mindustry/entities/abilities/ForceFieldAbility.java +++ b/core/src/mindustry/entities/abilities/ForceFieldAbility.java @@ -6,10 +6,12 @@ import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; import arc.math.geom.*; +import arc.scene.ui.layout.*; import arc.util.*; import mindustry.content.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.ui.*; public class ForceFieldAbility extends Ability{ /** Shield radius. */ @@ -94,6 +96,11 @@ public class ForceFieldAbility extends Ability{ } } + @Override + public void displayBars(Unit unit, Table bars){ + bars.add(new Bar("stat.shieldhealth", Pal.accent, () -> unit.shield / max)).row(); + } + public void checkRadius(Unit unit){ //timer2 is used to store radius scale as an effect realRad = radiusScale * radius; diff --git a/core/src/mindustry/entities/comp/PayloadComp.java b/core/src/mindustry/entities/comp/PayloadComp.java index 00813e9f78..f29d988d74 100644 --- a/core/src/mindustry/entities/comp/PayloadComp.java +++ b/core/src/mindustry/entities/comp/PayloadComp.java @@ -2,6 +2,7 @@ package mindustry.entities.comp; import arc.*; import arc.math.*; +import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; import mindustry.*; @@ -12,6 +13,7 @@ import mindustry.entities.*; import mindustry.game.EventType.*; import mindustry.gen.*; import mindustry.type.*; +import mindustry.ui.*; import mindustry.world.*; import mindustry.world.blocks.payloads.*; @@ -143,4 +145,19 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{ return false; } + + void contentInfo(Table table, float itemSize, float width){ + table.clear(); + table.top().left(); + + float pad = 0; + float items = payloads.size; + if(itemSize * items + pad * items > width){ + pad = (width - (itemSize) * items) / items; + } + + for (Payload p : payloads){ + table.image(p.icon(Cicon.small)).size(itemSize).padRight(pad); + } + } } diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 4dde9e0c54..e41050118f 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -171,6 +171,23 @@ public class UnitType extends UnlockableContent{ bars.add(new Bar(ammoType.icon + " " + Core.bundle.get("stat.ammo"), ammoType.barColor, () -> unit.ammo / ammoCapacity)); bars.row(); } + + for(Ability ability : unit.abilities){ + ability.displayBars(unit, bars); + } + + if(unit instanceof Payloadc payload){ + bars.add(new Bar("stat.payloadcapacity", Pal.items, () -> payload.payloadUsed() / unit.type().payloadCapacity)); + bars.row(); + + var count = new float[]{-1}; + bars.table().update(t -> { + if(count[0] != payload.payloadUsed()) { + payload.contentInfo(t, 8 * 2, 270); + count[0] = payload.payloadUsed(); + } + }).growX().left(); + } }).growX(); if(unit.controller() instanceof LogicAI){ diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 24034b19f5..bb187d3a9d 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -44,7 +44,6 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ public final PlanetRenderer planets = renderer.planets; public final LaunchLoadoutDialog loadouts = new LaunchLoadoutDialog(); - public int launchRange; public float zoom = 1f, selectAlpha = 1f; public @Nullable Sector selected, hovered, launchSector; public Mode mode = look; diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index cb0e2cde2a..a8ae12eed2 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -755,6 +755,20 @@ public class HudFragment extends Fragment{ return builder; }).growX().pad(8f); + table.row(); + + var count = new float[]{-1}; + table.table().update(t -> { + if(player.unit() instanceof Payloadc payload){ + if(count[0] != payload.payloadUsed()){ + payload.contentInfo(t, 8 * 2, 275f); + count[0] = payload.payloadUsed(); + } + }else{ + t.clear(); + } + }).growX().visible(() -> player.unit() instanceof Payloadc p && p.payloadUsed() > 0).colspan(2); + return table; } diff --git a/core/src/mindustry/world/blocks/payloads/BuildPayload.java b/core/src/mindustry/world/blocks/payloads/BuildPayload.java index 70414f01de..446954883b 100644 --- a/core/src/mindustry/world/blocks/payloads/BuildPayload.java +++ b/core/src/mindustry/world/blocks/payloads/BuildPayload.java @@ -57,4 +57,9 @@ public class BuildPayload implements Payload{ Drawf.shadow(build.x, build.y, build.block.size * tilesize * 2f); Draw.rect(build.block.icon(Cicon.full), build.x, build.y); } + + @Override + public TextureRegion icon(Cicon icon){ + return block().icon(icon); + } } diff --git a/core/src/mindustry/world/blocks/payloads/Payload.java b/core/src/mindustry/world/blocks/payloads/Payload.java index ec174f238d..851678094e 100644 --- a/core/src/mindustry/world/blocks/payloads/Payload.java +++ b/core/src/mindustry/world/blocks/payloads/Payload.java @@ -1,9 +1,11 @@ package mindustry.world.blocks.payloads; +import arc.graphics.g2d.*; import arc.util.*; import arc.util.io.*; import mindustry.game.*; import mindustry.gen.*; +import mindustry.ui.*; import mindustry.world.*; import static mindustry.Vars.*; @@ -33,6 +35,9 @@ public interface Payload{ /** writes the payload for saving. */ void write(Writes write); + /** @return icon describing the contents. */ + TextureRegion icon(Cicon icon); + static void write(@Nullable Payload payload, Writes write){ if(payload == null){ write.bool(false); diff --git a/core/src/mindustry/world/blocks/payloads/UnitPayload.java b/core/src/mindustry/world/blocks/payloads/UnitPayload.java index 2292244864..c02ca68f5d 100644 --- a/core/src/mindustry/world/blocks/payloads/UnitPayload.java +++ b/core/src/mindustry/world/blocks/payloads/UnitPayload.java @@ -89,4 +89,9 @@ public class UnitPayload implements Payload{ deactiveTime = Math.max(deactiveTime - Time.delta/deactiveDuration, 0f); } } + + @Override + public TextureRegion icon(Cicon icon){ + return unit.type.icon(icon); + } } diff --git a/core/src/mindustry/world/blocks/power/Battery.java b/core/src/mindustry/world/blocks/power/Battery.java index 9ed13ebc48..f0cff96156 100644 --- a/core/src/mindustry/world/blocks/power/Battery.java +++ b/core/src/mindustry/world/blocks/power/Battery.java @@ -45,8 +45,8 @@ public class Battery extends PowerDistributor{ @Override public BlockStatus status(){ - if(Mathf.equal(power.status, 0f, 0.01f)) return BlockStatus.noInput; - if(Mathf.equal(power.status, 1f, 0.01f)) return BlockStatus.active; + if(Mathf.equal(power.status, 0f, 0.001f)) return BlockStatus.noInput; + if(Mathf.equal(power.status, 1f, 0.001f)) return BlockStatus.active; return BlockStatus.noOutput; } }