some improvement to alfd/plane interaction
This commit is contained in:
@@ -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>();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
Reference in New Issue
Block a user