add Defend unit stance

This commit is contained in:
Chris Forbes
2012-01-07 20:01:09 +13:00
parent c169bc3c51
commit 6315864f84

View File

@@ -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)