diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs b/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs index 2a91fd7fd0..b2bd537606 100644 --- a/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs +++ b/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs @@ -27,14 +27,6 @@ namespace OpenRA.Mods.Common.Traits public AttackFollow(Actor self, AttackFollowInfo info) : base(self, info) { } - protected override bool CanAttack(Actor self, Target target) - { - if (!target.IsValidFor(self)) - return false; - - return base.CanAttack(self, target); - } - public virtual void Tick(Actor self) { DoAttack(self, Target); diff --git a/OpenRA.Mods.Common/Traits/Cloak.cs b/OpenRA.Mods.Common/Traits/Cloak.cs index 4c33fdcf36..efa06c1532 100644 --- a/OpenRA.Mods.Common/Traits/Cloak.cs +++ b/OpenRA.Mods.Common/Traits/Cloak.cs @@ -123,14 +123,9 @@ namespace OpenRA.Mods.Common.Traits if (!Cloaked || self.Owner.IsAlliedWith(viewer)) return true; - return self.World.ActorsWithTrait().Any(a => - { - var dc = a.Actor.Info.Traits.Get(); - - return a.Actor.Owner.IsAlliedWith(viewer) - && Info.CloakTypes.Intersect(dc.CloakTypes).Any() - && (self.CenterPosition - a.Actor.CenterPosition).Length <= WRange.FromCells(dc.Range).Range; - }); + return self.World.ActorsWithTrait().Any(a => a.Actor.Owner.IsAlliedWith(viewer) + && Info.CloakTypes.Intersect(a.Trait.Info.CloakTypes).Any() + && (self.CenterPosition - a.Actor.CenterPosition).Length <= WRange.FromCells(a.Trait.Info.Range).Range); } public Color RadarColorOverride(Actor self) diff --git a/OpenRA.Mods.Common/Traits/DetectCloaked.cs b/OpenRA.Mods.Common/Traits/DetectCloaked.cs index 7515d214b0..c66d7ab825 100644 --- a/OpenRA.Mods.Common/Traits/DetectCloaked.cs +++ b/OpenRA.Mods.Common/Traits/DetectCloaked.cs @@ -13,14 +13,24 @@ using OpenRA.Traits; namespace OpenRA.Mods.Common.Traits { [Desc("Actor can reveal Cloak actors in a specified range.")] - public class DetectCloakedInfo : TraitInfo + public class DetectCloakedInfo : ITraitInfo { [Desc("Specific cloak classifications I can reveal.")] public readonly string[] CloakTypes = { "Cloak" }; [Desc("Measured in cells.")] public readonly int Range = 5; + + public object Create(ActorInitializer init) { return new DetectCloaked(this); } } - public class DetectCloaked { } + public class DetectCloaked + { + public readonly DetectCloakedInfo Info; + + public DetectCloaked(DetectCloakedInfo info) + { + Info = info; + } + } } diff --git a/OpenRA.Mods.Common/Traits/TargetableUnit.cs b/OpenRA.Mods.Common/Traits/TargetableUnit.cs index 237a01b9ec..7b3b00cd45 100644 --- a/OpenRA.Mods.Common/Traits/TargetableUnit.cs +++ b/OpenRA.Mods.Common/Traits/TargetableUnit.cs @@ -38,7 +38,7 @@ namespace OpenRA.Mods.Common.Traits public virtual bool TargetableBy(Actor self, Actor viewer) { - if (cloak == null || !cloak.Cloaked) + if (cloak == null) return true; return cloak.IsVisible(self, viewer.Owner);