Make RenderShroud/JammerCircle conditional.

This commit is contained in:
Matthias Mailänder
2022-12-02 21:11:08 +01:00
committed by Paul Chote
parent 475468ccc7
commit 46caa2d889
2 changed files with 21 additions and 5 deletions

View File

@@ -18,7 +18,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits namespace OpenRA.Mods.Common.Traits
{ {
// TODO: remove all the Render*Circle duplication // TODO: remove all the Render*Circle duplication
class RenderJammerCircleInfo : TraitInfo, IPlaceBuildingDecorationInfo class RenderJammerCircleInfo : ConditionalTraitInfo, IPlaceBuildingDecorationInfo
{ {
[Desc("Range circle color.")] [Desc("Range circle color.")]
public readonly Color Color = Color.FromArgb(128, Color.Red); public readonly Color Color = Color.FromArgb(128, Color.Red);
@@ -34,6 +34,9 @@ namespace OpenRA.Mods.Common.Traits
public IEnumerable<IRenderable> RenderAnnotations(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition) public IEnumerable<IRenderable> RenderAnnotations(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition)
{ {
if (!EnabledByDefault)
yield break;
var jamsMissiles = ai.TraitInfoOrDefault<JamsMissilesInfo>(); var jamsMissiles = ai.TraitInfoOrDefault<JamsMissilesInfo>();
if (jamsMissiles != null) if (jamsMissiles != null)
{ {
@@ -56,17 +59,21 @@ namespace OpenRA.Mods.Common.Traits
public override object Create(ActorInitializer init) { return new RenderJammerCircle(this); } public override object Create(ActorInitializer init) { return new RenderJammerCircle(this); }
} }
class RenderJammerCircle : IRenderAnnotationsWhenSelected class RenderJammerCircle : ConditionalTrait<RenderJammerCircleInfo>, IRenderAnnotationsWhenSelected
{ {
readonly RenderJammerCircleInfo info; readonly RenderJammerCircleInfo info;
public RenderJammerCircle(RenderJammerCircleInfo info) public RenderJammerCircle(RenderJammerCircleInfo info)
: base(info)
{ {
this.info = info; this.info = info;
} }
public IEnumerable<IRenderable> RenderAnnotations(Actor self, WorldRenderer wr) public IEnumerable<IRenderable> RenderAnnotations(Actor self, WorldRenderer wr)
{ {
if (IsTraitDisabled)
yield break;
if (!self.Owner.IsAlliedWith(self.World.RenderPlayer)) if (!self.Owner.IsAlliedWith(self.World.RenderPlayer))
yield break; yield break;

View File

@@ -18,7 +18,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits namespace OpenRA.Mods.Common.Traits
{ {
class RenderShroudCircleInfo : TraitInfo, IPlaceBuildingDecorationInfo class RenderShroudCircleInfo : ConditionalTraitInfo, IPlaceBuildingDecorationInfo
{ {
[Desc("Color of the circle.")] [Desc("Color of the circle.")]
public readonly Color Color = Color.FromArgb(128, Color.Cyan); public readonly Color Color = Color.FromArgb(128, Color.Cyan);
@@ -34,6 +34,9 @@ namespace OpenRA.Mods.Common.Traits
public IEnumerable<IRenderable> RenderAnnotations(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition) public IEnumerable<IRenderable> RenderAnnotations(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition)
{ {
if (!EnabledByDefault)
return Enumerable.Empty<IRenderable>();
var localRange = ai.TraitInfos<CreatesShroudInfo>() var localRange = ai.TraitInfos<CreatesShroudInfo>()
.Where(csi => csi.EnabledByDefault) .Where(csi => csi.EnabledByDefault)
.Select(csi => csi.Range) .Select(csi => csi.Range)
@@ -58,26 +61,32 @@ namespace OpenRA.Mods.Common.Traits
public override object Create(ActorInitializer init) { return new RenderShroudCircle(this); } public override object Create(ActorInitializer init) { return new RenderShroudCircle(this); }
} }
class RenderShroudCircle : INotifyCreated, IRenderAnnotationsWhenSelected class RenderShroudCircle : ConditionalTrait<RenderShroudCircleInfo>, INotifyCreated, IRenderAnnotationsWhenSelected
{ {
readonly RenderShroudCircleInfo info; readonly RenderShroudCircleInfo info;
WDist range; WDist range;
public RenderShroudCircle(RenderShroudCircleInfo info) public RenderShroudCircle(RenderShroudCircleInfo info)
: base(info)
{ {
this.info = info; this.info = info;
} }
void INotifyCreated.Created(Actor self) protected override void Created(Actor self)
{ {
range = self.TraitsImplementing<CreatesShroud>() range = self.TraitsImplementing<CreatesShroud>()
.Select(cs => cs.Info.Range) .Select(cs => cs.Info.Range)
.DefaultIfEmpty(WDist.Zero) .DefaultIfEmpty(WDist.Zero)
.Max(); .Max();
base.Created(self);
} }
public IEnumerable<IRenderable> RangeCircleRenderables(Actor self) public IEnumerable<IRenderable> RangeCircleRenderables(Actor self)
{ {
if (IsTraitDisabled)
yield break;
if (!self.Owner.IsAlliedWith(self.World.RenderPlayer)) if (!self.Owner.IsAlliedWith(self.World.RenderPlayer))
yield break; yield break;