Make patrol stance pursue targets
This commit is contained in:
@@ -82,6 +82,15 @@ public class CommandAI extends AIController{
|
|||||||
commandTarget(target, false);
|
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
|
//remove invalid targets
|
||||||
if(commandQueue.any()){
|
if(commandQueue.any()){
|
||||||
commandQueue.removeAll(e -> e instanceof Healthc h && !h.isValid());
|
commandQueue.removeAll(e -> e instanceof Healthc h && !h.isValid());
|
||||||
|
|||||||
@@ -288,7 +288,7 @@ public class DesktopInput extends InputHandler{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//validate commanding units
|
//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(commandMode && !scene.hasField() && !scene.hasDialog()){
|
||||||
if(input.keyTap(Binding.select_all_units)){
|
if(input.keyTap(Binding.select_all_units)){
|
||||||
|
|||||||
@@ -1096,10 +1096,16 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
|
|
||||||
//draw command overlay UI
|
//draw command overlay UI
|
||||||
for(Unit unit : selectedUnits){
|
for(Unit unit : selectedUnits){
|
||||||
if(unit.isFlying() != flying) continue;
|
|
||||||
CommandAI ai = unit.command();
|
CommandAI ai = unit.command();
|
||||||
Position lastPos = ai.attackTarget != null ? ai.attackTarget : ai.targetPos;
|
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
|
//draw target line
|
||||||
if(ai.targetPos != null && ai.currentCommand().drawTarget){
|
if(ai.targetPos != null && ai.currentCommand().drawTarget){
|
||||||
Position lineDest = ai.attackTarget != null ? ai.attackTarget : ai.targetPos;
|
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);
|
//Lines.poly(unit.x, unit.y, sides, rad + 1.5f);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
|
|
||||||
if(ai.attackTarget != null && ai.currentCommand().drawTarget){
|
|
||||||
Drawf.target(ai.attackTarget.getX(), ai.attackTarget.getY(), 6f, Pal.remove);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(lastPos == null){
|
if(lastPos == null){
|
||||||
lastPos = unit;
|
lastPos = unit;
|
||||||
|
|||||||
@@ -762,7 +762,7 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//validate commanding units
|
//validate commanding units
|
||||||
selectedUnits.removeAll(u -> !u.isCommandable() || !u.isValid());
|
selectedUnits.removeAll(u -> !u.isCommandable() || !u.isValid() || u.team != player.team());
|
||||||
|
|
||||||
if(!commandMode){
|
if(!commandMode){
|
||||||
commandBuildings.clear();
|
commandBuildings.clear();
|
||||||
|
|||||||
Reference in New Issue
Block a user