diff --git a/OpenRA.Mods.RA/AutoHeal.cs b/OpenRA.Mods.RA/AutoHeal.cs index 0d3a1d56b9..5cdacc509a 100644 --- a/OpenRA.Mods.RA/AutoHeal.cs +++ b/OpenRA.Mods.RA/AutoHeal.cs @@ -18,48 +18,21 @@ namespace OpenRA.Mods.RA class AutoHeal : INotifyIdle { - bool NeedsNewTarget(Actor self) + public void TickIdle( Actor self ) { var attack = self.Trait(); - var range = attack.GetMaximumRange(); + var inRange = self.World.FindUnitsInCircle(self.CenterLocation, Game.CellSize * attack.GetMaximumRange()); - if (currentTarget == null || !currentTarget.IsInWorld) - return true; // he's dead. - if( !Combat.IsInRange( self.CenterLocation, range, currentTarget ) ) - return true; // wandered off faster than we could follow - - if (currentTarget.GetDamageState() == DamageState.Undamaged) - return true; // fully healed - - return false; - } - - Actor ChooseTarget(Actor self, float range) - { - var inRange = self.World.FindUnitsInCircle(self.CenterLocation, Game.CellSize * range); - var attack = self.Trait(); - - return inRange + var target = inRange .Where(a => a != self && self.Owner.Stances[a.Owner] == Stance.Ally) .Where(a => a.IsInWorld && !a.IsDead()) .Where(a => a.HasTrait() && a.GetDamageState() > DamageState.Undamaged) .Where(a => attack.HasAnyValidWeapons(Target.FromActor(a))) .OrderBy(a => (a.CenterLocation - self.CenterLocation).LengthSquared) .FirstOrDefault(); - } - - Actor currentTarget; - public void TickIdle( Actor self ) - { - var attack = self.Trait(); - var range = attack.GetMaximumRange(); - - if (NeedsNewTarget(self)) - { - var currentTarget = ChooseTarget(self, range); - if( currentTarget != null ) - self.QueueActivity(self.Trait().GetAttackActivity(self, Target.FromActor( currentTarget ), false )); - } + + if( target != null ) + self.QueueActivity(self.Trait().GetAttackActivity(self, Target.FromActor( target ), false )); } } -} +} \ No newline at end of file diff --git a/OpenRA.Mods.RA/AutoTarget.cs b/OpenRA.Mods.RA/AutoTarget.cs index 12f743a5fa..a9bcae527b 100644 --- a/OpenRA.Mods.RA/AutoTarget.cs +++ b/OpenRA.Mods.RA/AutoTarget.cs @@ -40,10 +40,10 @@ namespace OpenRA.Mods.RA public void TickIdle( Actor self ) { var attack = self.Trait(); - var currentTarget = attack.ScanForTarget(self, null); - if( currentTarget != null ) + var target = attack.ScanForTarget(self, null); + if( target != null ) self.QueueActivity(attack.GetAttackActivity( self, - Target.FromActor(currentTarget), + Target.FromActor(target), self.Info.Traits.Get().AllowMovement )); }