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());
        }