Replace IOrderGenerator.RenderBeforeWorld with world-sorted .Render.

Range circles have been moved to RenderAfterWorld for now.
This commit is contained in:
Paul Chote
2013-08-10 21:28:39 +12:00
parent b02fd0d002
commit 4754cbb768
21 changed files with 86 additions and 67 deletions

View File

@@ -77,8 +77,11 @@ namespace OpenRA.Graphics
bounds.TopLeftAsCPos(), bounds.TopLeftAsCPos(),
bounds.BottomRightAsCPos()); bounds.BottomRightAsCPos());
var worldRenderables = actors.SelectMany(a => a.Render(this)) var worldRenderables = actors.SelectMany(a => a.Render(this));
.OrderBy(r => r, comparer); if (world.OrderGenerator != null)
worldRenderables = worldRenderables.Concat(world.OrderGenerator.Render(this, world));
worldRenderables = worldRenderables.OrderBy(r => r, comparer);
// Effects are drawn on top of all actors // Effects are drawn on top of all actors
// TODO: Allow effects to be interleaved with actors // TODO: Allow effects to be interleaved with actors
@@ -112,16 +115,8 @@ namespace OpenRA.Graphics
foreach (var r in a.Trait.RenderAsTerrain(this, a.Actor)) foreach (var r in a.Trait.RenderAsTerrain(this, a.Actor))
r.Render(this); r.Render(this);
foreach (var a in world.Selection.Actors)
if (!a.Destroyed)
foreach (var t in a.TraitsImplementing<IPreRenderSelection>())
t.RenderBeforeWorld(this, a);
Game.Renderer.Flush(); Game.Renderer.Flush();
if (world.OrderGenerator != null)
world.OrderGenerator.RenderBeforeWorld(this, world);
for (var i = 0; i < renderables.Count; i++) for (var i = 0; i < renderables.Count; i++)
renderables[i].Render(this); renderables[i].Render(this);

View File

@@ -1,4 +1,4 @@
#region Copyright & License Information #region Copyright & License Information
/* /*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS) * Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made * This file is part of OpenRA, which is free software. It is made
@@ -66,7 +66,7 @@ namespace OpenRA.Orders
} }
public virtual void Tick(World world) { } public virtual void Tick(World world) { }
public void RenderBeforeWorld(WorldRenderer wr, World world) { } public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
public void RenderAfterWorld(WorldRenderer wr, World world) { } public void RenderAfterWorld(WorldRenderer wr, World world) { }
public string GetCursor(World world, CPos xy, MouseInput mi) { return world.Map.IsInMap(xy) ? cursor : "generic-blocked"; } public string GetCursor(World world, CPos xy, MouseInput mi) { return world.Map.IsInMap(xy) ? cursor : "generic-blocked"; }
} }

View File

@@ -17,7 +17,7 @@ namespace OpenRA
{ {
IEnumerable<Order> Order(World world, CPos xy, MouseInput mi); IEnumerable<Order> Order(World world, CPos xy, MouseInput mi);
void Tick(World world); void Tick(World world);
void RenderBeforeWorld(WorldRenderer wr, World world); IEnumerable<IRenderable> Render(WorldRenderer wr, World world);
void RenderAfterWorld(WorldRenderer wr, World world); void RenderAfterWorld(WorldRenderer wr, World world);
string GetCursor(World world, CPos xy, MouseInput mi); string GetCursor(World world, CPos xy, MouseInput mi);
} }

View File

@@ -42,7 +42,7 @@ namespace OpenRA.Orders
} }
public void Tick(World world) { } public void Tick(World world) { }
public void RenderBeforeWorld(WorldRenderer wr, World world) { } public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
public void RenderAfterWorld(WorldRenderer wr, World world) { } public void RenderAfterWorld(WorldRenderer wr, World world) { }
public string GetCursor(World world, CPos xy, MouseInput mi) public string GetCursor(World world, CPos xy, MouseInput mi)

View File

@@ -187,7 +187,6 @@ namespace OpenRA.Traits
public interface IPostRender { void RenderAfterWorld(WorldRenderer wr, Actor self); } public interface IPostRender { void RenderAfterWorld(WorldRenderer wr, Actor self); }
public interface IPostRenderSelection { void RenderAfterWorld(WorldRenderer wr); } public interface IPostRenderSelection { void RenderAfterWorld(WorldRenderer wr); }
public interface IPreRenderSelection { void RenderBeforeWorld(WorldRenderer wr, Actor self); }
public interface IRenderAsTerrain { IEnumerable<IRenderable> RenderAsTerrain(WorldRenderer wr, Actor self); } public interface IRenderAsTerrain { IEnumerable<IRenderable> RenderAsTerrain(WorldRenderer wr, Actor self); }
public interface IBodyOrientation public interface IBodyOrientation
{ {

View File

@@ -24,7 +24,7 @@ namespace OpenRA.Mods.RA.Buildings
public object Create(ActorInitializer init) { return new BaseProvider(init.self, this); } public object Create(ActorInitializer init) { return new BaseProvider(init.self, this); }
} }
public class BaseProvider : ITick, IPreRenderSelection, ISelectionBar public class BaseProvider : ITick, IPostRenderSelection, ISelectionBar
{ {
public readonly BaseProviderInfo Info; public readonly BaseProviderInfo Info;
DeveloperMode devMode; DeveloperMode devMode;
@@ -57,7 +57,7 @@ namespace OpenRA.Mods.RA.Buildings
} }
// Range circle // Range circle
public void RenderBeforeWorld(WorldRenderer wr, Actor self) public void RenderAfterWorld(WorldRenderer wr)
{ {
// Visible to player and allies // Visible to player and allies
if (!self.Owner.IsAlliedWith(self.World.RenderPlayer)) if (!self.Owner.IsAlliedWith(self.World.RenderPlayer))

View File

@@ -143,8 +143,9 @@ namespace OpenRA.Mods.RA
if (!self.IsInWorld || self.IsDead()) if (!self.IsInWorld || self.IsDead())
world.CancelInputMode(); world.CancelInputMode();
} }
public void RenderAfterWorld(WorldRenderer wr, World world) { }
public void RenderBeforeWorld(WorldRenderer wr, World world) public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
public void RenderAfterWorld(WorldRenderer wr, World world)
{ {
if (!self.IsInWorld) if (!self.IsInWorld)
return; return;

View File

@@ -1,4 +1,4 @@
#region Copyright & License Information #region Copyright & License Information
/* /*
* Copyright 2007-2013 The OpenRA Developers (see AUTHORS) * Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made * This file is part of OpenRA, which is free software. It is made
@@ -74,7 +74,7 @@ namespace OpenRA.Mods.RA
world.CancelInputMode(); world.CancelInputMode();
} }
public void RenderBeforeWorld(WorldRenderer wr, World world) { } public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
public void RenderAfterWorld(WorldRenderer wr, World world) { } public void RenderAfterWorld(WorldRenderer wr, World world) { }
public string GetCursor(World world, CPos xy, MouseInput mi) public string GetCursor(World world, CPos xy, MouseInput mi)

View File

@@ -125,6 +125,7 @@ namespace OpenRA.Mods.RA
} }
CPos lastMousePos; CPos lastMousePos;
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
public void RenderAfterWorld(WorldRenderer wr, World world) public void RenderAfterWorld(WorldRenderer wr, World world)
{ {
if (!minelayer.IsInWorld) if (!minelayer.IsInWorld)
@@ -138,8 +139,6 @@ namespace OpenRA.Mods.RA
wr.DrawLocus(Color.Cyan, minefield); wr.DrawLocus(Color.Cyan, minefield);
} }
public void RenderBeforeWorld(WorldRenderer wr, World world) { }
public string GetCursor(World world, CPos xy, MouseInput mi) { lastMousePos = xy; return "ability"; } /* TODO */ public string GetCursor(World world, CPos xy, MouseInput mi) { lastMousePos = xy; return "ability"; } /* TODO */
} }

View File

@@ -68,8 +68,8 @@ namespace OpenRA.Mods.RA.Orders
} }
public void Tick(World world) {} public void Tick(World world) {}
public void RenderAfterWorld(WorldRenderer wr, World world) {} public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
public void RenderBeforeWorld(WorldRenderer wr, World world) public void RenderAfterWorld(WorldRenderer wr, World world)
{ {
var position = Game.viewport.ViewToWorld(Viewport.LastMousePos); var position = Game.viewport.ViewToWorld(Viewport.LastMousePos);
var topLeft = position - FootprintUtils.AdjustForBuildingSize(BuildingInfo); var topLeft = position - FootprintUtils.AdjustForBuildingSize(BuildingInfo);
@@ -110,7 +110,10 @@ namespace OpenRA.Mods.RA.Orders
var pal = wr.Palette("terrain"); var pal = wr.Palette("terrain");
foreach (var c in cells) foreach (var c in cells)
(c.Value ? buildOk : buildBlocked).DrawAt(c.Key.ToPPos().ToFloat2(), pal); {
var tile = c.Value ? buildOk : buildBlocked;
tile.DrawAt(wr.ScreenPxPosition(c.Key.CenterPosition) - 0.5f * tile.size, pal);
}
} }
public string GetCursor(World world, CPos xy, MouseInput mi) { return "default"; } public string GetCursor(World world, CPos xy, MouseInput mi) { return "default"; }

View File

@@ -1,4 +1,4 @@
#region Copyright & License Information #region Copyright & License Information
/* /*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS) * Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made * This file is part of OpenRA, which is free software. It is made
@@ -55,8 +55,8 @@ namespace OpenRA.Mods.RA.Orders
world.CancelInputMode(); world.CancelInputMode();
} }
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
public void RenderAfterWorld(WorldRenderer wr, World world) { } public void RenderAfterWorld(WorldRenderer wr, World world) { }
public void RenderBeforeWorld(WorldRenderer wr, World world) { }
public string GetCursor(World world, CPos xy, MouseInput mi) public string GetCursor(World world, CPos xy, MouseInput mi)
{ {

View File

@@ -1,4 +1,4 @@
#region Copyright & License Information #region Copyright & License Information
/* /*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS) * Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made * This file is part of OpenRA, which is free software. It is made
@@ -49,8 +49,8 @@ namespace OpenRA.Mods.RA.Orders
world.CancelInputMode(); world.CancelInputMode();
} }
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
public void RenderAfterWorld(WorldRenderer wr, World world) { } public void RenderAfterWorld(WorldRenderer wr, World world) { }
public void RenderBeforeWorld(WorldRenderer wr, World world) { }
public string GetCursor(World world, CPos xy, MouseInput mi) public string GetCursor(World world, CPos xy, MouseInput mi)
{ {

View File

@@ -38,13 +38,12 @@ namespace OpenRA.Mods.RA.Orders
} }
public void Tick( World world ) { } public void Tick( World world ) { }
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
public void RenderAfterWorld( WorldRenderer wr, World world ) public void RenderAfterWorld( WorldRenderer wr, World world )
{ {
wr.DrawSelectionBox(self, Color.White); wr.DrawSelectionBox(self, Color.White);
} }
public void RenderBeforeWorld( WorldRenderer wr, World world ) { }
public string GetCursor(World world, CPos xy, MouseInput mi) public string GetCursor(World world, CPos xy, MouseInput mi)
{ {
if (!world.LocalPlayer.Shroud.IsExplored(xy)) if (!world.LocalPlayer.Shroud.IsExplored(xy))

View File

@@ -32,7 +32,7 @@ namespace OpenRA.Mods.RA.Render
return; return;
foreach (var a in w.ActorsWithTrait<BaseProvider>()) foreach (var a in w.ActorsWithTrait<BaseProvider>())
a.Trait.RenderBeforeWorld(wr, a.Actor); a.Trait.RenderAfterWorld(wr);
} }
} }

View File

@@ -14,10 +14,18 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
class RenderDetectionCircleInfo : TraitInfo<RenderDetectionCircle> { } class RenderDetectionCircleInfo : ITraitInfo
class RenderDetectionCircle : IPreRenderSelection
{ {
public void RenderBeforeWorld(WorldRenderer wr, Actor self) public object Create(ActorInitializer init) { return new RenderDetectionCircle(init.self); }
}
class RenderDetectionCircle : IPostRenderSelection
{
Actor self;
public RenderDetectionCircle(Actor self) { this.self = self; }
public void RenderAfterWorld(WorldRenderer wr)
{ {
if (self.Owner != self.World.LocalPlayer) if (self.Owner != self.World.LocalPlayer)
return; return;

View File

@@ -15,7 +15,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
//todo: remove all the Render*Circle duplication //todo: remove all the Render*Circle duplication
class RenderJammerCircleInfo : TraitInfo<RenderJammerCircle>, IPlaceBuildingDecoration class RenderJammerCircleInfo : ITraitInfo, IPlaceBuildingDecoration
{ {
public void Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition) public void Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition)
{ {
@@ -29,13 +29,19 @@ namespace OpenRA.Mods.RA
foreach (var a in w.ActorsWithTrait<RenderJammerCircle>()) foreach (var a in w.ActorsWithTrait<RenderJammerCircle>())
if (a.Actor.Owner == a.Actor.World.LocalPlayer) if (a.Actor.Owner == a.Actor.World.LocalPlayer)
a.Trait.RenderBeforeWorld(wr, a.Actor); a.Trait.RenderAfterWorld(wr);
} }
public object Create(ActorInitializer init) { return new RenderJammerCircle(init.self); }
} }
public class RenderJammerCircle : IPreRenderSelection class RenderJammerCircle : IPostRenderSelection
{ {
public void RenderBeforeWorld(WorldRenderer wr, Actor self) Actor self;
public RenderJammerCircle(Actor self) { this.self = self; }
public void RenderAfterWorld(WorldRenderer wr)
{ {
if (self.Owner != self.World.LocalPlayer) if (self.Owner != self.World.LocalPlayer)
return; return;

View File

@@ -20,7 +20,7 @@ namespace OpenRA.Mods.RA
void Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition); void Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition);
} }
class RenderRangeCircleInfo : TraitInfo<RenderRangeCircle>, IPlaceBuildingDecoration class RenderRangeCircleInfo : ITraitInfo, IPlaceBuildingDecoration
{ {
public readonly string RangeCircleType = null; public readonly string RangeCircleType = null;
@@ -36,13 +36,19 @@ namespace OpenRA.Mods.RA
foreach (var a in w.ActorsWithTrait<RenderRangeCircle>()) foreach (var a in w.ActorsWithTrait<RenderRangeCircle>())
if (a.Actor.Owner == a.Actor.World.LocalPlayer) if (a.Actor.Owner == a.Actor.World.LocalPlayer)
if (a.Actor.Info.Traits.Get<RenderRangeCircleInfo>().RangeCircleType == RangeCircleType) if (a.Actor.Info.Traits.Get<RenderRangeCircleInfo>().RangeCircleType == RangeCircleType)
a.Trait.RenderBeforeWorld(wr, a.Actor); a.Trait.RenderAfterWorld(wr);
} }
public object Create(ActorInitializer init) { return new RenderRangeCircle(init.self); }
} }
class RenderRangeCircle : IPreRenderSelection class RenderRangeCircle : IPostRenderSelection
{ {
public void RenderBeforeWorld(WorldRenderer wr, Actor self) Actor self;
public RenderRangeCircle(Actor self) { this.self = self; }
public void RenderAfterWorld(WorldRenderer wr)
{ {
if (self.Owner != self.World.LocalPlayer) if (self.Owner != self.World.LocalPlayer)
return; return;

View File

@@ -14,7 +14,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
class RenderShroudCircleInfo : TraitInfo<RenderShroudCircle>, IPlaceBuildingDecoration class RenderShroudCircleInfo : ITraitInfo, IPlaceBuildingDecoration
{ {
public void Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition) public void Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition)
{ {
@@ -27,13 +27,19 @@ namespace OpenRA.Mods.RA
foreach (var a in w.ActorsWithTrait<RenderShroudCircle>()) foreach (var a in w.ActorsWithTrait<RenderShroudCircle>())
if (a.Actor.Owner == a.Actor.World.LocalPlayer) if (a.Actor.Owner == a.Actor.World.LocalPlayer)
a.Trait.RenderBeforeWorld(wr, a.Actor); a.Trait.RenderAfterWorld(wr);
} }
public object Create(ActorInitializer init) { return new RenderShroudCircle(init.self); }
} }
class RenderShroudCircle : IPreRenderSelection class RenderShroudCircle : IPostRenderSelection
{ {
public void RenderBeforeWorld(WorldRenderer wr, Actor self) Actor self;
public RenderShroudCircle(Actor self) { this.self = self; }
public void RenderAfterWorld(WorldRenderer wr)
{ {
if (self.Owner != self.World.LocalPlayer) if (self.Owner != self.World.LocalPlayer)
return; return;

View File

@@ -140,20 +140,18 @@ namespace OpenRA.Mods.RA
{ {
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos); var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos);
var targetUnits = power.UnitsInRange(xy); var targetUnits = power.UnitsInRange(xy);
foreach (var unit in targetUnits) { foreach (var unit in targetUnits)
if (manager.self.Owner.Shroud.IsTargetable(unit) || manager.self.Owner.HasFogVisibility()) { if (manager.self.Owner.Shroud.IsTargetable(unit) || manager.self.Owner.HasFogVisibility())
wr.DrawSelectionBox(unit, Color.Red); wr.DrawSelectionBox(unit, Color.Red);
}
}
} }
public void RenderBeforeWorld(WorldRenderer wr, World world) public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
{ {
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos); var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos);
var tiles = world.FindTilesInCircle(xy, range); var tiles = world.FindTilesInCircle(xy, range);
var pal = wr.Palette("terrain"); var pal = wr.Palette("terrain");
foreach (var t in tiles) foreach (var t in tiles)
tile.DrawAt(t.ToPPos().ToFloat2(), pal); yield return new SpriteRenderable(tile, t.CenterPosition, WVec.Zero, -511, pal, 1f, true);
} }
public string GetCursor(World world, CPos xy, MouseInput mi) public string GetCursor(World world, CPos xy, MouseInput mi)
@@ -221,25 +219,23 @@ namespace OpenRA.Mods.RA
public void RenderAfterWorld(WorldRenderer wr, World world) public void RenderAfterWorld(WorldRenderer wr, World world)
{ {
foreach (var unit in power.UnitsInRange(sourceLocation)) { foreach (var unit in power.UnitsInRange(sourceLocation))
if (manager.self.Owner.Shroud.IsTargetable(unit) || manager.self.Owner.HasFogVisibility()) { if (manager.self.Owner.Shroud.IsTargetable(unit) || manager.self.Owner.HasFogVisibility())
wr.DrawSelectionBox(unit, Color.Red); wr.DrawSelectionBox(unit, Color.Red);
}
}
} }
public void RenderBeforeWorld(WorldRenderer wr, World world) public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
{ {
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos); var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos);
var pal = wr.Palette("terrain"); var pal = wr.Palette("terrain");
// Source tiles // Source tiles
foreach (var t in world.FindTilesInCircle(sourceLocation, range)) foreach (var t in world.FindTilesInCircle(sourceLocation, range))
sourceTile.DrawAt(t.ToPPos().ToFloat2(), pal); yield return new SpriteRenderable(sourceTile, t.CenterPosition, WVec.Zero, -511, pal, 1f, true);
// Destination tiles // Destination tiles
foreach (var t in world.FindTilesInCircle(xy, range)) foreach (var t in world.FindTilesInCircle(xy, range))
sourceTile.DrawAt(t.ToPPos().ToFloat2(), pal); yield return new SpriteRenderable(sourceTile, t.CenterPosition, WVec.Zero, -511, pal, 1f, true);
// Unit previews // Unit previews
foreach (var unit in power.UnitsInRange(sourceLocation)) foreach (var unit in power.UnitsInRange(sourceLocation))
@@ -247,7 +243,7 @@ namespace OpenRA.Mods.RA
var offset = (xy - sourceLocation).ToWVec(); var offset = (xy - sourceLocation).ToWVec();
if (manager.self.Owner.Shroud.IsTargetable(unit)) if (manager.self.Owner.Shroud.IsTargetable(unit))
foreach (var r in unit.Render(wr)) foreach (var r in unit.Render(wr))
r.OffsetBy(offset).Render(wr); yield return r.OffsetBy(offset);
} }
// Unit tiles // Unit tiles
@@ -259,7 +255,7 @@ namespace OpenRA.Mods.RA
var canEnter = ((manager.self.Owner.Shroud.IsExplored(targetCell) || manager.self.Owner.HasFogVisibility()) && var canEnter = ((manager.self.Owner.Shroud.IsExplored(targetCell) || manager.self.Owner.HasFogVisibility()) &&
unit.Trait<Chronoshiftable>().CanChronoshiftTo(unit,targetCell)); unit.Trait<Chronoshiftable>().CanChronoshiftTo(unit,targetCell));
var tile = canEnter ? validTile : invalidTile; var tile = canEnter ? validTile : invalidTile;
tile.DrawAt(targetCell.ToPPos().ToFloat2(), pal); yield return new SpriteRenderable(tile, targetCell.CenterPosition, WVec.Zero, -511, pal, 1f, true);
} }
} }
} }
@@ -276,7 +272,8 @@ namespace OpenRA.Mods.RA
break; break;
} }
} }
if (!canTeleport) { if (!canTeleport)
{
// Check the terrain types. This will allow chronoshifts to occur on empty terrain to terrain of // Check the terrain types. This will allow chronoshifts to occur on empty terrain to terrain of
// a similar type. This also keeps the cursor from changing in non-visible property, alerting the // a similar type. This also keeps the cursor from changing in non-visible property, alerting the
// chronoshifter of enemy unit presence // chronoshifter of enemy unit presence

View File

@@ -95,12 +95,12 @@ namespace OpenRA.Mods.RA
wr.DrawSelectionBox(unit, Color.Red); wr.DrawSelectionBox(unit, Color.Red);
} }
public void RenderBeforeWorld(WorldRenderer wr, World world) public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
{ {
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos); var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos);
var pal = wr.Palette("terrain"); var pal = wr.Palette("terrain");
foreach (var t in world.FindTilesInCircle(xy, range)) foreach (var t in world.FindTilesInCircle(xy, range))
tile.DrawAt(t.ToPPos().ToFloat2(), pal); yield return new SpriteRenderable(tile, t.CenterPosition, WVec.Zero, -511, pal, 1f, true);
} }
public string GetCursor(World world, CPos xy, MouseInput mi) public string GetCursor(World world, CPos xy, MouseInput mi)

View File

@@ -221,7 +221,7 @@ namespace OpenRA.Mods.RA
world.CancelInputMode(); world.CancelInputMode();
} }
public void RenderBeforeWorld(WorldRenderer wr, World world) { } public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
public void RenderAfterWorld(WorldRenderer wr, World world) { } public void RenderAfterWorld(WorldRenderer wr, World world) { }
public string GetCursor(World world, CPos xy, MouseInput mi) { return world.Map.IsInMap(xy) ? cursor : "generic-blocked"; } public string GetCursor(World world, CPos xy, MouseInput mi) { return world.Map.IsInMap(xy) ? cursor : "generic-blocked"; }
} }