From b4180615a824d970d9dde06651d348bed60f403f Mon Sep 17 00:00:00 2001 From: RoosterDragon Date: Tue, 27 Oct 2015 22:15:56 +0000 Subject: [PATCH] Add Aircraft.MakeReservation. This provides a simpler method for making reservations and also ensures the previous reservation is definitely unreserved before being discarded. --- .../Activities/Air/HeliReturnToBase.cs | 8 +--- .../Activities/Air/ReturnToBase.cs | 7 +--- OpenRA.Mods.Common/Traits/Air/Aircraft.cs | 40 ++++++++----------- 3 files changed, 18 insertions(+), 37 deletions(-) diff --git a/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs b/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs index 7c9ee1a58a..52d26edd4d 100644 --- a/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs +++ b/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs @@ -53,13 +53,7 @@ namespace OpenRA.Mods.Common.Activities return Util.SequenceActivities(new HeliFly(self, Target.FromActor(nearestHpad))); } - var res = dest.TraitOrDefault(); - - if (res != null) - { - heli.UnReserve(); - heli.Reservation = res.Reserve(dest, self, heli); - } + heli.MakeReservation(dest); var exit = dest.Info.TraitInfos().FirstOrDefault(); var offset = (exit != null) ? exit.SpawnOffset : WVec.Zero; diff --git a/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs b/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs index ff485f4549..2f3cdc1909 100644 --- a/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs +++ b/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs @@ -50,12 +50,7 @@ namespace OpenRA.Mods.Common.Activities if (dest == null) return; - var res = dest.TraitOrDefault(); - if (res != null) - { - plane.UnReserve(); - plane.Reservation = res.Reserve(dest, self, plane); - } + plane.MakeReservation(dest); var landPos = dest.CenterPosition; var altitude = planeInfo.CruiseAltitude.Length; diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs index 45fac81c78..a932f86a76 100644 --- a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs +++ b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs @@ -92,11 +92,11 @@ namespace OpenRA.Mods.Common.Traits readonly Actor self; UpgradeManager um; + IDisposable reservation; [Sync] public int Facing { get; set; } [Sync] public WPos CenterPosition { get; private set; } public CPos TopLeft { get { return self.World.Map.CellContaining(CenterPosition); } } - public IDisposable Reservation; public int ROT { get { return Info.ROT; } } bool airborne; @@ -257,22 +257,24 @@ namespace OpenRA.Mods.Common.Traits if (afld == null) return; - var res = afld.TraitOrDefault(); + MakeReservation(afld); + } - if (res != null) - { - UnReserve(); - Reservation = res.Reserve(afld, self, this); - } + public void MakeReservation(Actor target) + { + UnReserve(); + var reservable = target.TraitOrDefault(); + if (reservable != null) + reservation = reservable.Reserve(target, self, this); } public void UnReserve() { - if (Reservation != null) - { - Reservation.Dispose(); - Reservation = null; - } + if (reservation == null) + return; + + reservation.Dispose(); + reservation = null; } public bool AircraftCanEnter(Actor a) @@ -448,12 +450,7 @@ namespace OpenRA.Mods.Common.Traits if (target.Positions.Any(p => self.World.ActorMap.GetActorsAt(self.World.Map.CellContaining(p)).Any(a => a != self && a != target.Actor))) return false; - var res = target.Actor.TraitOrDefault(); - if (res == null) - return true; - - UnReserve(); - Reservation = res.Reserve(target.Actor, self, this); + MakeReservation(target.Actor); return true; } @@ -541,12 +538,7 @@ namespace OpenRA.Mods.Common.Traits } else { - var res = order.TargetActor.TraitOrDefault(); - if (res != null) - { - UnReserve(); - Reservation = res.Reserve(order.TargetActor, self, this); - } + MakeReservation(order.TargetActor); Action enter = () => {