public void GetVisibleObjects(Point cellIdx, out List <int> highDetailedObjects, out List <int> lowDetailedObjects) { bool hasInCache = cachedRequest != null && cachedRequest.RequestedCell == cellIdx; if (!hasInCache) { var objectsFromCellsHD = new List <List <int> >(); // high-detailed objects var objectsFromCellsLD = new List <List <int> >(); // low-detailed objects var minRow = cellIdx.Y - 1; var maxRow = cellIdx.Y + 1; var minCol = cellIdx.X - 1; var maxCol = cellIdx.X + 1; if (minRow < 0) { minRow = 0; } if (maxRow >= GridRows) { maxRow = GridRows - 1; } if (minCol < 0) { minCol = 0; } if (maxCol >= GridColumns) { maxCol = GridColumns - 1; } // Добавляем HighDetailed-объекты из ячейки, в которой находится камера, и 8ми соседних ячеек for (var col = minCol; col <= maxCol; ++col) { for (var row = minRow; row <= maxRow; ++row) { objectsFromCellsHD.Add(cells[row, col].HighDetailedObjects); } } // Добавляем LowDetailed-объекты из всех остальных ячеек for (var col = 0; col < GridColumns; ++col) { for (var row = 0; row < GridRows; ++row) { if (row >= minRow && row <= maxRow && col >= minCol && col <= maxCol) { continue; } objectsFromCellsLD.Add(cells[row, col].LowDetailedObjects); } } var resultHD = Utils.MergeLists(objectsFromCellsHD); var resultLD = Utils.MergeLists(objectsFromCellsLD); // Порядок важен (ввиду наличия полупрозрачных объектов) resultHD.Sort(); resultLD.Sort(); cachedRequest = new CachedRequest(cellIdx, resultHD, resultLD); } highDetailedObjects = cachedRequest.HighDetailedResult; lowDetailedObjects = cachedRequest.LowDetailedResult; }
public void GetVisibleObjects(Point cellIdx, out List<int> highDetailedObjects, out List<int> lowDetailedObjects) { bool hasInCache = cachedRequest != null && cachedRequest.RequestedCell == cellIdx; if (!hasInCache) { var objectsFromCellsHD = new List<List<int>>(); // high-detailed objects var objectsFromCellsLD = new List<List<int>>(); // low-detailed objects var minRow = cellIdx.Y - 1; var maxRow = cellIdx.Y + 1; var minCol = cellIdx.X - 1; var maxCol = cellIdx.X + 1; if (minRow < 0) minRow = 0; if (maxRow >= GridRows) maxRow = GridRows - 1; if (minCol < 0) minCol = 0; if (maxCol >= GridColumns) maxCol = GridColumns - 1; // Добавляем HighDetailed-объекты из ячейки, в которой находится камера, и 8ми соседних ячеек for (var col = minCol; col <= maxCol; ++col) for (var row = minRow; row <= maxRow; ++row) objectsFromCellsHD.Add(cells[row, col].HighDetailedObjects); // Добавляем LowDetailed-объекты из всех остальных ячеек for (var col = 0; col < GridColumns; ++col) { for (var row = 0; row < GridRows; ++row) { if (row >= minRow && row <= maxRow && col >= minCol && col <= maxCol) continue; objectsFromCellsLD.Add(cells[row, col].LowDetailedObjects); } } var resultHD = Utils.MergeLists(objectsFromCellsHD); var resultLD = Utils.MergeLists(objectsFromCellsLD); // Порядок важен (ввиду наличия полупрозрачных объектов) resultHD.Sort(); resultLD.Sort(); cachedRequest = new CachedRequest(cellIdx, resultHD, resultLD); } highDetailedObjects = cachedRequest.HighDetailedResult; lowDetailedObjects = cachedRequest.LowDetailedResult; }