diff --git a/OpenRA.Mods.Cnc/Traits/TDGunboat.cs b/OpenRA.Mods.Cnc/Traits/TDGunboat.cs index 534aae9f2e..d8c5851a10 100644 --- a/OpenRA.Mods.Cnc/Traits/TDGunboat.cs +++ b/OpenRA.Mods.Cnc/Traits/TDGunboat.cs @@ -191,6 +191,11 @@ namespace OpenRA.Mods.Cnc.Traits public Activity MoveIntoTarget(Actor self, Target target) { return null; } public Activity VisualMove(Actor self, WPos fromPos, WPos toPos) { return null; } + public int EstimatedMoveDuration(Actor self, WPos fromPos, WPos toPos) + { + return (toPos - fromPos).Length / Info.Speed; + } + public CPos NearestMoveableCell(CPos cell) { return cell; } // Actors with TDGunboat always move diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs index 89326548f9..75860ee2ac 100644 --- a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs +++ b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs @@ -624,6 +624,12 @@ namespace OpenRA.Mods.Common.Traits new HeliFly(self, Target.FromPos(toPos))); } + public int EstimatedMoveDuration(Actor self, WPos fromPos, WPos toPos) + { + var speed = MovementSpeed; + return speed > 0 ? (toPos - fromPos).Length / speed : 0; + } + public CPos NearestMoveableCell(CPos cell) { return cell; } public bool IsMoving { get { return isMoving; } set { } } diff --git a/OpenRA.Mods.Common/Traits/Mobile.cs b/OpenRA.Mods.Common/Traits/Mobile.cs index e267500c70..7fccc732ba 100644 --- a/OpenRA.Mods.Common/Traits/Mobile.cs +++ b/OpenRA.Mods.Common/Traits/Mobile.cs @@ -465,6 +465,12 @@ namespace OpenRA.Mods.Common.Traits return VisualMove(self, fromPos, toPos, self.Location); } + public int EstimatedMoveDuration(Actor self, WPos fromPos, WPos toPos) + { + var speed = MovementSpeedForCell(self, self.Location); + return speed > 0 ? (toPos - fromPos).Length / speed : 0; + } + public CPos NearestMoveableCell(CPos target) { // Limit search to a radius of 10 tiles diff --git a/OpenRA.Mods.Common/TraitsInterfaces.cs b/OpenRA.Mods.Common/TraitsInterfaces.cs index b9e264f9cb..2eabfd6a58 100644 --- a/OpenRA.Mods.Common/TraitsInterfaces.cs +++ b/OpenRA.Mods.Common/TraitsInterfaces.cs @@ -399,6 +399,7 @@ namespace OpenRA.Mods.Common.Traits Activity MoveToTarget(Actor self, Target target); Activity MoveIntoTarget(Actor self, Target target); Activity VisualMove(Actor self, WPos fromPos, WPos toPos); + int EstimatedMoveDuration(Actor self, WPos fromPos, WPos toPos); CPos NearestMoveableCell(CPos target); bool IsMoving { get; set; } bool IsMovingVertically { get; set; }