rude hack to make planes associate with the airfield which spawned them

This commit is contained in:
Chris Forbes
2010-07-23 20:39:51 +12:00
parent cad1418199
commit 31cb2081c6

View File

@@ -21,12 +21,30 @@ namespace OpenRA.Mods.RA
public override object Create( ActorInitializer init ) { return new Plane( init ); }
}
public class Plane : Aircraft, IIssueOrder, IResolveOrder, IOrderCursor, IOrderVoice
public class Plane : Aircraft, IIssueOrder, IResolveOrder, IOrderCursor, IOrderVoice, ITick
{
public IDisposable reservation;
public Plane( ActorInitializer init ) : base( init ) { }
bool firstTick = true;
public void Tick(Actor self)
{
if (firstTick)
{
firstTick = false;
if (self.traits.Get<Unit>().Altitude == 0)
{
/* 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)
.Select( a => a.traits.GetOrDefault<Reservable>() ).FirstOrDefault( a => a != null );
if (res != null)
reservation = res.Reserve(self);
}
}
}
public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor)
{
if (mi.Button == MouseButton.Left) return null;