Ejemplo n.º 1
0
        public void RegisterTower(TowerBase tower)
        {
            if (!_towersOnScene.Contains(tower))
            {
                _towersOnScene.Add(tower);

                tower.Selected += OnTowerSelected;
                tower.Upgraded += OnTowerUpgraded;
            }
        }
Ejemplo n.º 2
0
        public ICanSelect Select(IEnumerable <ICanSelect> selectableItems)
        {
            if (CheckUIRaycast(Input.mousePosition))
            {
                return(_currentTower);
            }

            var towers = selectableItems.Cast <TowerBase>();

            var distance = float.MaxValue;
            var ray      = _camera.ScreenPointToRay(Input.mousePosition);

            TowerBase closestTower = null;

            foreach (var tower in towers)
            {
                var   bounds = tower.VisualBounds;
                float newDistance;

                if (bounds.IntersectRay(ray, out newDistance))
                {
                    if (newDistance < distance)
                    {
                        closestTower = tower;
                        distance     = newDistance;
                    }
                }
            }

            if (_currentTower != null && _currentTower != closestTower)
            {
                _currentTower.Unselect();
            }

            _currentTower = closestTower;

            if (closestTower != null)
            {
                closestTower.Select();
            }

            return(closestTower);
        }