Update helis logic for returning to hpad, to mirror that of planes returning to aflds
This commit is contained in:
@@ -32,10 +32,16 @@ namespace OpenRA.Mods.RA.Air
|
|||||||
var initialFacing = self.Info.Traits.Get<AircraftInfo>().InitialFacing;
|
var initialFacing = self.Info.Traits.Get<AircraftInfo>().InitialFacing;
|
||||||
|
|
||||||
if (dest == null)
|
if (dest == null)
|
||||||
return Util.SequenceActivities(
|
{
|
||||||
new Turn(initialFacing),
|
var rearmBuildings = self.Info.Traits.Get<HelicopterInfo>().RearmBuildings;
|
||||||
new HeliLand(true),
|
var nearestHpad = self.World.ActorsWithTrait<Reservable>()
|
||||||
NextActivity);
|
.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<Reservable>();
|
var res = dest.TraitOrDefault<Reservable>();
|
||||||
var heli = self.Trait<Helicopter>();
|
var heli = self.Trait<Helicopter>();
|
||||||
|
|||||||
@@ -58,22 +58,29 @@ namespace OpenRA.Mods.RA.Air
|
|||||||
|
|
||||||
if (order.OrderString == "Enter")
|
if (order.OrderString == "Enter")
|
||||||
{
|
{
|
||||||
if (Reservable.IsReserved(order.TargetActor)) return;
|
if (Reservable.IsReserved(order.TargetActor))
|
||||||
var res = order.TargetActor.TraitOrDefault<Reservable>();
|
{
|
||||||
if (res != null)
|
self.CancelActivity();
|
||||||
reservation = res.Reserve(order.TargetActor, self, this);
|
self.QueueActivity(new HeliReturn());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var res = order.TargetActor.TraitOrDefault<Reservable>();
|
||||||
|
if (res != null)
|
||||||
|
reservation = res.Reserve(order.TargetActor, self, this);
|
||||||
|
|
||||||
var exit = order.TargetActor.Info.Traits.WithInterface<ExitInfo>().FirstOrDefault();
|
var exit = order.TargetActor.Info.Traits.WithInterface<ExitInfo>().FirstOrDefault();
|
||||||
var offset = exit != null ? exit.SpawnOffset : int2.Zero;
|
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.CancelActivity();
|
||||||
self.QueueActivity(new HeliFly(order.TargetActor.Trait<IHasLocation>().PxPosition + offset));
|
self.QueueActivity(new HeliFly(order.TargetActor.Trait<IHasLocation>().PxPosition + offset));
|
||||||
self.QueueActivity(new Turn(Info.InitialFacing));
|
self.QueueActivity(new Turn(Info.InitialFacing));
|
||||||
self.QueueActivity(new HeliLand(false));
|
self.QueueActivity(new HeliLand(false));
|
||||||
|
|
||||||
QueueResupplyActivities(order.TargetActor);
|
QueueResupplyActivities(order.TargetActor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (order.OrderString == "ReturnToBase")
|
if (order.OrderString == "ReturnToBase")
|
||||||
|
|||||||
Reference in New Issue
Block a user