Add a distance based constructor to FlyForward

This commit is contained in:
abcdefg30
2020-04-13 18:47:08 +02:00
committed by Paul Chote
parent 5127a6813d
commit 80436a3195

View File

@@ -18,15 +18,28 @@ namespace OpenRA.Mods.Common.Activities
{ {
readonly Aircraft aircraft; readonly Aircraft aircraft;
readonly WDist cruiseAltitude; readonly WDist cruiseAltitude;
int remainingTicks; readonly int flyTicks;
int remainingDistance;
int ticks;
public FlyForward(int ticks, Actor self) FlyForward(Actor self)
{ {
remainingTicks = ticks;
aircraft = self.Trait<Aircraft>(); aircraft = self.Trait<Aircraft>();
cruiseAltitude = aircraft.Info.CruiseAltitude; cruiseAltitude = aircraft.Info.CruiseAltitude;
} }
public FlyForward(int ticks, Actor self)
: this(self)
{
flyTicks = ticks;
}
public FlyForward(Actor self, WDist distance)
: this(self)
{
remainingDistance = distance.Length;
}
public override bool Tick(Actor self) public override bool Tick(Actor self)
{ {
// Refuse to take off if it would land immediately again. // Refuse to take off if it would land immediately again.
@@ -36,11 +49,15 @@ namespace OpenRA.Mods.Common.Activities
return true; return true;
} }
if (IsCanceling || remainingTicks-- == 0) // Having flyTicks < 0 is valid and means the actor flies until this activity is canceled
if (IsCanceling || (flyTicks > 0 && ticks++ >= flyTicks) || (flyTicks == 0 && remainingDistance <= 0))
return true; return true;
Fly.FlyTick(self, aircraft, aircraft.Facing, cruiseAltitude); // FlyTick moves the aircraft while FlyStep calculates how far we are moving
if (remainingDistance != 0)
remainingDistance -= aircraft.FlyStep(aircraft.Facing).HorizontalLength;
Fly.FlyTick(self, aircraft, aircraft.Facing, cruiseAltitude);
return false; return false;
} }
} }