Use CellLayers for pathfinder debug.
This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
using OpenRA;
|
||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Primitives;
|
using OpenRA.Primitives;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
@@ -20,7 +21,7 @@ namespace OpenRA.Mods.RA
|
|||||||
class PathfinderDebugOverlayInfo : TraitInfo<PathfinderDebugOverlay> { }
|
class PathfinderDebugOverlayInfo : TraitInfo<PathfinderDebugOverlay> { }
|
||||||
class PathfinderDebugOverlay : IRenderOverlay, IWorldLoaded
|
class PathfinderDebugOverlay : IRenderOverlay, IWorldLoaded
|
||||||
{
|
{
|
||||||
Dictionary<Player, int[,]> layers;
|
Dictionary<Player, CellLayer<int>> layers;
|
||||||
int refreshTick;
|
int refreshTick;
|
||||||
World world;
|
World world;
|
||||||
public bool Visible;
|
public bool Visible;
|
||||||
@@ -29,7 +30,7 @@ namespace OpenRA.Mods.RA
|
|||||||
{
|
{
|
||||||
world = w;
|
world = w;
|
||||||
refreshTick = 0;
|
refreshTick = 0;
|
||||||
layers = new Dictionary<Player, int[,]>(8);
|
layers = new Dictionary<Player, CellLayer<int>>(8);
|
||||||
|
|
||||||
// Enabled via Cheats menu
|
// Enabled via Cheats menu
|
||||||
Visible = false;
|
Visible = false;
|
||||||
@@ -39,15 +40,15 @@ namespace OpenRA.Mods.RA
|
|||||||
{
|
{
|
||||||
if (maxWeight == 0) return;
|
if (maxWeight == 0) return;
|
||||||
|
|
||||||
int[,] layer;
|
CellLayer<int> layer;
|
||||||
if (!layers.TryGetValue(pl, out layer))
|
if (!layers.TryGetValue(pl, out layer))
|
||||||
{
|
{
|
||||||
layer = new int[world.Map.MapSize.X, world.Map.MapSize.Y];
|
layer = new CellLayer<int>(world.Map);
|
||||||
layers.Add(pl, layer);
|
layers.Add(pl, layer);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var p in cellWeights)
|
foreach (var p in cellWeights)
|
||||||
layer[p.First.X, p.First.Y] = Math.Min(128, layer[p.First.X, p.First.Y] + (maxWeight - p.Second) * 64 / maxWeight);
|
layer[p.First] = Math.Min(128, layer[p.First] + (maxWeight - p.Second) * 64 / maxWeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Render(WorldRenderer wr)
|
public void Render(WorldRenderer wr)
|
||||||
@@ -59,31 +60,27 @@ namespace OpenRA.Mods.RA
|
|||||||
var doDim = refreshTick - world.WorldTick <= 0;
|
var doDim = refreshTick - world.WorldTick <= 0;
|
||||||
if (doDim) refreshTick = world.WorldTick + 20;
|
if (doDim) refreshTick = world.WorldTick + 20;
|
||||||
|
|
||||||
var viewBounds = wr.Viewport.CellBounds;
|
|
||||||
foreach (var pair in layers)
|
foreach (var pair in layers)
|
||||||
{
|
{
|
||||||
var c = (pair.Key != null) ? pair.Key.Color.RGB : Color.PaleTurquoise;
|
var c = (pair.Key != null) ? pair.Key.Color.RGB : Color.PaleTurquoise;
|
||||||
var layer = pair.Value;
|
var layer = pair.Value;
|
||||||
|
|
||||||
// Only render quads in viewing range:
|
// Only render quads in viewing range:
|
||||||
for (var j = viewBounds.Top; j <= viewBounds.Bottom; ++j)
|
foreach (var cell in wr.Viewport.VisibleCells)
|
||||||
{
|
{
|
||||||
for (var i = viewBounds.Left; i <= viewBounds.Right; ++i)
|
if (layer[cell] <= 0)
|
||||||
{
|
|
||||||
if (layer[i, j] <= 0)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
var w = Math.Max(0, Math.Min(layer[i, j], 128));
|
var w = Math.Max(0, Math.Min(layer[cell], 128));
|
||||||
if (doDim)
|
if (doDim)
|
||||||
layer[i, j] = layer[i, j] * 5 / 6;
|
layer[cell] = layer[cell] * 5 / 6;
|
||||||
|
|
||||||
// TODO: This doesn't make sense for isometric terrain
|
// TODO: This doesn't make sense for isometric terrain
|
||||||
var tl = wr.ScreenPxPosition(new CPos(i, j).TopLeft);
|
var tl = wr.ScreenPxPosition(cell.TopLeft);
|
||||||
var br = wr.ScreenPxPosition(new CPos(i, j).BottomRight);
|
var br = wr.ScreenPxPosition(cell.BottomRight);
|
||||||
qr.FillRect(RectangleF.FromLTRB(tl.X, tl.Y, br.X, br.Y), Color.FromArgb(w, c));
|
qr.FillRect(RectangleF.FromLTRB(tl.X, tl.Y, br.X, br.Y), Color.FromArgb(w, c));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user