Esempio n. 1
0
        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;
        }