Add IEffectAnnotation interface.
This commit is contained in:
@@ -24,4 +24,5 @@ namespace OpenRA.Effects
|
|||||||
public interface ISpatiallyPartitionable { }
|
public interface ISpatiallyPartitionable { }
|
||||||
|
|
||||||
public interface IEffectAboveShroud { IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr); }
|
public interface IEffectAboveShroud { IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr); }
|
||||||
|
public interface IEffectAnnotation { IEnumerable<IRenderable> RenderAnnotation(WorldRenderer wr); }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -166,12 +166,17 @@ namespace OpenRA.Graphics
|
|||||||
.Where(t => !t.SpatiallyPartitionable || onScreenActors.Contains(a))
|
.Where(t => !t.SpatiallyPartitionable || onScreenActors.Contains(a))
|
||||||
.SelectMany(t => t.RenderAnnotations(a, this)));
|
.SelectMany(t => t.RenderAnnotations(a, this)));
|
||||||
|
|
||||||
|
var effects = World.Effects.Select(e => e as IEffectAnnotation)
|
||||||
|
.Where(e => e != null)
|
||||||
|
.SelectMany(e => e.RenderAnnotation(this));
|
||||||
|
|
||||||
var orderGenerator = SpriteRenderable.None;
|
var orderGenerator = SpriteRenderable.None;
|
||||||
if (World.OrderGenerator != null)
|
if (World.OrderGenerator != null)
|
||||||
orderGenerator = World.OrderGenerator.RenderAnnotations(this, World);
|
orderGenerator = World.OrderGenerator.RenderAnnotations(this, World);
|
||||||
|
|
||||||
return actors
|
return actors
|
||||||
.Concat(selected)
|
.Concat(selected)
|
||||||
|
.Concat(effects)
|
||||||
.Concat(orderGenerator)
|
.Concat(orderGenerator)
|
||||||
.Select(r => r.PrepareRender(this));
|
.Select(r => r.PrepareRender(this));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.Cnc.Effects
|
namespace OpenRA.Mods.Cnc.Effects
|
||||||
{
|
{
|
||||||
class GpsDotEffect : IEffect, IEffectAboveShroud
|
class GpsDotEffect : IEffect, IEffectAnnotation
|
||||||
{
|
{
|
||||||
readonly Actor actor;
|
readonly Actor actor;
|
||||||
readonly GpsDotInfo info;
|
readonly GpsDotInfo info;
|
||||||
@@ -97,7 +97,7 @@ namespace OpenRA.Mods.Cnc.Effects
|
|||||||
return SpriteRenderable.None;
|
return SpriteRenderable.None;
|
||||||
}
|
}
|
||||||
|
|
||||||
IEnumerable<IRenderable> IEffectAboveShroud.RenderAboveShroud(WorldRenderer wr)
|
IEnumerable<IRenderable> IEffectAnnotation.RenderAnnotation(WorldRenderer wr)
|
||||||
{
|
{
|
||||||
if (actor.World.RenderPlayer == null || !dotStates[actor.World.RenderPlayer].Visible)
|
if (actor.World.RenderPlayer == null || !dotStates[actor.World.RenderPlayer].Visible)
|
||||||
return SpriteRenderable.None;
|
return SpriteRenderable.None;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ using OpenRA.Primitives;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.Common.Effects
|
namespace OpenRA.Mods.Common.Effects
|
||||||
{
|
{
|
||||||
public class FloatingText : IEffect, IEffectAboveShroud
|
public class FloatingText : IEffect, IEffectAnnotation
|
||||||
{
|
{
|
||||||
static readonly WVec Velocity = new WVec(0, 0, 86);
|
static readonly WVec Velocity = new WVec(0, 0, 86);
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ namespace OpenRA.Mods.Common.Effects
|
|||||||
remaining = duration;
|
remaining = duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Tick(World world)
|
void IEffect.Tick(World world)
|
||||||
{
|
{
|
||||||
if (--remaining <= 0)
|
if (--remaining <= 0)
|
||||||
world.AddFrameEndTask(w => w.Remove(this));
|
world.AddFrameEndTask(w => w.Remove(this));
|
||||||
@@ -45,9 +45,9 @@ namespace OpenRA.Mods.Common.Effects
|
|||||||
pos += Velocity;
|
pos += Velocity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IRenderable> Render(WorldRenderer wr) { return SpriteRenderable.None; }
|
IEnumerable<IRenderable> IEffect.Render(WorldRenderer wr) { return SpriteRenderable.None; }
|
||||||
|
|
||||||
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr)
|
IEnumerable<IRenderable> IEffectAnnotation.RenderAnnotation(WorldRenderer wr)
|
||||||
{
|
{
|
||||||
if (wr.World.FogObscures(pos) || wr.World.ShroudObscures(pos))
|
if (wr.World.FogObscures(pos) || wr.World.ShroudObscures(pos))
|
||||||
yield break;
|
yield break;
|
||||||
|
|||||||
@@ -10,13 +10,14 @@
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using OpenRA.Effects;
|
using OpenRA.Effects;
|
||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Mods.Common.Traits;
|
using OpenRA.Mods.Common.Traits;
|
||||||
|
|
||||||
namespace OpenRA.Mods.Common.Effects
|
namespace OpenRA.Mods.Common.Effects
|
||||||
{
|
{
|
||||||
class RallyPointIndicator : IEffect, IEffectAboveShroud
|
class RallyPointIndicator : IEffect, IEffectAboveShroud, IEffectAnnotation
|
||||||
{
|
{
|
||||||
readonly Actor building;
|
readonly Actor building;
|
||||||
readonly RallyPoint rp;
|
readonly RallyPoint rp;
|
||||||
@@ -92,26 +93,32 @@ namespace OpenRA.Mods.Common.Effects
|
|||||||
if (!building.World.Selection.Contains(building))
|
if (!building.World.Selection.Contains(building))
|
||||||
return SpriteRenderable.None;
|
return SpriteRenderable.None;
|
||||||
|
|
||||||
return RenderInner(wr);
|
var renderables = SpriteRenderable.None;
|
||||||
}
|
|
||||||
|
|
||||||
IEnumerable<IRenderable> RenderInner(WorldRenderer wr)
|
|
||||||
{
|
|
||||||
if (Game.Settings.Game.TargetLines != TargetLinesType.Disabled)
|
|
||||||
yield return new TargetLineRenderable(targetLine, building.Owner.Color, rp.Info.LineWidth);
|
|
||||||
|
|
||||||
if (circles != null || flag != null)
|
if (circles != null || flag != null)
|
||||||
{
|
{
|
||||||
var palette = wr.Palette(rp.PaletteName);
|
var palette = wr.Palette(rp.PaletteName);
|
||||||
|
|
||||||
if (circles != null)
|
if (circles != null)
|
||||||
foreach (var r in circles.Render(targetLine[1], palette))
|
renderables = renderables.Concat(circles.Render(targetLine[1], palette));
|
||||||
yield return r;
|
|
||||||
|
|
||||||
if (flag != null)
|
if (flag != null)
|
||||||
foreach (var r in flag.Render(targetLine[1], palette))
|
renderables = renderables.Concat(flag.Render(targetLine[1], palette));
|
||||||
yield return r;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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) };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user