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 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 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 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) public void TickIdle(Actor self)
{ {
if (stance < UnitStance.AttackAnything) return; if (stance < UnitStance.Defend) return;
var target = ScanForTarget(self, null); var target = ScanForTarget(self, null);
if (target != null) if (target != null)
{ {
self.SetTargetLine(Target.FromActor(target), Color.Red, false); self.SetTargetLine(Target.FromActor(target), Color.Red, false);
self.QueueActivity(attack.GetAttackActivity(self, attack.AttackTarget(Target.FromActor(target), false, Info.AllowMovement && stance != UnitStance.Defend);
Target.FromActor(target),
Info.AllowMovement));
} }
} }
public void Tick(Actor self) public void Tick(Actor self)
{ {
--nextScanTime; if (nextScanTime > 0)
--nextScanTime;
} }
public Actor ScanForTarget(Actor self, Actor currentTarget) public Actor ScanForTarget(Actor self, Actor currentTarget)
@@ -101,7 +100,7 @@ namespace OpenRA.Mods.RA
{ {
var targetActor = ScanForTarget(self, null); var targetActor = ScanForTarget(self, null);
if (targetActor != 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) Actor ChooseTarget(Actor self, float range)