diff --git a/OpenRA.Mods.Common/Traits/Render/RenderJammerCircle.cs b/OpenRA.Mods.Common/Traits/Render/RenderJammerCircle.cs index 941f8e6b13..b84c373679 100644 --- a/OpenRA.Mods.Common/Traits/Render/RenderJammerCircle.cs +++ b/OpenRA.Mods.Common/Traits/Render/RenderJammerCircle.cs @@ -18,7 +18,7 @@ using OpenRA.Traits; namespace OpenRA.Mods.Common.Traits { // TODO: remove all the Render*Circle duplication - class RenderJammerCircleInfo : TraitInfo, IPlaceBuildingDecorationInfo + class RenderJammerCircleInfo : ConditionalTraitInfo, IPlaceBuildingDecorationInfo { [Desc("Range circle color.")] public readonly Color Color = Color.FromArgb(128, Color.Red); @@ -34,6 +34,9 @@ namespace OpenRA.Mods.Common.Traits public IEnumerable RenderAnnotations(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition) { + if (!EnabledByDefault) + yield break; + var jamsMissiles = ai.TraitInfoOrDefault(); if (jamsMissiles != null) { @@ -56,17 +59,21 @@ namespace OpenRA.Mods.Common.Traits public override object Create(ActorInitializer init) { return new RenderJammerCircle(this); } } - class RenderJammerCircle : IRenderAnnotationsWhenSelected + class RenderJammerCircle : ConditionalTrait, IRenderAnnotationsWhenSelected { readonly RenderJammerCircleInfo info; public RenderJammerCircle(RenderJammerCircleInfo info) + : base(info) { this.info = info; } public IEnumerable RenderAnnotations(Actor self, WorldRenderer wr) { + if (IsTraitDisabled) + yield break; + if (!self.Owner.IsAlliedWith(self.World.RenderPlayer)) yield break; diff --git a/OpenRA.Mods.Common/Traits/Render/RenderShroudCircle.cs b/OpenRA.Mods.Common/Traits/Render/RenderShroudCircle.cs index 3f01a3ee8c..8a38327264 100644 --- a/OpenRA.Mods.Common/Traits/Render/RenderShroudCircle.cs +++ b/OpenRA.Mods.Common/Traits/Render/RenderShroudCircle.cs @@ -18,7 +18,7 @@ using OpenRA.Traits; namespace OpenRA.Mods.Common.Traits { - class RenderShroudCircleInfo : TraitInfo, IPlaceBuildingDecorationInfo + class RenderShroudCircleInfo : ConditionalTraitInfo, IPlaceBuildingDecorationInfo { [Desc("Color of the circle.")] public readonly Color Color = Color.FromArgb(128, Color.Cyan); @@ -34,6 +34,9 @@ namespace OpenRA.Mods.Common.Traits public IEnumerable RenderAnnotations(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition) { + if (!EnabledByDefault) + return Enumerable.Empty(); + var localRange = ai.TraitInfos() .Where(csi => csi.EnabledByDefault) .Select(csi => csi.Range) @@ -58,26 +61,32 @@ namespace OpenRA.Mods.Common.Traits public override object Create(ActorInitializer init) { return new RenderShroudCircle(this); } } - class RenderShroudCircle : INotifyCreated, IRenderAnnotationsWhenSelected + class RenderShroudCircle : ConditionalTrait, INotifyCreated, IRenderAnnotationsWhenSelected { readonly RenderShroudCircleInfo info; WDist range; public RenderShroudCircle(RenderShroudCircleInfo info) + : base(info) { this.info = info; } - void INotifyCreated.Created(Actor self) + protected override void Created(Actor self) { range = self.TraitsImplementing() .Select(cs => cs.Info.Range) .DefaultIfEmpty(WDist.Zero) .Max(); + + base.Created(self); } public IEnumerable RangeCircleRenderables(Actor self) { + if (IsTraitDisabled) + yield break; + if (!self.Owner.IsAlliedWith(self.World.RenderPlayer)) yield break;