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 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)
|
||||||
|
|||||||
Reference in New Issue
Block a user