work on minimap

This commit is contained in:
Boki 2026-02-13 12:30:13 -05:00
parent a152a5cead
commit 6bc3fb6972
3 changed files with 39 additions and 66 deletions

View file

@ -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);
}
}