/// <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); }
/// <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); }
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); } } }
/// <summary> /// Ячейка с такой позицией существует на поле /// </summary> /// <param name="cellPos">Позиция</param> /// <returns>Результат проверки</returns> public bool IsCellExist(Vector2Int cellPos) { var index = SettingsAccess.GetFieldIndex(cellPos); return(_cells[index] != null); }