public void RegisterTower(TowerBase tower) { if (!_towersOnScene.Contains(tower)) { _towersOnScene.Add(tower); tower.Selected += OnTowerSelected; tower.Upgraded += OnTowerUpgraded; } }
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); }