public short[] GetCells(short centerCell, MapRecord map) { MapPoint mapPoint = new MapPoint(centerCell); List <short> list = new List <short>(); list.Add(centerCell); for (int i = 1; i < Radius + 1; i++) { var adj = mapPoint.GetCellInDirection(DirectionsEnum.DIRECTION_EAST, (short)i); if (adj != null) { list.Add(adj.CellId); MapPoint next = adj; foreach (var cell in next.GetCellsInDirection(DirectionsEnum.DIRECTION_NORTH_WEST, (short)(i * 2))) { if (cell == null) { return(new short[0]); } if (!list.Contains(cell.CellId)) { MapPoint.AddCellIfValid(cell.X, cell.Y, map, list); next = cell; } } foreach (var cell in next.GetCellsInDirection(DirectionsEnum.DIRECTION_SOUTH_WEST, (short)(i * 2))) { if (cell == null) { return(new short[0]); } if (!list.Contains(cell.CellId)) { MapPoint.AddCellIfValid(cell.X, cell.Y, map, list); next = cell; } } foreach (var cell in next.GetCellsInDirection(DirectionsEnum.DIRECTION_SOUTH_EAST, (short)(i * 2))) { if (cell == null) { return(new short[0]); } if (!list.Contains(cell.CellId)) { MapPoint.AddCellIfValid(cell.X, cell.Y, map, list); next = cell; } } foreach (var cell in next.GetCellsInDirection(DirectionsEnum.DIRECTION_NORTH_EAST, (short)(i * 2))) { if (cell == null) { return(new short[0]); } if (!list.Contains(cell.CellId)) { MapPoint.AddCellIfValid(cell.X, cell.Y, map, list); next = cell; } } } else { list.Clear(); } } return(list.ToArray()); }