some improvement to alfd/plane interaction

This commit is contained in:
Chris Forbes
2010-08-01 14:32:59 +12:00
parent 19c5c56ab2
commit 002bc20d50
3 changed files with 20 additions and 6 deletions

View File

@@ -35,10 +35,17 @@ namespace OpenRA.Mods.RA.Activities
void Calculate(Actor self) void Calculate(Actor self)
{ {
if (dest == null) dest = ChooseAirfield(self); if (dest == null)
var res = dest.traits.GetOrDefault<Reservable>(); {
if (res != null) dest = ChooseAirfield(self);
self.traits.Get<Plane>().reservation = res.Reserve(self); var res = dest.traits.GetOrDefault<Reservable>();
if (res != null)
{
var plane = self.traits.Get<Plane>();
plane.UnReserve();
plane.reservation = res.Reserve(self);
}
}
var landPos = dest.CenterLocation; var landPos = dest.CenterLocation;
var aircraft = self.traits.Get<Aircraft>(); var aircraft = self.traits.Get<Aircraft>();

View File

@@ -74,7 +74,7 @@ namespace OpenRA.Mods.RA
return (order.OrderString == "Move" || order.OrderString == "Enter") ? "Move" : null; return (order.OrderString == "Move" || order.OrderString == "Enter") ? "Move" : null;
} }
void UnReserve() public void UnReserve()
{ {
if (reservation != null) if (reservation != null)
{ {
@@ -122,7 +122,7 @@ namespace OpenRA.Mods.RA
if (line != null) if (line != null)
line.SetTarget(self, Target.FromOrder(order), Color.Green); line.SetTarget(self, Target.FromOrder(order), Color.Green);
}); });
self.CancelActivity(); self.CancelActivity();
self.QueueActivity(new ReturnToBase(self, order.TargetActor)); self.QueueActivity(new ReturnToBase(self, order.TargetActor));
self.QueueActivity( self.QueueActivity(
@@ -130,7 +130,10 @@ namespace OpenRA.Mods.RA
? (IActivity)new Rearm() : new Repair(order.TargetActor)); ? (IActivity)new Rearm() : new Repair(order.TargetActor));
} }
else else
{
Game.Debug("Unreserve due to unhandled order: {0}".F(order.OrderString));
UnReserve(); UnReserve();
}
} }
} }
} }

View File

@@ -36,6 +36,10 @@ namespace OpenRA.Mods.RA
public IDisposable Reserve(Actor forActor) public IDisposable Reserve(Actor forActor)
{ {
if (reservedFor != null)
Game.Debug("BUG: #{0} {1} was already reserved (by #{2} {3})".F(
self.ActorID, self.Info.Name, reservedFor.ActorID, reservedFor.Info.Name));
reservedFor = forActor; reservedFor = forActor;
Game.Debug("#{0} {1} reserved by #{2} {3}".F( Game.Debug("#{0} {1} reserved by #{2} {3}".F(
self.ActorID, self.Info.Name, forActor.ActorID, forActor.Info.Name)); self.ActorID, self.Info.Name, forActor.ActorID, forActor.Info.Name));