work on minimap
This commit is contained in:
parent
a152a5cead
commit
6bc3fb6972
3 changed files with 39 additions and 66 deletions
|
|
@ -36,21 +36,34 @@ public class WorldMap : IDisposable
|
|||
var srcRoi = new Mat(classifiedMat, srcRect);
|
||||
var dstRoi = new Mat(_canvas, dstRect);
|
||||
|
||||
// Only paste non-Unknown pixels; don't overwrite Explored with Wall
|
||||
// Paste wall pixels (walls always win)
|
||||
for (var row = 0; row < h; row++)
|
||||
for (var col = 0; col < w; col++)
|
||||
{
|
||||
for (var col = 0; col < w; col++)
|
||||
{
|
||||
var srcVal = srcRoi.At<byte>(row, col);
|
||||
if (srcVal == (byte)MapCell.Unknown) continue;
|
||||
|
||||
var dstVal = dstRoi.At<byte>(row, col);
|
||||
// Don't overwrite Explored with Wall (Explored is more reliable)
|
||||
if (dstVal == (byte)MapCell.Explored && srcVal == (byte)MapCell.Wall)
|
||||
continue;
|
||||
|
||||
var srcVal = srcRoi.At<byte>(row, col);
|
||||
if (srcVal == (byte)MapCell.Wall)
|
||||
dstRoi.Set(row, col, srcVal);
|
||||
}
|
||||
}
|
||||
|
||||
// Mark explored area: circle around player, only overwrite Unknown
|
||||
var pcx = (int)Math.Round(position.X);
|
||||
var pcy = (int)Math.Round(position.Y);
|
||||
var r = _config.ExploredRadius;
|
||||
var r2 = r * r;
|
||||
|
||||
var y0 = Math.Max(0, pcy - r);
|
||||
var y1 = Math.Min(_config.CanvasSize - 1, pcy + r);
|
||||
var x0 = Math.Max(0, pcx - r);
|
||||
var x1 = Math.Min(_config.CanvasSize - 1, pcx + r);
|
||||
|
||||
for (var y = y0; y <= y1; y++)
|
||||
for (var x = x0; x <= x1; x++)
|
||||
{
|
||||
var dx = x - pcx;
|
||||
var dy = y - pcy;
|
||||
if (dx * dx + dy * dy > r2) continue;
|
||||
if (_canvas.At<byte>(y, x) == (byte)MapCell.Unknown)
|
||||
_canvas.Set(y, x, (byte)MapCell.Explored);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue