Draw order generator renderables above the shroud.
This commit is contained in:
@@ -111,9 +111,6 @@ namespace OpenRA.Graphics
|
|||||||
worldRenderables = worldRenderables.Concat(World.Effects.SelectMany(e => e.Render(this)));
|
worldRenderables = worldRenderables.Concat(World.Effects.SelectMany(e => e.Render(this)));
|
||||||
worldRenderables = worldRenderables.OrderBy(RenderableScreenZPositionComparisonKey);
|
worldRenderables = worldRenderables.OrderBy(RenderableScreenZPositionComparisonKey);
|
||||||
|
|
||||||
if (World.OrderGenerator != null)
|
|
||||||
worldRenderables = worldRenderables.Concat(World.OrderGenerator.RenderAfterWorld(this, World));
|
|
||||||
|
|
||||||
Game.Renderer.WorldVoxelRenderer.BeginFrame();
|
Game.Renderer.WorldVoxelRenderer.BeginFrame();
|
||||||
var renderables = worldRenderables.Select(r => r.PrepareRender(this)).ToList();
|
var renderables = worldRenderables.Select(r => r.PrepareRender(this)).ToList();
|
||||||
Game.Renderer.WorldVoxelRenderer.EndFrame();
|
Game.Renderer.WorldVoxelRenderer.EndFrame();
|
||||||
@@ -185,10 +182,15 @@ namespace OpenRA.Graphics
|
|||||||
.Where(e => e != null)
|
.Where(e => e != null)
|
||||||
.SelectMany(e => e.RenderAboveShroud(this));
|
.SelectMany(e => e.RenderAboveShroud(this));
|
||||||
|
|
||||||
|
var aboveShroudOrderGenerator = SpriteRenderable.None;
|
||||||
|
if (World.OrderGenerator != null)
|
||||||
|
aboveShroudOrderGenerator = World.OrderGenerator.RenderAboveShroud(this, World);
|
||||||
|
|
||||||
Game.Renderer.WorldVoxelRenderer.BeginFrame();
|
Game.Renderer.WorldVoxelRenderer.BeginFrame();
|
||||||
var finalOverlayRenderables = aboveShroud
|
var finalOverlayRenderables = aboveShroud
|
||||||
.Concat(aboveShroudSelected)
|
.Concat(aboveShroudSelected)
|
||||||
.Concat(aboveShroudEffects)
|
.Concat(aboveShroudEffects)
|
||||||
|
.Concat(aboveShroudOrderGenerator)
|
||||||
.Select(r => r.PrepareRender(this));
|
.Select(r => r.PrepareRender(this));
|
||||||
Game.Renderer.WorldVoxelRenderer.EndFrame();
|
Game.Renderer.WorldVoxelRenderer.EndFrame();
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace OpenRA
|
|||||||
IEnumerable<Order> Order(World world, CPos cell, int2 worldPixel, MouseInput mi);
|
IEnumerable<Order> Order(World world, CPos cell, int2 worldPixel, MouseInput mi);
|
||||||
void Tick(World world);
|
void Tick(World world);
|
||||||
IEnumerable<IRenderable> Render(WorldRenderer wr, World world);
|
IEnumerable<IRenderable> Render(WorldRenderer wr, World world);
|
||||||
IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr, World world);
|
IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world);
|
||||||
string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi);
|
string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ namespace OpenRA.Orders
|
|||||||
|
|
||||||
public virtual void Tick(World world) { }
|
public virtual void Tick(World world) { }
|
||||||
public virtual IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
public virtual IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public virtual IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr, World world) { yield break; }
|
public virtual IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world) { yield break; }
|
||||||
|
|
||||||
public virtual string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
|
public virtual string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace OpenRA.Mods.Common.Orders
|
|||||||
|
|
||||||
public virtual void Tick(World world) { }
|
public virtual void Tick(World world) { }
|
||||||
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr, World world) { yield break; }
|
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world) { yield break; }
|
||||||
public string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
|
public string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
|
||||||
{
|
{
|
||||||
return "ability";
|
return "ability";
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ namespace OpenRA.Mods.Common.Orders
|
|||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr, World world) { yield break; }
|
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world) { yield break; }
|
||||||
|
|
||||||
public string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
|
public string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ namespace OpenRA.Mods.Common.Orders
|
|||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr, World world)
|
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
|
||||||
{
|
{
|
||||||
var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
|
var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
|
||||||
var topLeft = xy - FootprintUtils.AdjustForBuildingSize(buildingInfo);
|
var topLeft = xy - FootprintUtils.AdjustForBuildingSize(buildingInfo);
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ namespace OpenRA.Mods.Common.Orders
|
|||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr, World world) { yield break; }
|
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world) { yield break; }
|
||||||
|
|
||||||
public string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
|
public string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
world.CancelInputMode();
|
world.CancelInputMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr, World world)
|
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
|
||||||
{
|
{
|
||||||
var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
|
var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
|
||||||
foreach (var unit in power.UnitsInRange(xy))
|
foreach (var unit in power.UnitsInRange(xy))
|
||||||
|
|||||||
@@ -291,7 +291,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr, World world) { yield break; }
|
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world) { yield break; }
|
||||||
public string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
|
public string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
|
||||||
{
|
{
|
||||||
return world.Map.Contains(cell) ? cursor : "generic-blocked";
|
return world.Map.Contains(cell) ? cursor : "generic-blocked";
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
|
|
||||||
CPos lastMousePos;
|
CPos lastMousePos;
|
||||||
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr, World world)
|
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
|
||||||
{
|
{
|
||||||
if (!minelayers.Any())
|
if (!minelayers.Any())
|
||||||
yield break;
|
yield break;
|
||||||
@@ -194,7 +194,7 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
var pal = wr.Palette(TileSet.TerrainPaletteInternalName);
|
var pal = wr.Palette(TileSet.TerrainPaletteInternalName);
|
||||||
foreach (var c in minefield)
|
foreach (var c in minefield)
|
||||||
{
|
{
|
||||||
var tile = movement.CanEnterCell(c, null, false) ? tileOk : tileBlocked;
|
var tile = movement.CanEnterCell(c, null, false) && !world.ShroudObscures(c) ? tileOk : tileBlocked;
|
||||||
yield return new SpriteRenderable(tile, world.Map.CenterOfCell(c),
|
yield return new SpriteRenderable(tile, world.Map.CenterOfCell(c),
|
||||||
WVec.Zero, -511, pal, 1f, true);
|
WVec.Zero, -511, pal, 1f, true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
yield break;
|
yield break;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr, World world)
|
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
|
||||||
{
|
{
|
||||||
if (!self.IsInWorld || self.Owner != self.World.LocalPlayer)
|
if (!self.IsInWorld || self.Owner != self.World.LocalPlayer)
|
||||||
yield break;
|
yield break;
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
world.CancelInputMode();
|
world.CancelInputMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr, World world)
|
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
|
||||||
{
|
{
|
||||||
var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
|
var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
|
||||||
var targetUnits = power.UnitsInRange(xy).Where(a => !world.FogObscures(a));
|
var targetUnits = power.UnitsInRange(xy).Where(a => !world.FogObscures(a));
|
||||||
@@ -236,36 +236,19 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
world.CancelInputMode();
|
world.CancelInputMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IRenderable> RenderAfterWorld(WorldRenderer wr, World world)
|
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
|
||||||
{
|
|
||||||
foreach (var unit in power.UnitsInRange(sourceLocation))
|
|
||||||
if (manager.Self.Owner.CanTargetActor(unit))
|
|
||||||
yield return new SelectionBoxRenderable(unit, Color.Red);
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
|
|
||||||
{
|
{
|
||||||
var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
|
var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
|
||||||
var palette = wr.Palette(power.Info.IconPalette);
|
var palette = wr.Palette(power.Info.IconPalette);
|
||||||
|
|
||||||
// Source tiles
|
|
||||||
foreach (var t in world.Map.FindTilesInCircle(sourceLocation, range))
|
|
||||||
yield return new SpriteRenderable(sourceTile, wr.World.Map.CenterOfCell(t), WVec.Zero, -511, palette, 1f, true);
|
|
||||||
|
|
||||||
// Destination tiles
|
// Destination tiles
|
||||||
foreach (var t in world.Map.FindTilesInCircle(xy, range))
|
foreach (var t in world.Map.FindTilesInCircle(xy, range))
|
||||||
yield return new SpriteRenderable(sourceTile, wr.World.Map.CenterOfCell(t), WVec.Zero, -511, palette, 1f, true);
|
|
||||||
|
|
||||||
// Unit previews
|
|
||||||
foreach (var unit in power.UnitsInRange(sourceLocation))
|
|
||||||
{
|
{
|
||||||
var offset = world.Map.CenterOfCell(xy) - world.Map.CenterOfCell(sourceLocation);
|
var tile = manager.Self.Owner.Shroud.IsExplored(t) ? validTile : invalidTile;
|
||||||
if (manager.Self.Owner.CanTargetActor(unit))
|
yield return new SpriteRenderable(tile, wr.World.Map.CenterOfCell(t), WVec.Zero, -511, palette, 1f, true);
|
||||||
foreach (var r in unit.Render(wr))
|
|
||||||
yield return r.OffsetBy(offset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unit tiles
|
// Unit previews
|
||||||
foreach (var unit in power.UnitsInRange(sourceLocation))
|
foreach (var unit in power.UnitsInRange(sourceLocation))
|
||||||
{
|
{
|
||||||
if (manager.Self.Owner.CanTargetActor(unit))
|
if (manager.Self.Owner.CanTargetActor(unit))
|
||||||
@@ -276,7 +259,25 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
var tile = canEnter ? validTile : invalidTile;
|
var tile = canEnter ? validTile : invalidTile;
|
||||||
yield return new SpriteRenderable(tile, wr.World.Map.CenterOfCell(targetCell), WVec.Zero, -511, palette, 1f, true);
|
yield return new SpriteRenderable(tile, wr.World.Map.CenterOfCell(targetCell), WVec.Zero, -511, palette, 1f, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var offset = world.Map.CenterOfCell(xy) - world.Map.CenterOfCell(sourceLocation);
|
||||||
|
if (manager.Self.Owner.CanTargetActor(unit))
|
||||||
|
foreach (var r in unit.Render(wr))
|
||||||
|
yield return r.OffsetBy(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var unit in power.UnitsInRange(sourceLocation))
|
||||||
|
if (manager.Self.Owner.CanTargetActor(unit))
|
||||||
|
yield return new SelectionBoxRenderable(unit, Color.Red);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
|
||||||
|
{
|
||||||
|
var palette = wr.Palette(power.Info.IconPalette);
|
||||||
|
|
||||||
|
// Source tiles
|
||||||
|
foreach (var t in world.Map.FindTilesInCircle(sourceLocation, range))
|
||||||
|
yield return new SpriteRenderable(sourceTile, wr.World.Map.CenterOfCell(t), WVec.Zero, -511, palette, 1f, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsValidTarget(CPos xy)
|
bool IsValidTarget(CPos xy)
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ namespace OpenRA.Mods.TS.Traits
|
|||||||
|
|
||||||
IEnumerable<IRenderable> IOrderGenerator.Render(WorldRenderer wr, World world) { yield break; }
|
IEnumerable<IRenderable> IOrderGenerator.Render(WorldRenderer wr, World world) { yield break; }
|
||||||
|
|
||||||
IEnumerable<IRenderable> IOrderGenerator.RenderAfterWorld(WorldRenderer wr, World world)
|
IEnumerable<IRenderable> IOrderGenerator.RenderAboveShroud(WorldRenderer wr, World world)
|
||||||
{
|
{
|
||||||
foreach (var a in instance.Instances.Where(i => !i.Self.IsDisabled()))
|
foreach (var a in instance.Instances.Where(i => !i.Self.IsDisabled()))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user