From b8a85091d4cc61746d98f6b7bee99bbf3a33626b Mon Sep 17 00:00:00 2001 From: Mustafa Alperen Seki Date: Wed, 20 Feb 2019 23:53:40 +0300 Subject: [PATCH] Make WithRangeCircle conditional --- .../Traits/Render/WithRangeCircle.cs | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Render/WithRangeCircle.cs b/OpenRA.Mods.Common/Traits/Render/WithRangeCircle.cs index 26217b49a1..ad2139262f 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithRangeCircle.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithRangeCircle.cs @@ -20,7 +20,7 @@ namespace OpenRA.Mods.Common.Traits.Render public enum RangeCircleVisibility { Always, WhenSelected } [Desc("Renders an arbitrary circle when selected or placing a structure")] - class WithRangeCircleInfo : ITraitInfo, IPlaceBuildingDecorationInfo + class WithRangeCircleInfo : ConditionalTraitInfo, IPlaceBuildingDecorationInfo { [Desc("Type of range circle. used to decide which circles to draw on other structures during building placement.")] public readonly string Type = null; @@ -43,37 +43,42 @@ namespace OpenRA.Mods.Common.Traits.Render public IEnumerable Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition) { - yield return new RangeCircleRenderable( - centerPosition, - Range, - 0, - Color, - Color.FromArgb(96, Color.Black)); + if (EnabledByDefault) + { + yield return new RangeCircleRenderable( + centerPosition, + Range, + 0, + Color, + Color.FromArgb(96, Color.Black)); - foreach (var a in w.ActorsWithTrait()) - if (a.Trait.Info.Type == Type) - foreach (var r in a.Trait.RenderRangeCircle(a.Actor, wr)) - yield return r; + foreach (var a in w.ActorsWithTrait()) + if (a.Trait.Info.Type == Type) + foreach (var r in a.Trait.RenderRangeCircle(a.Actor, wr)) + yield return r; + } } - public object Create(ActorInitializer init) { return new WithRangeCircle(init.Self, this); } + public override object Create(ActorInitializer init) { return new WithRangeCircle(init.Self, this); } } - class WithRangeCircle : IRenderAboveShroudWhenSelected, IRenderAboveWorld + class WithRangeCircle : ConditionalTrait, IRenderAboveShroudWhenSelected, IRenderAboveWorld { - public readonly WithRangeCircleInfo Info; readonly Actor self; public WithRangeCircle(Actor self, WithRangeCircleInfo info) + : base(info) { this.self = self; - Info = info; } bool Visible { get { + if (IsTraitDisabled) + return false; + var p = self.World.RenderPlayer; return p == null || Info.ValidStances.HasStance(self.Owner.Stances[p]) || (p.Spectating && !p.NonCombatant); }