diff --git a/OpenRA.Game/Traits/AI/AutoTarget.cs b/OpenRA.Game/Traits/AI/AutoTarget.cs index 5fc774351d..84d3b73b32 100644 --- a/OpenRA.Game/Traits/AI/AutoTarget.cs +++ b/OpenRA.Game/Traits/AI/AutoTarget.cs @@ -19,13 +19,20 @@ #endregion using System.Linq; +using System.Drawing; namespace OpenRA.Traits { - class AutoTargetInfo : StatelessTraitInfo { } + class AutoTargetInfo : StatelessTraitInfo + { + public readonly float ScanTimeAverage = 2f; + public readonly float ScanTimeSpread = .5f; + } class AutoTarget : ITick, INotifyDamage { + int nextScanTime = 0; + void AttackTarget(Actor self, Actor target) { var attack = self.traits.Get(); @@ -37,16 +44,24 @@ namespace OpenRA.Traits { if (!self.IsIdle) return; - var attack = self.traits.Get(); - var range = Util.GetMaximumRange(self); - - if (attack.target == null || - (attack.target.Location - self.Location).LengthSquared > range * range + 2) - AttackTarget(self, ChooseTarget(self, range)); + if (--nextScanTime <= 0) + { + var attack = self.traits.Get(); + var range = Util.GetMaximumRange(self); + + if (attack.target == null || + (attack.target.Location - self.Location).LengthSquared > range * range + 2) + AttackTarget(self, ChooseTarget(self, range)); + + var info = self.Info.Traits.Get(); + nextScanTime = (int)(25 * (info.ScanTimeAverage + + (self.World.SharedRandom.NextDouble() * 2 - 1) * info.ScanTimeSpread)); + } } Actor ChooseTarget(Actor self, float range) { + Game.chat.AddLine(Color.White, "Debug", "AutoTarget.ChooseTarget()"); var inRange = self.World.FindUnitsInCircle(self.CenterLocation, Game.CellSize * range); return inRange diff --git a/OpenRA.Game/Traits/Activities/Move.cs b/OpenRA.Game/Traits/Activities/Move.cs index 60c6a686f0..7b4b4edf20 100755 --- a/OpenRA.Game/Traits/Activities/Move.cs +++ b/OpenRA.Game/Traits/Activities/Move.cs @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using System.Drawing; namespace OpenRA.Traits.Activities { @@ -96,7 +97,7 @@ namespace OpenRA.Traits.Activities return this; } - if( destination == self.Location ) + if (destination == self.Location) return NextActivity; if( path == null )