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