Rename and tweak post-render interfaces.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user