From c87f0c27b396a53ee47ddf9ba16c16866d97c2f2 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 5 Oct 2020 19:59:15 -0400 Subject: [PATCH] Logic tweaks --- core/src/mindustry/entities/EntityGroup.java | 3 ++- .../mindustry/entities/comp/BuildingComp.java | 2 ++ .../src/mindustry/entities/comp/UnitComp.java | 3 ++- core/src/mindustry/input/InputHandler.java | 2 +- core/src/mindustry/logic/LAccess.java | 1 + core/src/mindustry/logic/LExecutor.java | 15 ++++++++++++ core/src/mindustry/logic/LStatements.java | 23 ++++++++++++++++++- .../world/blocks/defense/MendProjector.java | 3 +-- 8 files changed, 46 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/entities/EntityGroup.java b/core/src/mindustry/entities/EntityGroup.java index bec27847c4..2135d9d6aa 100644 --- a/core/src/mindustry/entities/EntityGroup.java +++ b/core/src/mindustry/entities/EntityGroup.java @@ -57,8 +57,9 @@ public class EntityGroup implements Iterable{ each(Entityc::update); } - public void copy(Seq arr){ + public Seq copy(Seq arr){ arr.addAll(array); + return arr; } public void each(Cons cons){ diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 41fa7ea9b5..92a8026708 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1246,6 +1246,8 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, public Object senseObject(LAccess sensor){ return switch(sensor){ case type -> block; + case firstItem -> items == null ? null : items.first(); + case name -> block.name; default -> noSensed; }; diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 98e134c2fb..b8e0a82ef3 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -99,7 +99,8 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I public Object senseObject(LAccess sensor){ return switch(sensor){ case type -> type; - case name -> controller instanceof Player p ? p.name : null; + case name -> controller instanceof Player p ? p.name : type.name; + case firstItem -> stack().amount == 0 ? null : item(); default -> noSensed; }; diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 445df662ce..868f9a254c 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -81,7 +81,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ public static void takeItems(Building build, Item item, int amount, Unit to){ if(to == null || build == null) return; - int removed = build.removeStack(item, Math.min(player.unit().maxAccepted(item), amount)); + int removed = build.removeStack(item, Math.min(to.maxAccepted(item), amount)); if(removed == 0) return; to.addItem(item, removed); diff --git a/core/src/mindustry/logic/LAccess.java b/core/src/mindustry/logic/LAccess.java index cdb7d838c3..4cb1563ad7 100644 --- a/core/src/mindustry/logic/LAccess.java +++ b/core/src/mindustry/logic/LAccess.java @@ -5,6 +5,7 @@ import arc.struct.*; /** Setter/getter enum for logic-controlled objects. */ public enum LAccess{ totalItems, + firstItem, totalLiquids, totalPower, itemCapacity, diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index 18581018c6..d92607967b 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -194,6 +194,21 @@ public class LExecutor{ } } + /** Binds the processor to a unit based on some filters. */ + public static class UnitLocateI implements LInstruction{ + + @Override + public void run(LExecutor exec){ + Object unitObj = exec.obj(varUnit); + LogicAI ai = UnitControlI.checkLogicAI(exec, unitObj); + + if(unitObj instanceof Unit unit && ai != null){ + ai.controlTimer = LogicAI.logicControlTimeout; + + } + } + } + /** Controls the unit based on some parameters. */ public static class UnitControlI implements LInstruction{ public LUnitControl type = LUnitControl.move; diff --git a/core/src/mindustry/logic/LStatements.java b/core/src/mindustry/logic/LStatements.java index 330a9b0b3b..10fd77f8d8 100644 --- a/core/src/mindustry/logic/LStatements.java +++ b/core/src/mindustry/logic/LStatements.java @@ -709,7 +709,28 @@ public class LStatements{ public void build(Table table){ table.add(" type "); - field(table, type, str -> type = str); + TextField field = field(table, type, str -> type = str).get(); + + table.button(b -> { + b.image(Icon.pencilSmall); + b.clicked(() -> showSelectTable(b, (t, hide) -> { + t.row(); + t.table(i -> { + i.left(); + int c = 0; + for(UnitType item : Vars.content.units()){ + if(!item.unlockedNow() || item.isHidden()) continue; + i.button(new TextureRegionDrawable(item.icon(Cicon.small)), Styles.cleari, () -> { + type = "@" + item.name; + field.setText(type); + hide.run(); + }).size(40f); + + if(++c % 6 == 0) i.row(); + } + }).colspan(3).width(240f).left(); + })); + }, Styles.logict, () -> {}).size(40f).padLeft(-2).color(table.color); } @Override diff --git a/core/src/mindustry/world/blocks/defense/MendProjector.java b/core/src/mindustry/world/blocks/defense/MendProjector.java index f9fc7b0ac8..a2efa6e8b0 100644 --- a/core/src/mindustry/world/blocks/defense/MendProjector.java +++ b/core/src/mindustry/world/blocks/defense/MendProjector.java @@ -100,10 +100,9 @@ public class MendProjector extends Block{ Draw.color(baseColor, phaseColor, phaseHeat); Draw.alpha(heat * Mathf.absin(Time.time(), 10f, 1f) * 0.5f); Draw.rect(topRegion, x, y); - Draw.alpha(1f); Lines.stroke((2f * f + 0.2f) * heat); - Lines.square(x, y, ((1f - f) * 8f) * size / 2f); + Lines.square(x, y, Math.min(1f + (1f - f) * size * tilesize / 2f, size * tilesize/2f)); Draw.reset(); }