From a7f38ac2a66c8e9c785b2c9959a094f0d5711fad Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 28 Jan 2025 22:34:07 -0500 Subject: [PATCH] Make patrol stance pursue targets --- core/src/mindustry/ai/types/CommandAI.java | 9 +++++++++ core/src/mindustry/input/DesktopInput.java | 2 +- core/src/mindustry/input/InputHandler.java | 12 ++++++++---- core/src/mindustry/input/MobileInput.java | 2 +- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/ai/types/CommandAI.java b/core/src/mindustry/ai/types/CommandAI.java index 9446e72aa3..097c464884 100644 --- a/core/src/mindustry/ai/types/CommandAI.java +++ b/core/src/mindustry/ai/types/CommandAI.java @@ -82,6 +82,15 @@ public class CommandAI extends AIController{ commandTarget(target, false); } + //pursue the target for patrol, keeping the current position + if(stance == UnitStance.patrol && target != null && attackTarget == null){ + //commanding a target overwrites targetPos, so add it to the queue + if(targetPos != null){ + commandQueue.add(targetPos.cpy()); + } + commandTarget(target, false); + } + //remove invalid targets if(commandQueue.any()){ commandQueue.removeAll(e -> e instanceof Healthc h && !h.isValid()); diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 78ac0604a7..0ec79e1ab6 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -288,7 +288,7 @@ public class DesktopInput extends InputHandler{ } //validate commanding units - selectedUnits.removeAll(u -> !u.isCommandable() || !u.isValid()); + selectedUnits.removeAll(u -> !u.isCommandable() || !u.isValid() || u.team != player.team()); if(commandMode && !scene.hasField() && !scene.hasDialog()){ if(input.keyTap(Binding.select_all_units)){ diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 0ec6712921..36c55360cd 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -1096,10 +1096,16 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ //draw command overlay UI for(Unit unit : selectedUnits){ - if(unit.isFlying() != flying) continue; + CommandAI ai = unit.command(); Position lastPos = ai.attackTarget != null ? ai.attackTarget : ai.targetPos; + if(flying && ai.attackTarget != null && ai.currentCommand().drawTarget){ + Drawf.target(ai.attackTarget.getX(), ai.attackTarget.getY(), 6f, Pal.remove); + } + + if(unit.isFlying() != flying) continue; + //draw target line if(ai.targetPos != null && ai.currentCommand().drawTarget){ Position lineDest = ai.attackTarget != null ? ai.attackTarget : ai.targetPos; @@ -1135,9 +1141,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ //Lines.poly(unit.x, unit.y, sides, rad + 1.5f); Draw.reset(); - if(ai.attackTarget != null && ai.currentCommand().drawTarget){ - Drawf.target(ai.attackTarget.getX(), ai.attackTarget.getY(), 6f, Pal.remove); - } + if(lastPos == null){ lastPos = unit; diff --git a/core/src/mindustry/input/MobileInput.java b/core/src/mindustry/input/MobileInput.java index 20490ccd5c..d67ed72d33 100644 --- a/core/src/mindustry/input/MobileInput.java +++ b/core/src/mindustry/input/MobileInput.java @@ -762,7 +762,7 @@ public class MobileInput extends InputHandler implements GestureListener{ } //validate commanding units - selectedUnits.removeAll(u -> !u.isCommandable() || !u.isValid()); + selectedUnits.removeAll(u -> !u.isCommandable() || !u.isValid() || u.team != player.team()); if(!commandMode){ commandBuildings.clear();