From 108b101669dc14edd4ac4c853a12be5678114190 Mon Sep 17 00:00:00 2001 From: BlackDeluxeCat <65377021+BlackDeluxeCat@users.noreply.github.com> Date: Thu, 6 Feb 2025 08:36:26 +0800 Subject: [PATCH] Logic sensor accesses more infos of payload (#8766) * Added Logic Sense Payload * Update UnitComp.java --------- Co-authored-by: Anuken --- .../mindustry/entities/comp/BuildingComp.java | 4 +++ .../src/mindustry/entities/comp/UnitComp.java | 12 ++++++++ core/src/mindustry/logic/LAccess.java | 2 ++ core/src/mindustry/logic/LStatements.java | 28 +++++++++++++++++-- .../world/blocks/payloads/PayloadBlock.java | 8 ++++++ .../blocks/payloads/PayloadDeconstructor.java | 8 ++++++ 6 files changed, 60 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 722fad3542..5fe15f9698 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1988,6 +1988,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, public double sense(Content content){ if(content instanceof Item i && items != null) return items.get(i); if(content instanceof Liquid l && liquids != null) return liquids.get(l); + if(getPayloads() != null){ + if(content instanceof UnitType u) return getPayloads().get(u); + if(content instanceof Block b) return getPayloads().get(b); + } return Float.NaN; //invalid sense } diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index bfbb28c18e..f1a42e7a29 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -241,6 +241,8 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I controller instanceof CommandAI command && command.hasCommand() ? ctrlCommand : 0; case payloadCount -> ((Object)this) instanceof Payloadc pay ? pay.payloads().size : 0; + case totalPayload -> ((Object)this) instanceof Payloadc pay ? pay.payloadUsed() : 0; + case payloadCapacity -> type.payloadCapacity; case size -> hitSize / tilesize; case color -> Color.toDoubleBits(team.color.r, team.color.g, team.color.b, 1f); default -> Float.NaN; @@ -265,6 +267,16 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I @Override public double sense(Content content){ if(content == stack().item) return stack().amount; + if(content instanceof UnitType u){ + return ((Object)this) instanceof Payloadc pay ? + (pay.payloads().isEmpty() ? 0 : + pay.payloads().count(p -> p instanceof UnitPayload up && up.unit.type == u)) : 0; + } + if(content instanceof Block b){ + return ((Object)this) instanceof Payloadc pay ? + (pay.payloads().isEmpty() ? 0 : + pay.payloads().count(p -> p instanceof BuildPayload bp && bp.build.block == b)) : 0; + } return Float.NaN; } diff --git a/core/src/mindustry/logic/LAccess.java b/core/src/mindustry/logic/LAccess.java index a4d242e27c..94b57c73ac 100644 --- a/core/src/mindustry/logic/LAccess.java +++ b/core/src/mindustry/logic/LAccess.java @@ -55,6 +55,8 @@ public enum LAccess{ name, payloadCount, payloadType, + totalPayload, + payloadCapacity, id, //values with parameters are considered controllable diff --git a/core/src/mindustry/logic/LStatements.java b/core/src/mindustry/logic/LStatements.java index 223b1a7079..078e997786 100644 --- a/core/src/mindustry/logic/LStatements.java +++ b/core/src/mindustry/logic/LStatements.java @@ -19,6 +19,7 @@ import mindustry.logic.LExecutor.*; import mindustry.logic.LogicFx.*; import mindustry.type.*; import mindustry.ui.*; +import mindustry.world.*; import mindustry.world.meta.*; import static mindustry.Vars.*; @@ -614,6 +615,29 @@ public class LStatements{ if(++c % 6 == 0) i.row(); } }), + new Table(i -> { + i.left(); + int c = 0; + for(UnitType item : Vars.content.units()){ + if(!item.unlockedNow() || item.hidden) continue; + i.button(new TextureRegionDrawable(item.uiIcon), Styles.flati, iconSmall, () -> { + stype("@" + item.name); + hide.run(); + }).size(40f); + + if(++c % 6 == 0) i.row(); + } + + for(Block item : Vars.content.blocks()){ + if(!item.unlockedNow() || item.isHidden()) continue; + i.button(new TextureRegionDrawable(item.uiIcon), Styles.flati, iconSmall, () -> { + stype("@" + item.name); + hide.run(); + }).size(40f); + + if(++c % 6 == 0) i.row(); + } + }), //sensors new Table(i -> { for(LAccess sensor : LAccess.senseable){ @@ -625,7 +649,7 @@ public class LStatements{ }) }; - Drawable[] icons = {Icon.box, Icon.liquid, Icon.tree}; + Drawable[] icons = {Icon.box, Icon.liquid, Icon.units, Icon.tree}; Stack stack = new Stack(tables[selected]); ButtonGroup