private void CycleToNextVallidOrientator() { if (_bestOrientator == null) { _bestOrientator = _orientators.Any(o => o.HasTargets) ? _orientators.First(o => o.HasTargets) : _orientators.First(); return; } var i = _orientators.IndexOf(_bestOrientator); for (int j = 1; j < _orientators.Count; j++) { //finds the next orientator that has targets var index = (i + j) % _orientators.Count; var orientator = _orientators.Skip(index).FirstOrDefault(); if (orientator != null && orientator.HasTargets) { _bestOrientator = orientator; return; } } }
public ShipCamTargetValues CalculateTargets() { _userPriorityCountdown -= Time.unscaledDeltaTime; if (Input.GetKeyUp(KeyCode.O)) { CycleToNextVallidOrientator(); Debug.Log("User selected camera mode: " + _userPriorityOrientator.Description); } var active = _orientators.Where(o => o.HasTargets); active = active.Any() ? active : _orientators; //Debug.Log(string.Join(", ", active.OrderByDescending(o => o.Priority).Select(o => o.Description + o.Priority).ToArray())); _bestOrientator = _userPriorityCountdown > 0 ? _userPriorityOrientator : active .OrderByDescending(o => o.Priority) .FirstOrDefault(); return(_bestOrientator.CalculateTargets()); }