Now coloring A* cells by owning player color. Added checkbox to cheats menu.

This commit is contained in:
Matthias Mailänder
2013-03-10 07:33:25 +01:00
parent 7d0de5645f
commit 493eb10b96
4 changed files with 49 additions and 22 deletions

View File

@@ -120,7 +120,8 @@ namespace OpenRA.Mods.RA.Move
public List<CPos> FindBidiPath( /* searches from both ends toward each other */ public List<CPos> FindBidiPath( /* searches from both ends toward each other */
PathSearch fromSrc, PathSearch fromSrc,
PathSearch fromDest) PathSearch fromDest,
Player onBehalfOf)
{ {
using (new PerfSample("Pathfinder")) using (new PerfSample("Pathfinder"))
{ {
@@ -155,8 +156,8 @@ namespace OpenRA.Mods.RA.Move
var dbg = world.WorldActor.TraitOrDefault<DebugOverlay>(); var dbg = world.WorldActor.TraitOrDefault<DebugOverlay>();
if (dbg != null) if (dbg != null)
{ {
dbg.AddLayer(fromSrc.considered.Select(p => new Pair<CPos, int>(p, fromSrc.cellInfo[p.X, p.Y].MinCost)), fromSrc.maxCost); dbg.AddLayer(fromSrc.considered.Select(p => new Pair<CPos, int>(p, fromSrc.cellInfo[p.X, p.Y].MinCost)), fromSrc.maxCost, onBehalfOf);
dbg.AddLayer(fromDest.considered.Select(p => new Pair<CPos, int>(p, fromDest.cellInfo[p.X, p.Y].MinCost)), fromDest.maxCost); dbg.AddLayer(fromDest.considered.Select(p => new Pair<CPos, int>(p, fromDest.cellInfo[p.X, p.Y].MinCost)), fromDest.maxCost, onBehalfOf);
} }
if (path != null) if (path != null)

View File

@@ -59,6 +59,11 @@ namespace OpenRA.Mods.RA.Widgets.Logic
widget.Get<ButtonWidget>("RESET_EXPLORATION").OnClick = () => widget.Get<ButtonWidget>("RESET_EXPLORATION").OnClick = () =>
world.IssueOrder(new Order("DevResetExploration", world.LocalPlayer.PlayerActor, false)); world.IssueOrder(new Order("DevResetExploration", world.LocalPlayer.PlayerActor, false));
var dbgOverlay = world.WorldActor.TraitOrDefault<DebugOverlay>();
var showAstarCostCheckbox = widget.Get<CheckboxWidget>("SHOW_ASTAR");
showAstarCostCheckbox.IsChecked = () => dbgOverlay != null ? dbgOverlay.Visible : false;
showAstarCostCheckbox.OnClick = () => { if (dbgOverlay != null) dbgOverlay.Visible ^= true; };
widget.Get<ButtonWidget>("CLOSE").OnClick = () => { Ui.CloseWindow(); onExit(); }; widget.Get<ButtonWidget>("CLOSE").OnClick = () => { Ui.CloseWindow(); onExit(); };
} }

View File

@@ -15,46 +15,61 @@ namespace OpenRA.Mods.RA
class DebugOverlay : IRenderOverlay, IWorldLoaded class DebugOverlay : IRenderOverlay, IWorldLoaded
{ {
int[,] layer; Dictionary<Player, int[,]> layers;
int refreshTick; int refreshTick;
World world; World world;
public bool Visible;
public void WorldLoaded(World w) public void WorldLoaded(World w)
{ {
this.world = w; this.world = w;
this.layer = new int[w.Map.MapSize.X, w.Map.MapSize.Y];
this.refreshTick = 0; this.refreshTick = 0;
this.layers = new Dictionary<Player, int[,]>(8);
// Enabled via Cheats menu
this.Visible = false;
} }
public void AddLayer(IEnumerable<Pair<CPos, int>> cellWeights, int maxWeight) public void AddLayer(IEnumerable<Pair<CPos, int>> cellWeights, int maxWeight, Player pl)
{ {
if (maxWeight == 0) return; if (maxWeight == 0) return;
int[,] layer;
if (!layers.TryGetValue(pl, out layer))
{
layer = new int[world.Map.MapSize.X, world.Map.MapSize.Y];
layers.Add(pl, layer);
}
foreach (var p in cellWeights) foreach (var p in cellWeights)
layer[p.First.X, p.First.Y] = layer[p.First.X, p.First.Y] / 2 + (p.Second * 128 / maxWeight); layer[p.First.X, p.First.Y] = Math.Min(128, (layer[p.First.X, p.First.Y] / 2) + ((maxWeight - p.Second) * 64 / maxWeight));
} }
public void Render(WorldRenderer wr) public void Render(WorldRenderer wr)
{ {
if (!Visible) return;
var qr = Game.Renderer.WorldQuadRenderer; var qr = Game.Renderer.WorldQuadRenderer;
bool doSwap = refreshTick - world.FrameNumber <= 0; bool doDim = refreshTick - world.FrameNumber <= 0;
if (doSwap) refreshTick = world.FrameNumber + 20; if (doDim) refreshTick = world.FrameNumber + 15;
for (int j = world.Map.Bounds.Top; j <= world.Map.Bounds.Bottom; ++j) foreach (var pair in layers)
for (int i = world.Map.Bounds.Left; i <= world.Map.Bounds.Right; ++i) {
{ Color c = (pair.Key != null) ? pair.Key.ColorRamp.GetColor(0f) : Color.PaleTurquoise;
if (!world.Map.IsInMap(i, j)) continue; var layer = pair.Value;
var cell = new CPos(i, j); for (int j = world.Map.Bounds.Top; j <= world.Map.Bounds.Bottom; ++j)
var pix = cell.ToPPos(); for (int i = world.Map.Bounds.Left; i <= world.Map.Bounds.Right; ++i)
var w = Math.Max(0, Math.Min(layer[i, j], 224));
if (doSwap)
{ {
layer[i, j] = layer[i, j] * 4 / 5; var ploc = new CPos(i, j).ToPPos();
var w = Math.Max(0, Math.Min(layer[i, j], 128));
if (doDim)
{
layer[i, j] = layer[i, j] * 4 / 5;
}
qr.FillRect(new RectangleF(ploc.X, ploc.Y, Game.CellSize, Game.CellSize), Color.FromArgb(w, c));
} }
qr.FillRect(new RectangleF(pix.X, pix.Y, Game.CellSize, Game.CellSize), Color.FromArgb(w, Color.White)); }
}
} }
} }
} }

View File

@@ -3,7 +3,7 @@ Background@CHEATS_PANEL:
X:(WINDOW_RIGHT - WIDTH)/2 X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2 Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:350 Width:350
Height:420 Height:450
Visible:true Visible:true
Children: Children:
Label@LABEL_TITLE: Label@LABEL_TITLE:
@@ -75,6 +75,12 @@ Background@CHEATS_PANEL:
Width:PARENT_RIGHT - 30 Width:PARENT_RIGHT - 30
Height:20 Height:20
Text:Build Anywhere Text:Build Anywhere
Checkbox@SHOW_ASTAR:
X:30
Y:320
Width:PARENT_RIGHT - 30
Height:20
Text:Show A* Cost
Button@CLOSE: Button@CLOSE:
X:30 X:30
Y:360 Y:360