From 17dfda4c9d24a716e00813bec814ddaa996c45ca Mon Sep 17 00:00:00 2001 From: penev92 Date: Sun, 4 Jan 2015 23:34:51 +0200 Subject: [PATCH 1/2] Some fixes to Cloak.IsVisible() --- OpenRA.Mods.Common/Traits/Cloak.cs | 11 +++-------- OpenRA.Mods.Common/Traits/DetectCloaked.cs | 14 ++++++++++++-- OpenRA.Mods.Common/Traits/TargetableUnit.cs | 2 +- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Cloak.cs b/OpenRA.Mods.Common/Traits/Cloak.cs index 3a3151734e..dd038e9b03 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 4fa703783c..0378a25eb1 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 8bd289163b..a773fa41b6 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); From 1c3dc388ea3ecc8b34210eb904adba1824402ca7 Mon Sep 17 00:00:00 2001 From: penev92 Date: Sun, 4 Jan 2015 23:50:54 +0200 Subject: [PATCH 2/2] Remove redundant (and possibly risky) AttackFollow.CanAttack() --- OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs b/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs index cce8a33933..7fa473960b 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);