Explicitly implement interfaces in AttackBase.

This commit is contained in:
Paul Chote
2017-05-28 14:41:01 +01:00
committed by atlimit8
parent 34844e87a3
commit 45b13dabfb
3 changed files with 18 additions and 14 deletions

View File

@@ -111,7 +111,7 @@ namespace OpenRA.Mods.Common.Traits
a.CheckFire(self, facing, target); a.CheckFire(self, facing, target);
} }
public IEnumerable<IOrderTargeter> Orders IEnumerable<IOrderTargeter> IIssueOrder.Orders
{ {
get get
{ {
@@ -127,7 +127,7 @@ namespace OpenRA.Mods.Common.Traits
} }
} }
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued) Order IIssueOrder.IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
{ {
if (order is AttackOrderTargeter) if (order is AttackOrderTargeter)
{ {
@@ -145,7 +145,7 @@ namespace OpenRA.Mods.Common.Traits
return null; return null;
} }
public virtual void ResolveOrder(Actor self, Order order) void IResolveOrder.ResolveOrder(Actor self, Order order)
{ {
var forceAttack = order.OrderString == forceAttackOrderName; var forceAttack = order.OrderString == forceAttackOrderName;
if (forceAttack || order.OrderString == attackOrderName) if (forceAttack || order.OrderString == attackOrderName)
@@ -159,6 +159,11 @@ namespace OpenRA.Mods.Common.Traits
} }
if (order.OrderString == "Stop") if (order.OrderString == "Stop")
OnStopOrder(self);
}
protected virtual void OnStopOrder(Actor self)
{
self.CancelActivity(); self.CancelActivity();
} }
@@ -184,7 +189,7 @@ namespace OpenRA.Mods.Common.Traits
return Target.Invalid; return Target.Invalid;
} }
public string VoicePhraseForOrder(Actor self, Order order) string IOrderVoice.VoicePhraseForOrder(Actor self, Order order)
{ {
return order.OrderString == attackOrderName || order.OrderString == forceAttackOrderName ? Info.Voice : null; return order.OrderString == attackOrderName || order.OrderString == forceAttackOrderName ? Info.Voice : null;
} }

View File

@@ -46,12 +46,10 @@ namespace OpenRA.Mods.Common.Traits
return new AttackActivity(self, newTarget, allowMove, forceAttack); return new AttackActivity(self, newTarget, allowMove, forceAttack);
} }
public override void ResolveOrder(Actor self, Order order) protected override void OnStopOrder(Actor self)
{ {
base.ResolveOrder(self, order);
if (order.OrderString == "Stop")
Target = Target.Invalid; Target = Target.Invalid;
base.OnStopOrder(self);
} }
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner) public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)

View File

@@ -82,11 +82,12 @@ namespace OpenRA.Mods.D2k.Traits
// If close enough, we don't care about other actors. // If close enough, we don't care about other actors.
var target = self.World.FindActorsInCircle(self.CenterPosition, WormInfo.IgnoreNoiseAttackRange) var target = self.World.FindActorsInCircle(self.CenterPosition, WormInfo.IgnoreNoiseAttackRange)
.FirstOrDefault(x => attackTrait.HasAnyValidWeapons(Target.FromActor(x))); .Select(t => Target.FromActor(t))
if (target != null) .FirstOrDefault(t => attackTrait.HasAnyValidWeapons(t));
if (target.Type == TargetType.Actor)
{ {
self.CancelActivity(); attackTrait.AttackTarget(target, false, true, false);
attackTrait.ResolveOrder(self, new Order("Attack", target, true) { TargetActor = target });
return; return;
} }