BolfTracker.Web.GamePanelViewModel.GetNextPlayer C# (CSharp) Method

GetNextPlayer() public method

public GetNextPlayer ( ) : BolfTracker.Models.Player
return BolfTracker.Models.Player
        public Player GetNextPlayer()
        {
            var activePlayers = ActivePlayers;
            var playersDescending = GetCurrentActivePlayers(activePlayers, includeOvertime: false).ToList();
            var duplicatePlayers = Shots.GroupBy(s => s.Player.Id).Where(p => p.Count() > 1);

            // Check to see if we've had any duplicate players yet (if so, that means we can determine the order)
            if (duplicatePlayers.Any())
            {
                var currentPlayer = GetCurrentPlayer();
                var currentPlayerIndex = playersDescending.IndexOf(currentPlayer);

                if (currentPlayerIndex == playersDescending.Count - 1)
                {
                    return playersDescending[currentPlayerIndex - 1];
                }
                else
                {
                    return playersDescending[0];
                }
            }
            else
            {
                // If we can't determine the order, just get the next player who has not gone already
                foreach (var player in _allPlayers)
                {
                    if (!activePlayers.Any(p => p.Id == player.Id))
                    {
                        return player;
                    }
                }
            }

            return new Player();
        }