Add more info to Reservable dispose exception.

This commit is contained in:
Paul Chote
2011-02-26 13:05:58 +13:00
parent f74d2318d8
commit ced2247af8
5 changed files with 11 additions and 9 deletions

View File

@@ -40,7 +40,7 @@ namespace OpenRA.Mods.RA.Air
var res = dest.TraitOrDefault<Reservable>(); var res = dest.TraitOrDefault<Reservable>();
if (res != null) if (res != null)
self.Trait<Helicopter>().reservation = res.Reserve(self); self.Trait<Helicopter>().reservation = res.Reserve(dest, self);
var exit = dest.Info.Traits.WithInterface<ExitInfo>().FirstOrDefault(); var exit = dest.Info.Traits.WithInterface<ExitInfo>().FirstOrDefault();
var offset = exit != null ? exit.SpawnOffset : int2.Zero; var offset = exit != null ? exit.SpawnOffset : int2.Zero;

View File

@@ -92,7 +92,7 @@ namespace OpenRA.Mods.RA.Air
if (Reservable.IsReserved(order.TargetActor)) return; if (Reservable.IsReserved(order.TargetActor)) return;
var res = order.TargetActor.TraitOrDefault<Reservable>(); var res = order.TargetActor.TraitOrDefault<Reservable>();
if (res != null) if (res != null)
reservation = res.Reserve(self); reservation = res.Reserve(order.TargetActor, self);
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;

View File

@@ -41,11 +41,12 @@ namespace OpenRA.Mods.RA.Air
if (self.Trait<IMove>().Altitude == 0) if (self.Trait<IMove>().Altitude == 0)
{ {
/* not spawning in the air, so try to assoc. with our afld. this is a hack. */ /* not spawning in the air, so try to assoc. with our afld. this is a hack. */
var res = self.World.FindUnits(self.CenterLocation, self.CenterLocation) var afld = self.World.FindUnits(self.CenterLocation, self.CenterLocation)
.Select( a => a.TraitOrDefault<Reservable>() ).FirstOrDefault( a => a != null ); .FirstOrDefault( a => a.HasTrait<Reservable>() );
var res = afld.Trait<Reservable>();
if (res != null) if (res != null)
reservation = res.Reserve(self); reservation = res.Reserve(afld, self);
} }
} }
} }

View File

@@ -43,7 +43,7 @@ namespace OpenRA.Mods.RA.Air
if (res != null) if (res != null)
{ {
plane.UnReserve(); plane.UnReserve();
plane.reservation = res.Reserve(self); plane.reservation = res.Reserve(dest, self);
} }
var landPos = dest.CenterLocation; var landPos = dest.CenterLocation;

View File

@@ -28,13 +28,14 @@ namespace OpenRA.Mods.RA
reservedFor = null; /* not likely to arrive now. */ reservedFor = null; /* not likely to arrive now. */
} }
public IDisposable Reserve(Actor forActor) public IDisposable Reserve(Actor self, Actor forActor)
{ {
reservedFor = forActor; reservedFor = forActor;
return new DisposableAction(() => { reservedFor = null; }, return new DisposableAction(() => reservedFor = null,
() => Game.RunAfterTick(() => () => Game.RunAfterTick(() =>
{throw new InvalidOperationException("Attempted to finalize an undisposed DisposableAction");}) {throw new InvalidOperationException("Attempted to finalize an undisposed DisposableAction. {0} ({1}) reserved {2} ({3})"
.F(forActor.Info.Name, forActor.ActorID, self.Info.Name, self.ActorID));})
); );
} }