Rename and tweak post-render interfaces.

This commit is contained in:
Paul Chote
2016-08-22 16:50:49 +01:00
parent f1990853df
commit 11805bb567
24 changed files with 129 additions and 143 deletions

View File

@@ -31,23 +31,20 @@ namespace OpenRA.Mods.RA.Traits
public object Create(ActorInitializer init) { return new Minelayer(init.Self); }
}
public class Minelayer : IIssueOrder, IResolveOrder, IPostRenderSelection, ISync
public class Minelayer : IIssueOrder, IResolveOrder, IRenderAboveShroudWhenSelected, ISync
{
/* TODO: [Sync] when sync can cope with arrays! */
public CPos[] Minefield = null;
readonly Actor self;
readonly Sprite tile;
[Sync] CPos minefieldStart;
public Minelayer(Actor self)
{
this.self = self;
var tileset = self.World.Map.Tileset.ToLowerInvariant();
tile = self.World.Map.Rules.Sequences.GetSequence("overlay", "build-valid-{0}".F(tileset)).GetSprite(0);
}
public IEnumerable<IOrderTargeter> Orders
IEnumerable<IOrderTargeter> IIssueOrder.Orders
{
get
{
@@ -56,7 +53,7 @@ namespace OpenRA.Mods.RA.Traits
}
}
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
Order IIssueOrder.IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
{
switch (order.OrderID)
{
@@ -75,7 +72,7 @@ namespace OpenRA.Mods.RA.Traits
}
}
public void ResolveOrder(Actor self, Order order)
void IResolveOrder.ResolveOrder(Actor self, Order order)
{
if (order.OrderString == "BeginMinefield")
minefieldStart = order.TargetLocation;
@@ -121,7 +118,7 @@ namespace OpenRA.Mods.RA.Traits
yield return new CPos(i, j);
}
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr)
IEnumerable<IRenderable> IRenderAboveShroudWhenSelected.RenderAboveShroud(Actor self, WorldRenderer wr)
{
if (self.Owner != self.World.LocalPlayer || Minefield == null)
yield break;

View File

@@ -20,7 +20,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Traits
{
// TODO: remove all the Render*Circle duplication
class RenderJammerCircleInfo : ITraitInfo, IPlaceBuildingDecorationInfo
class RenderJammerCircleInfo : TraitInfo<RenderJammerCircle>, IPlaceBuildingDecorationInfo
{
public IEnumerable<IRenderable> Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition)
{
@@ -48,20 +48,14 @@ namespace OpenRA.Mods.RA.Traits
foreach (var a in w.ActorsWithTrait<RenderJammerCircle>())
if (a.Actor.Owner.IsAlliedWith(w.RenderPlayer))
foreach (var r in a.Trait.RenderAfterWorld(wr))
foreach (var r in a.Trait.RenderAboveShroud(a.Actor, wr))
yield return r;
}
public object Create(ActorInitializer init) { return new RenderJammerCircle(init.Self); }
}
class RenderJammerCircle : IPostRenderSelection
class RenderJammerCircle : IRenderAboveShroudWhenSelected
{
Actor self;
public RenderJammerCircle(Actor self) { this.self = self; }
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr)
public IEnumerable<IRenderable> RenderAboveShroud(Actor self, WorldRenderer wr)
{
if (!self.Owner.IsAlliedWith(self.World.RenderPlayer))
yield break;

View File

@@ -11,6 +11,7 @@
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Graphics;
using OpenRA.Mods.Common.Traits;
@@ -18,33 +19,27 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Traits
{
class RenderShroudCircleInfo : ITraitInfo, IPlaceBuildingDecorationInfo
class RenderShroudCircleInfo : TraitInfo<RenderShroudCircle>, IPlaceBuildingDecorationInfo
{
public IEnumerable<IRenderable> Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition)
{
yield return new RangeCircleRenderable(
var localRange = new RangeCircleRenderable(
centerPosition,
ai.TraitInfo<CreatesShroudInfo>().Range,
0,
Color.FromArgb(128, Color.Cyan),
Color.FromArgb(96, Color.Black));
foreach (var a in w.ActorsWithTrait<RenderShroudCircle>())
if (a.Actor.Owner.IsAlliedWith(w.RenderPlayer))
foreach (var r in a.Trait.RenderAfterWorld(wr))
yield return r;
}
var otherRanges = w.ActorsWithTrait<RenderShroudCircle>()
.SelectMany(a => a.Trait.RangeCircleRenderables(a.Actor, wr));
public object Create(ActorInitializer init) { return new RenderShroudCircle(init.Self); }
return otherRanges.Append(localRange);
}
}
class RenderShroudCircle : IPostRenderSelection
class RenderShroudCircle : IRenderAboveShroudWhenSelected
{
Actor self;
public RenderShroudCircle(Actor self) { this.self = self; }
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr)
public IEnumerable<IRenderable> RangeCircleRenderables(Actor self, WorldRenderer wr)
{
if (!self.Owner.IsAlliedWith(self.World.RenderPlayer))
yield break;
@@ -56,5 +51,10 @@ namespace OpenRA.Mods.RA.Traits
Color.FromArgb(128, Color.Cyan),
Color.FromArgb(96, Color.Black));
}
IEnumerable<IRenderable> IRenderAboveShroudWhenSelected.RenderAboveShroud(Actor self, WorldRenderer wr)
{
return RangeCircleRenderables(self, wr);
}
}
}