From 7d9641e195c5f268026102eb56c0e66fc0fae9c1 Mon Sep 17 00:00:00 2001 From: Curtis S Date: Sat, 22 Oct 2011 13:26:51 -0600 Subject: [PATCH] Update helis logic for returning to hpad, to mirror that of planes returning to aflds --- OpenRA.Mods.RA/Air/HeliReturn.cs | 14 ++++++++++---- OpenRA.Mods.RA/Air/Helicopter.cs | 31 +++++++++++++++++++------------ 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/OpenRA.Mods.RA/Air/HeliReturn.cs b/OpenRA.Mods.RA/Air/HeliReturn.cs index 57698a3ef0..c272660216 100755 --- a/OpenRA.Mods.RA/Air/HeliReturn.cs +++ b/OpenRA.Mods.RA/Air/HeliReturn.cs @@ -32,10 +32,16 @@ namespace OpenRA.Mods.RA.Air var initialFacing = self.Info.Traits.Get().InitialFacing; if (dest == null) - return Util.SequenceActivities( - new Turn(initialFacing), - new HeliLand(true), - NextActivity); + { + var rearmBuildings = self.Info.Traits.Get().RearmBuildings; + var nearestHpad = self.World.ActorsWithTrait() + .Where(a => a.Actor.Owner == self.Owner && rearmBuildings.Contains(a.Actor.Info.Name)) + .Select(a => a.Actor) + .ClosestTo(self.CenterLocation); + + self.CancelActivity(); + return Util.SequenceActivities(new HeliFly(Util.CenterOfCell(nearestHpad.Location))); + } var res = dest.TraitOrDefault(); var heli = self.Trait(); diff --git a/OpenRA.Mods.RA/Air/Helicopter.cs b/OpenRA.Mods.RA/Air/Helicopter.cs index bc0ed05060..29775fbeb2 100755 --- a/OpenRA.Mods.RA/Air/Helicopter.cs +++ b/OpenRA.Mods.RA/Air/Helicopter.cs @@ -58,22 +58,29 @@ namespace OpenRA.Mods.RA.Air if (order.OrderString == "Enter") { - if (Reservable.IsReserved(order.TargetActor)) return; - var res = order.TargetActor.TraitOrDefault(); - if (res != null) - reservation = res.Reserve(order.TargetActor, self, this); + if (Reservable.IsReserved(order.TargetActor)) + { + self.CancelActivity(); + self.QueueActivity(new HeliReturn()); + } + else + { + var res = order.TargetActor.TraitOrDefault(); + if (res != null) + reservation = res.Reserve(order.TargetActor, self, this); - var exit = order.TargetActor.Info.Traits.WithInterface().FirstOrDefault(); - var offset = exit != null ? exit.SpawnOffset : int2.Zero; + var exit = order.TargetActor.Info.Traits.WithInterface().FirstOrDefault(); + var offset = exit != null ? exit.SpawnOffset : int2.Zero; - self.SetTargetLine(Target.FromActor(order.TargetActor), Color.Green); + self.SetTargetLine(Target.FromActor(order.TargetActor), Color.Green); - self.CancelActivity(); - self.QueueActivity(new HeliFly(order.TargetActor.Trait().PxPosition + offset)); - self.QueueActivity(new Turn(Info.InitialFacing)); - self.QueueActivity(new HeliLand(false)); + self.CancelActivity(); + self.QueueActivity(new HeliFly(order.TargetActor.Trait().PxPosition + offset)); + self.QueueActivity(new Turn(Info.InitialFacing)); + self.QueueActivity(new HeliLand(false)); - QueueResupplyActivities(order.TargetActor); + QueueResupplyActivities(order.TargetActor); + } } if (order.OrderString == "ReturnToBase")