Convert WithRangeCircle to IRenderAboveShroud.

This commit is contained in:
Paul Chote
2019-09-02 22:05:10 +01:00
committed by teinarss
parent 7f6149713e
commit a9a43d54f7

View File

@@ -54,7 +54,7 @@ namespace OpenRA.Mods.Common.Traits.Render
foreach (var a in w.ActorsWithTrait<WithRangeCircle>()) foreach (var a in w.ActorsWithTrait<WithRangeCircle>())
if (a.Trait.Info.Type == Type) if (a.Trait.Info.Type == Type)
foreach (var r in a.Trait.RenderRangeCircle(a.Actor, wr)) foreach (var r in a.Trait.RenderRangeCircle(a.Actor, wr, RangeCircleVisibility.WhenSelected))
yield return r; yield return r;
} }
} }
@@ -62,7 +62,7 @@ namespace OpenRA.Mods.Common.Traits.Render
public override object Create(ActorInitializer init) { return new WithRangeCircle(init.Self, this); } public override object Create(ActorInitializer init) { return new WithRangeCircle(init.Self, this); }
} }
class WithRangeCircle : ConditionalTrait<WithRangeCircleInfo>, IRenderAboveShroudWhenSelected, IRenderAboveWorld class WithRangeCircle : ConditionalTrait<WithRangeCircleInfo>, IRenderAboveShroudWhenSelected, IRenderAboveShroud
{ {
readonly Actor self; readonly Actor self;
@@ -84,37 +84,29 @@ namespace OpenRA.Mods.Common.Traits.Render
} }
} }
public IEnumerable<IRenderable> RenderRangeCircle(Actor self, WorldRenderer wr) public IEnumerable<IRenderable> RenderRangeCircle(Actor self, WorldRenderer wr, RangeCircleVisibility visibility)
{ {
if (Info.Visible == RangeCircleVisibility.WhenSelected && Visible) if (Info.Visible == visibility && Visible)
yield return new RangeCircleRenderable( yield return new RangeCircleRenderable(
self.CenterPosition, self.CenterPosition,
Info.Range, Info.Range,
0, 0,
Info.UsePlayerColor ? self.Owner.Color : Info.Color, Info.UsePlayerColor ? self.Owner.Color : Info.Color,
Color.FromArgb(96, Color.Black)); Color.FromArgb(96, Color.Black));
yield break;
} }
IEnumerable<IRenderable> IRenderAboveShroudWhenSelected.RenderAboveShroud(Actor self, WorldRenderer wr) IEnumerable<IRenderable> IRenderAboveShroudWhenSelected.RenderAboveShroud(Actor self, WorldRenderer wr)
{ {
return RenderRangeCircle(self, wr); return RenderRangeCircle(self, wr, RangeCircleVisibility.WhenSelected);
} }
bool IRenderAboveShroudWhenSelected.SpatiallyPartitionable { get { return false; } } bool IRenderAboveShroudWhenSelected.SpatiallyPartitionable { get { return false; } }
void IRenderAboveWorld.RenderAboveWorld(Actor self, WorldRenderer wr) IEnumerable<IRenderable> IRenderAboveShroud.RenderAboveShroud(Actor self, WorldRenderer wr)
{ {
if (Info.Visible == RangeCircleVisibility.Always && Visible) return RenderRangeCircle(self, wr, RangeCircleVisibility.Always);
RangeCircleRenderable.DrawRangeCircle(
wr,
self.CenterPosition,
Info.Range,
1,
Info.UsePlayerColor ? self.Owner.Color : Info.Color,
3,
Color.FromArgb(96, Color.Black));
} }
bool IRenderAboveShroud.SpatiallyPartitionable { get { return false; } }
} }
} }