private void UpdateTiles(Dictionary <MapTile, BitmapRect> bitmapSquares) { foreach (KeyValuePair <MapTile, BitmapRect> square in bitmapSquares.ToArray()) { if (!CheckBoundsIntersect(square.Value)) { bitmapSquares.Remove(square.Key); _tileSet.RemoveTile(square.Key); } } if (_tileSet.Tiles.Count() == 0) { _tileSet.RegenerateTiles(); } MapTile baseTile = _tileSet.Tiles.FirstOrDefault(); MapTile horizontalAttemptTile = baseTile; MapTile verticalAttemptTile; while (CheckTileBoundsIntersect(horizontalAttemptTile = horizontalAttemptTile.Offset(1, 0))) { if (!bitmapSquares.ContainsKey(horizontalAttemptTile)) { bitmapSquares.Add(horizontalAttemptTile, GetSquareBitmapBounds(horizontalAttemptTile)); _tileSet.AddTile(horizontalAttemptTile); } verticalAttemptTile = horizontalAttemptTile; while (CheckTileBoundsIntersect(verticalAttemptTile = verticalAttemptTile.Offset(0, 1))) { if (!bitmapSquares.ContainsKey(verticalAttemptTile)) { bitmapSquares.Add(verticalAttemptTile, GetSquareBitmapBounds(verticalAttemptTile)); _tileSet.AddTile(verticalAttemptTile); } } verticalAttemptTile = horizontalAttemptTile; while (CheckTileBoundsIntersect(verticalAttemptTile = verticalAttemptTile.Offset(0, -1))) { if (!bitmapSquares.ContainsKey(verticalAttemptTile)) { bitmapSquares.Add(verticalAttemptTile, GetSquareBitmapBounds(verticalAttemptTile)); _tileSet.AddTile(verticalAttemptTile); } } } horizontalAttemptTile = baseTile; while (CheckTileBoundsIntersect(horizontalAttemptTile = horizontalAttemptTile.Offset(-1, 0))) { if (!bitmapSquares.ContainsKey(horizontalAttemptTile)) { bitmapSquares.Add(horizontalAttemptTile, GetSquareBitmapBounds(horizontalAttemptTile)); _tileSet.AddTile(horizontalAttemptTile); } verticalAttemptTile = horizontalAttemptTile; while (CheckTileBoundsIntersect(verticalAttemptTile = verticalAttemptTile.Offset(0, 1))) { if (!bitmapSquares.ContainsKey(verticalAttemptTile)) { bitmapSquares.Add(verticalAttemptTile, GetSquareBitmapBounds(verticalAttemptTile)); _tileSet.AddTile(verticalAttemptTile); } } verticalAttemptTile = horizontalAttemptTile; while (CheckTileBoundsIntersect(verticalAttemptTile = verticalAttemptTile.Offset(0, -1))) { if (!bitmapSquares.ContainsKey(verticalAttemptTile)) { bitmapSquares.Add(verticalAttemptTile, GetSquareBitmapBounds(verticalAttemptTile)); _tileSet.AddTile(verticalAttemptTile); } } } verticalAttemptTile = baseTile; while (CheckTileBoundsIntersect(verticalAttemptTile = verticalAttemptTile.Offset(0, 1))) { if (!bitmapSquares.ContainsKey(verticalAttemptTile)) { bitmapSquares.Add(verticalAttemptTile, GetSquareBitmapBounds(verticalAttemptTile)); _tileSet.AddTile(verticalAttemptTile); } } verticalAttemptTile = baseTile; while (CheckTileBoundsIntersect(verticalAttemptTile = verticalAttemptTile.Offset(0, -1))) { if (!bitmapSquares.ContainsKey(verticalAttemptTile)) { bitmapSquares.Add(verticalAttemptTile, GetSquareBitmapBounds(verticalAttemptTile)); _tileSet.AddTile(verticalAttemptTile); } } }