Exemplo n.º 1
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);
        }
Exemplo n.º 2
0
 private void OnTowerSelected(ICanSelect tower)
 {
     TowerSelected?.Invoke(tower as TowerBase);
 }