IEnumerator GameLoop() { while (gameParticipatns.Count > 1) { //Debug.Log("It's " + curParticipant.participantName + "'s turn."); curParticipant.AnnouncePlayer(); curParticipant.BeginTurn(); if (curParticipant == PlayerController.instance) { bool playerTurn = true; while (playerTurn) { //PlayerController.instance.PlayersTurn(); yield return(new WaitUntil(() => playerStepThrough == true)); playerStepThrough = false; switch (PlayerController.instance.playerPAR) { case PlayerActionResult.Busted: curPlayersToElim.Add(curParticipant); playerTurn = false; break; case PlayerActionResult.DrawnToDeck: break; case PlayerActionResult.DrawnToHand: break; case PlayerActionResult.PlayedLetter: playerTurn = false; break; case PlayerActionResult.PickOne: PlayerController.instance.ChoosePlayer(); yield return(new WaitUntil(() => playerStepThrough == true)); playerStepThrough = false; playerTurn = false; break; } } advanceButton.SetActive(true); drawButton.SetActive(false); } else { yield return(new WaitUntil(() => stepThrough == true)); stepThrough = false; curPAR = curParticipant.TryAction(); while (curPAR != PlayerActionResult.PlayedLetter) { //Debug.Log("action failed."); if (curPAR == PlayerActionResult.Busted) { curPlayersToElim.Add(curParticipant); break; //EliminatePlayer(curParticipant); //yield break; } yield return(new WaitUntil(() => stepThrough == true)); stepThrough = false; curPAR = curParticipant.TryAction(); } } yield return(new WaitUntil(() => stepThrough == true)); stepThrough = false; for (int i = 0; i < curPlayersToElim.Count; i++) { EliminatePlayer(curPlayersToElim[i]); yield return(new WaitUntil(() => stepThrough == true)); stepThrough = false; } curPlayersToElim.Clear(); curParticipantID = (curParticipantID + 1) % gameParticipatns.Count; curParticipant = gameParticipatns[curParticipantID]; } ShowGameOverPanel(gameParticipatns[0].participantName + " won the game because all other players were eliminated."); }