public void StartNextTurn()
{
if (Session.UsePlayerTurns)
{
var activePlayerIndex = Session.Players.IndexOf(Session.ActivePlayer);
// Get the first player that still has at least one ball.
// Search for the next player in the order of the turn system
var player = Enumerable.Range(0, Session.Players.Count)
.OrderBy(i => i > activePlayerIndex ? i - Session.Players.Count : i)
.Select(i => Session.Players[i])
.FirstOrDefault(p => p.OwnedBalls.Count > 0);
if (player == null)
return;
Session.ActivePlayer = player;
player.ActiveBall = ChooseNextBall(player);
ActiveControllers[player] = BallControllers[player.ActiveBall];
ActiveControllers[player]?.OnTurnStart();
Session.TurnTime = 0;
Session.TurnState = TurnState.Running;
}
}