From aab63e6f2d5594fcef74a6faf72151229f563c91 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 10 Aug 2013 12:13:58 +1200 Subject: [PATCH] Enable frozen order: C4. --- OpenRA.Mods.RA/C4Demolition.cs | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/OpenRA.Mods.RA/C4Demolition.cs b/OpenRA.Mods.RA/C4Demolition.cs index f200ef8bad..59d876674f 100644 --- a/OpenRA.Mods.RA/C4Demolition.cs +++ b/OpenRA.Mods.RA/C4Demolition.cs @@ -26,11 +26,11 @@ namespace OpenRA.Mods.RA class C4Demolition : IIssueOrder, IResolveOrder, IOrderVoice { - readonly C4DemolitionInfo Info; + readonly C4DemolitionInfo info; public C4Demolition(C4DemolitionInfo info) { - Info = info; + this.info = info; } public IEnumerable Orders @@ -38,28 +38,36 @@ namespace OpenRA.Mods.RA get { yield return new TargetTypeOrderTargeter("C4", "C4", 6, "c4", true, false); } } - public Order IssueOrder( Actor self, IOrderTargeter order, Target target, bool queued ) + public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued) { - if (order.OrderID == "C4") - return new Order("C4", self, queued) { TargetActor = target.Actor }; + if (order.OrderID != "C4") + return null; - return null; + if (target.Type == TargetType.FrozenActor) + return new Order(order.OrderID, self, queued) { ExtraData = target.FrozenActor.ID }; + + return new Order(order.OrderID, self, queued) { TargetActor = target.Actor }; } public void ResolveOrder(Actor self, Order order) { - if (order.OrderString == "C4") - { - self.SetTargetLine(Target.FromOrder(order), Color.Red); + if (order.OrderString != "C4") + return; + var target = self.ResolveFrozenActorOrder(order, Color.Red); + if (target.Type != TargetType.Actor) + return; + + if (!order.Queued) self.CancelActivity(); - self.QueueActivity(new Enter(order.TargetActor, new Demolish(order.TargetActor, Info.C4Delay))); - } + + self.SetTargetLine(target, Color.Red); + self.QueueActivity(new Enter(target.Actor, new Demolish(target.Actor, info.C4Delay))); } public string VoicePhraseForOrder(Actor self, Order order) { - return (order.OrderString == "C4") ? "Attack" : null; + return order.OrderString == "C4" ? "Attack" : null; } } }