Added QuadRenderer to render shaded/colored quads. Added DebugOverlay to World to show A* bidi search cost per cell.
This commit is contained in:
60
OpenRA.Mods.RA/World/DebugOverlay.cs
Normal file
60
OpenRA.Mods.RA/World/DebugOverlay.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using OpenRA.FileFormats;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
class DebugOverlayInfo : Traits.TraitInfo<DebugOverlay>
|
||||
{
|
||||
}
|
||||
|
||||
class DebugOverlay : IRenderOverlay, IWorldLoaded
|
||||
{
|
||||
int[,] layer;
|
||||
int refreshTick;
|
||||
World world;
|
||||
|
||||
public void WorldLoaded(World w)
|
||||
{
|
||||
this.world = w;
|
||||
this.layer = new int[w.Map.MapSize.X, w.Map.MapSize.Y];
|
||||
this.refreshTick = 0;
|
||||
}
|
||||
|
||||
public void AddLayer(IEnumerable<Pair<CPos, int>> cellWeights, int maxWeight)
|
||||
{
|
||||
if (maxWeight == 0) return;
|
||||
|
||||
foreach (var p in cellWeights)
|
||||
layer[p.First.X, p.First.Y] = layer[p.First.X, p.First.Y] / 2 + (p.Second * 128 / maxWeight);
|
||||
}
|
||||
|
||||
public void Render(WorldRenderer wr)
|
||||
{
|
||||
var qr = Game.Renderer.WorldQuadRenderer;
|
||||
bool doSwap = refreshTick - world.FrameNumber <= 0;
|
||||
if (doSwap) refreshTick = world.FrameNumber + 20;
|
||||
|
||||
for (int j = world.Map.Bounds.Top; j <= world.Map.Bounds.Bottom; ++j)
|
||||
for (int i = world.Map.Bounds.Left; i <= world.Map.Bounds.Right; ++i)
|
||||
{
|
||||
if (!world.Map.IsInMap(i, j)) continue;
|
||||
|
||||
var cell = new CPos(i, j);
|
||||
var pix = cell.ToPPos();
|
||||
|
||||
var w = Math.Max(0, Math.Min(layer[i, j], 224));
|
||||
if (doSwap)
|
||||
{
|
||||
layer[i, j] = layer[i, j] * 4 / 5;
|
||||
}
|
||||
qr.FillRect(new RectangleF(pix.X, pix.Y, Game.CellSize, Game.CellSize), Color.FromArgb(w, Color.White));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user