Exemple #1
0
        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;
        }
Exemple #2
0
        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) { }
            }
        }