Add more info to Reservable dispose exception.
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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));})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user