Add support for queuing Guard orders.

This commit is contained in:
Paul Chote
2017-07-23 17:54:42 +01:00
committed by Matthias Mailänder
parent f4f27f8980
commit 898ef8fe50
2 changed files with 9 additions and 8 deletions

View File

@@ -31,9 +31,11 @@ namespace OpenRA.Mods.Common.Orders
yield break;
world.CancelInputMode();
var queued = mi.Modifiers.HasModifier(Modifiers.Shift);
foreach (var subject in Subjects)
if (subject != target)
yield return new Order(OrderName, subject, false) { TargetActor = target };
yield return new Order(OrderName, subject, queued) { TargetActor = target };
}
public override void Tick(World world)

View File

@@ -41,19 +41,18 @@ namespace OpenRA.Mods.Common.Traits
public void ResolveOrder(Actor self, Order order)
{
if (order.OrderString == "Guard")
{
var target = Target.FromActor(order.TargetActor);
GuardTarget(self, target);
}
GuardTarget(self, Target.FromActor(order.TargetActor), order.Queued);
}
public void GuardTarget(Actor self, Target target)
public void GuardTarget(Actor self, Target target, bool queued = false)
{
if (!queued)
self.CancelActivity();
self.SetTargetLine(target, Color.Yellow);
var range = target.Actor.Info.TraitInfo<GuardableInfo>().Range;
self.QueueActivity(false, new AttackMoveActivity(self, move.MoveFollow(self, target, WDist.Zero, range)));
self.QueueActivity(new AttackMoveActivity(self, move.MoveFollow(self, target, WDist.Zero, range)));
}
public string VoicePhraseForOrder(Actor self, Order order)