private void OnGridElementSelected(GridElement gridElement) { if (gridElement.PlantedTower != null) { _gameController.PlantedTowerSelected(gridElement.PlantedTower); return; } if (_selectedTower == null) { return; } if (_mapCellsAroundTower.Any(element => element.Occupied || !element.CanBuildHere)) { return; } _selectedTower.ParentGridElement = gridElement; if (_gameController.EnoughMoney(_selectedTower.Price)) { _gameController.RegisterTower(_selectedTower); foreach (var element in _mapCellsAroundTower) { element.Object.SetAreaActive(EGridElementState.Occupied); element.Object.SetPlantedTower(_selectedTower); element.Occupied = true; } gridElement.SetPlantedTower(_selectedTower); gridElement.PlantedTower.OccupiedCells = _mapCellsAroundTower.ToArray(); } else { ClearSelectedTower(); } _mapCellsAroundTower.Clear(); _selectedTower = null; }
private void OnGridElementHover(GridElement gridElement, bool hoverStatus, int x, int y) { if (_selectedTower == null) { return; } _mapCellsAroundTower.Clear(); foreach (var element in _selectedTower.Region) { var xPos = x + (int)element.x; var yPos = y + (int)element.y; try { var elementAround = MatrixMapCells[xPos, yPos]; _mapCellsAroundTower.Add(elementAround); if (hoverStatus) { _selectedTower.transform.position = gridElement.transform.position; elementAround.Object.SetAreaActive(!elementAround.Occupied && elementAround.CanBuildHere ? EGridElementState.Available : EGridElementState.Unavailable); } else { elementAround.Object.SetAreaActive(elementAround.Occupied && elementAround.CanBuildHere ? EGridElementState.Occupied : EGridElementState.Default); } } catch (IndexOutOfRangeException) { } } }