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 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>();
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)
{
// Refuse to take off if it would land immediately again.
@@ -36,11 +49,15 @@ namespace OpenRA.Mods.Common.Activities
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;
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;
}
}