diff --git a/OpenRA.Mods.RA/Cloak.cs b/OpenRA.Mods.RA/Cloak.cs index 7e6aecd82e..bcbeabf7ab 100644 --- a/OpenRA.Mods.RA/Cloak.cs +++ b/OpenRA.Mods.RA/Cloak.cs @@ -108,10 +108,9 @@ namespace OpenRA.Mods.RA if (!Cloaked || self.Owner.IsAlliedWith(viewer)) return true; - // TODO: Change this to be per-player? A cloak detector revealing to everyone is dumb - return self.World.ActorsWithTrait().Any(a => - a.Actor.Owner.Stances[self.Owner] != Stance.Ally && - (self.Location - a.Actor.Location).Length < a.Actor.Info.Traits.Get().Range); + var centerPosition = self.CenterPosition; + return self.World.ActorsWithTrait().Any(a => a.Actor.Owner.IsAlliedWith(viewer) && + (centerPosition - a.Actor.CenterPosition).Length < WRange.FromCells(a.Actor.Info.Traits.Get().Range).Range); } public Color RadarColorOverride(Actor self) diff --git a/OpenRA.Mods.RA/TargetableUnit.cs b/OpenRA.Mods.RA/TargetableUnit.cs index 5797c19f92..34d3d3ab20 100755 --- a/OpenRA.Mods.RA/TargetableUnit.cs +++ b/OpenRA.Mods.RA/TargetableUnit.cs @@ -33,15 +33,12 @@ namespace OpenRA.Mods.RA cloak = self.TraitOrDefault(); } - public virtual bool TargetableBy(Actor self, Actor byActor) + public virtual bool TargetableBy(Actor self, Actor viewer) { if (cloak == null || !cloak.Cloaked) return true; - if (self.Owner.IsAlliedWith(byActor.Owner)) - return true; - - return self.World.ActorsWithTrait().Any(a => (self.Location - a.Actor.Location).Length < a.Actor.Info.Traits.Get().Range); + return cloak.IsVisible(self, viewer.Owner); } public virtual string[] TargetTypes { get { return info.TargetTypes; } }