private void InitWalkGrid(byte screen, byte width)
{
byte stretch = 0;
var screenGrid = _grid.GiveGrid(screen);
var screenGridPos = Logic.GRID_SIZE;
var wGridPos = new UShortAccess(_routeGrid, ((RouteGridSize >> 1) - RouteGridWidth - 2) * 2);
Array.Clear(_routeGrid, 0, _routeGrid.Length);
byte bitsLeft = 0;
uint gridData = 0;
for (byte gridCntY = 0; gridCntY < RouteGridHeight - 2; gridCntY++)
{
for (byte gridCntX = 0; gridCntX < RouteGridWidth - 2; gridCntX++)
{
if (bitsLeft == 0)
{
screenGridPos -= 4;
gridData = screenGrid.ToUInt32(screenGridPos);
bitsLeft = 32;
}
if ((gridData & 1) != 0)
{
wGridPos[0] = 0xFFFF; // block is not accessible
stretch = width;
}
else if (stretch != 0)
{
wGridPos[0] = 0xFFFF;
stretch--;
}
wGridPos.Offset -= 2;
bitsLeft--;
gridData >>= 1;
}
wGridPos.Offset -= 4;
stretch = 0;
}
}