Exemplo n.º 1
0
        /// <summary>
        /// Создать или добавить ячейку на поле
        /// </summary>
        /// <param name="centerCellPos">Координаты центральной ячейки, для расчёта координат полностью генерируемых ячеек</param>
        /// <param name="cellPos">Координаты ячейки</param>
        /// <returns>Ячейка для заданной позиции</returns>
        private CellInfo GetOrCreateCell(Vector2Int centerCellPos, Vector2Int cellPos)
        {
            var index = SettingsAccess.GetFieldIndex(cellPos);

            CellInfo cell = _cells[index];

            if (cell == null)
            {
                cell = new CellInfo();

                _cells[index] = cell;
            }

            ushort[] ratings = null;

            // Если эта ячейка должна быть сгенерирована полностью, найдём для неё индекс реиспользуемого массива
            int visibleIndex = GetFullGenerationIndex(centerCellPos, cellPos);

            if (visibleIndex != -1)
            {
                ratings = _fullGenerationRatingsArray[visibleIndex];

                if (ratings == null)
                {
                    ratings = new ushort[SettingsAccess.CellPxLenght];

                    _fullGenerationRatingsArray[visibleIndex] = ratings;
                }
            }

            cell.InitCell(cellPos, ratings);

            return(cell);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Возвращает ячейку по её индексу
        /// </summary>
        /// <param name="cellPos"></param>
        /// <returns></returns>
        public CellInfo GetCell(Vector2Int cellPos)
        {
            var cell = _cells[SettingsAccess.GetFieldIndex(cellPos)];

            if (cell.Pos != cellPos)
            {
                return(null);
            }

            return(cell);
        }
Exemplo n.º 3
0
        public void CellsIndexCheck()
        {
            Vector2Int[] exists = new Vector2Int[]
            {
                new Vector2Int(6000, -6000)
            };

            Vector2Int[] check = new Vector2Int[]
            {
                new Vector2Int(-6000, -6000)
            };

            for (int i = 0; i < exists.Length; i++)
            {
                Assert.AreNotEqual(SettingsAccess.GetFieldIndex(exists[i]), SettingsAccess.GetFieldIndex(check[i]));
            }

            uint[] idList = new uint[SettingsAccess.FieldLength];

            for (int x = 0; x < SettingsAccess.FieldSize; x++)
            {
                for (int y = 0; y < SettingsAccess.FieldSize; y++)
                {
                    var index = SettingsAccess.GetFieldIndex(new Vector2Int(x, y) * SettingsAccess.CellPxSize);

                    Assert.AreEqual(idList[index], 0);

                    idList[index] = index;
                }
            }

            for (int x = SettingsAccess.FieldSize * -3; x < SettingsAccess.FieldSize * 4; x++)
            {
                for (int y = SettingsAccess.FieldSize * -3; y < SettingsAccess.FieldSize * 4; y++)
                {
                    var index = SettingsAccess.GetFieldIndex(new Vector2Int(x, y) * SettingsAccess.CellPxSize);

                    Assert.AreEqual(idList[index], index);
                }
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Ячейка с такой позицией существует на поле
        /// </summary>
        /// <param name="cellPos">Позиция</param>
        /// <returns>Результат проверки</returns>
        public bool IsCellExist(Vector2Int cellPos)
        {
            var index = SettingsAccess.GetFieldIndex(cellPos);

            return(_cells[index] != null);
        }