Add IEffectAnnotation interface.

This commit is contained in:
Paul Chote
2019-09-15 16:39:58 +01:00
committed by abcdefg30
parent 0ff078968d
commit 8c1b0f1afe
5 changed files with 33 additions and 20 deletions

View File

@@ -10,13 +10,14 @@
#endregion
using System.Collections.Generic;
using System.Linq;
using OpenRA.Effects;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits;
namespace OpenRA.Mods.Common.Effects
{
class RallyPointIndicator : IEffect, IEffectAboveShroud
class RallyPointIndicator : IEffect, IEffectAboveShroud, IEffectAnnotation
{
readonly Actor building;
readonly RallyPoint rp;
@@ -92,26 +93,32 @@ namespace OpenRA.Mods.Common.Effects
if (!building.World.Selection.Contains(building))
return SpriteRenderable.None;
return RenderInner(wr);
}
IEnumerable<IRenderable> RenderInner(WorldRenderer wr)
{
if (Game.Settings.Game.TargetLines != TargetLinesType.Disabled)
yield return new TargetLineRenderable(targetLine, building.Owner.Color, rp.Info.LineWidth);
var renderables = SpriteRenderable.None;
if (circles != null || flag != null)
{
var palette = wr.Palette(rp.PaletteName);
if (circles != null)
foreach (var r in circles.Render(targetLine[1], palette))
yield return r;
renderables = renderables.Concat(circles.Render(targetLine[1], palette));
if (flag != null)
foreach (var r in flag.Render(targetLine[1], palette))
yield return r;
renderables = renderables.Concat(flag.Render(targetLine[1], palette));
}
return renderables;
}
IEnumerable<IRenderable> IEffectAnnotation.RenderAnnotation(WorldRenderer wr)
{
if (Game.Settings.Game.TargetLines == TargetLinesType.Disabled)
return SpriteRenderable.None;
if (!building.IsInWorld || !building.Owner.IsAlliedWith(building.World.LocalPlayer))
return SpriteRenderable.None;
if (!building.World.Selection.Contains(building))
return SpriteRenderable.None;
return new IRenderable[] { new TargetLineRenderable(targetLine, building.Owner.Color, rp.Info.LineWidth) };
}
}
}