diff --git a/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs b/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs index be38ab6235..2211911e36 100644 --- a/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs +++ b/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs @@ -52,13 +52,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 6a9bb29656..e38ecc08e4 100644 --- a/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs +++ b/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs @@ -49,12 +49,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/Activities/Air/TakeOff.cs b/OpenRA.Mods.Common/Activities/Air/TakeOff.cs index 24de372431..03dde21f70 100644 --- a/OpenRA.Mods.Common/Activities/Air/TakeOff.cs +++ b/OpenRA.Mods.Common/Activities/Air/TakeOff.cs @@ -30,12 +30,7 @@ namespace OpenRA.Mods.Common.Activities if (NextActivity == null) self.CancelActivity(); - var reservation = aircraft.Reservation; - if (reservation != null) - { - reservation.Dispose(); - reservation = null; - } + aircraft.UnReserve(); var host = aircraft.GetActorBelow(); var hasHost = host != null; diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs index c344467f06..a8f835d520 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) @@ -453,12 +455,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; } @@ -546,9 +543,7 @@ namespace OpenRA.Mods.Common.Traits } else { - var res = order.TargetActor.TraitOrDefault(); - if (res != null) - Reservation = res.Reserve(order.TargetActor, self, this); + MakeReservation(order.TargetActor); Action enter = () => {