diff --git a/OpenRA.Mods.Common/Activities/Air/Fly.cs b/OpenRA.Mods.Common/Activities/Air/Fly.cs index 07fd021b00..70ada20612 100644 --- a/OpenRA.Mods.Common/Activities/Air/Fly.cs +++ b/OpenRA.Mods.Common/Activities/Air/Fly.cs @@ -37,6 +37,8 @@ namespace OpenRA.Mods.Common.Activities public static void FlyToward(Actor self, Plane plane, int desiredFacing, WDist desiredAltitude) { + desiredAltitude = new WDist(plane.CenterPosition.Z) + desiredAltitude - self.World.Map.DistanceAboveTerrain(plane.CenterPosition); + var move = plane.FlyStep(plane.Facing); var altitude = plane.CenterPosition.Z; @@ -71,7 +73,8 @@ namespace OpenRA.Mods.Common.Activities var desiredFacing = Util.GetFacing(d, plane.Facing); // Don't turn until we've reached the cruise altitude - if (plane.CenterPosition.Z < plane.Info.CruiseAltitude.Length) + var targetAltitude = plane.CenterPosition.Z + plane.Info.CruiseAltitude.Length - self.World.Map.DistanceAboveTerrain(plane.CenterPosition).Length; + if (plane.CenterPosition.Z < targetAltitude) desiredFacing = plane.Facing; FlyToward(self, plane, desiredFacing, plane.Info.CruiseAltitude); diff --git a/OpenRA.Mods.Common/Activities/Air/HeliFly.cs b/OpenRA.Mods.Common/Activities/Air/HeliFly.cs index 5b4289f142..c4b128c993 100644 --- a/OpenRA.Mods.Common/Activities/Air/HeliFly.cs +++ b/OpenRA.Mods.Common/Activities/Air/HeliFly.cs @@ -38,6 +38,8 @@ namespace OpenRA.Mods.Common.Activities public static bool AdjustAltitude(Actor self, Helicopter helicopter, WDist targetAltitude) { + targetAltitude = new WDist(helicopter.CenterPosition.Z) + targetAltitude - self.World.Map.DistanceAboveTerrain(helicopter.CenterPosition); + var altitude = helicopter.CenterPosition.Z; if (altitude == targetAltitude.Length) return false; @@ -85,7 +87,8 @@ namespace OpenRA.Mods.Common.Activities // The next move would overshoot, so just set the final position if (dist.HorizontalLengthSquared < move.HorizontalLengthSquared) { - helicopter.SetPosition(self, pos + new WVec(0, 0, helicopter.Info.CruiseAltitude.Length - pos.Z)); + var targetAltitude = helicopter.CenterPosition.Z + helicopter.Info.CruiseAltitude.Length - self.World.Map.DistanceAboveTerrain(helicopter.CenterPosition).Length; + helicopter.SetPosition(self, pos + new WVec(0, 0, targetAltitude - pos.Z)); return NextActivity; }