add Defend unit stance
This commit is contained in:
@@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA
|
||||
public object Create(ActorInitializer init) { return new AutoTarget(init.self, this); }
|
||||
}
|
||||
|
||||
public enum UnitStance { HoldFire, ReturnFire, AttackAnything };
|
||||
public enum UnitStance { HoldFire, ReturnFire, Defend, AttackAnything };
|
||||
|
||||
public class AutoTarget : INotifyIdle, INotifyDamage, ITick, IResolveOrder
|
||||
{
|
||||
@@ -64,26 +64,25 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
if (e.Damage < 0) return; // don't retaliate against healers
|
||||
|
||||
attack.AttackTarget(Target.FromActor(e.Attacker), false, Info.AllowMovement);
|
||||
attack.AttackTarget(Target.FromActor(e.Attacker), false, Info.AllowMovement && stance != UnitStance.Defend);
|
||||
}
|
||||
|
||||
public void TickIdle(Actor self)
|
||||
{
|
||||
if (stance < UnitStance.AttackAnything) return;
|
||||
if (stance < UnitStance.Defend) return;
|
||||
|
||||
var target = ScanForTarget(self, null);
|
||||
if (target != null)
|
||||
{
|
||||
self.SetTargetLine(Target.FromActor(target), Color.Red, false);
|
||||
self.QueueActivity(attack.GetAttackActivity(self,
|
||||
Target.FromActor(target),
|
||||
Info.AllowMovement));
|
||||
attack.AttackTarget(Target.FromActor(target), false, Info.AllowMovement && stance != UnitStance.Defend);
|
||||
}
|
||||
}
|
||||
|
||||
public void Tick(Actor self)
|
||||
{
|
||||
--nextScanTime;
|
||||
if (nextScanTime > 0)
|
||||
--nextScanTime;
|
||||
}
|
||||
|
||||
public Actor ScanForTarget(Actor self, Actor currentTarget)
|
||||
@@ -101,7 +100,7 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
var targetActor = ScanForTarget(self, null);
|
||||
if (targetActor != null)
|
||||
attack.AttackTarget(Target.FromActor(targetActor), false, allowMovement);
|
||||
attack.AttackTarget(Target.FromActor(targetActor), false, allowMovement && stance != UnitStance.Defend);
|
||||
}
|
||||
|
||||
Actor ChooseTarget(Actor self, float range)
|
||||
|
||||
Reference in New Issue
Block a user