diff --git a/OpenRA.Mods.RA/Cloak.cs b/OpenRA.Mods.RA/Cloak.cs index 59ed7ec97d..87860f5bdd 100644 --- a/OpenRA.Mods.RA/Cloak.cs +++ b/OpenRA.Mods.RA/Cloak.cs @@ -29,6 +29,8 @@ namespace OpenRA.Mods.RA public readonly string UncloakSound = null; public readonly string Palette = "cloak"; + public readonly string[] CloakTypes = { "Cloak" }; + public object Create(ActorInitializer init) { return new Cloak(init.self, this); } } @@ -109,9 +111,14 @@ namespace OpenRA.Mods.RA if (!Cloaked || self.Owner.IsAlliedWith(viewer)) return true; - 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); + 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; + }); } public Color RadarColorOverride(Actor self) diff --git a/OpenRA.Mods.RA/DetectCloaked.cs b/OpenRA.Mods.RA/DetectCloaked.cs index 3bc907390c..27a79b2717 100644 --- a/OpenRA.Mods.RA/DetectCloaked.cs +++ b/OpenRA.Mods.RA/DetectCloaked.cs @@ -14,6 +14,7 @@ namespace OpenRA.Mods.RA { class DetectCloakedInfo : TraitInfo { + public readonly string[] CloakTypes = { "Cloak" }; public readonly int Range = 5; } diff --git a/mods/ra/rules/ships.yaml b/mods/ra/rules/ships.yaml index 6718261f9f..20fb101459 100644 --- a/mods/ra/rules/ships.yaml +++ b/mods/ra/rules/ships.yaml @@ -26,6 +26,7 @@ SS: CloakedTargetTypes: Underwater RenderUnit: Cloak: + CloakTypes: Underwater InitialDelay: 0 CloakDelay: 50 CloakSound: subshow1.aud @@ -71,6 +72,7 @@ MSUB: TargetTypes: Ground, Water CloakedTargetTypes: Underwater Cloak: + CloakTypes: Underwater InitialDelay: 0 CloakDelay: 100 CloakSound: subshow1.aud @@ -131,6 +133,7 @@ DD: IronCurtainable: RepairableNear: DetectCloaked: + CloakTypes: Underwater Range: 4 RenderDetectionCircle: @@ -265,6 +268,7 @@ PT: IronCurtainable: RepairableNear: DetectCloaked: + CloakTypes: Underwater Range: 4 RenderDetectionCircle: