private IEnumerator CoroutineMain() { int idx = 0; int playerNumber = players.Count; while (!isOver) { var current = players[idx % playerNumber]; idx++; if (current.IsOver) { continue; } current.OnTurn(field.BitFieldCard, field.BitUsedCard, playingNumber, playerNumber, isRevolutionalizing); current.ChangePanelColor(); yield return(new WaitWhile(() => !isTurnEnd)); if (current.BitSelectedHand != 0) { if (IsRevolutionableHand(current.BitSelectedHand)) { isRevolutionalizing = !isRevolutionalizing; } current.Render(); field.AddCard(current.BitSelectedHand); revolutionText.gameObject.SetActive(isRevolutionalizing); passCount = 0; if (current.IsOver) { playingNumber--; passCount = -1; RenderResult(current, playingNumber, playerNumber); if (playingNumber == 1) { var last = players.Find(p => !p.IsOver); last.Open(); RenderResult(last, playingNumber - 1, playerNumber); isOver = true; } } } else { current.RenderText("pass"); passCount++; if (passCount == playingNumber - 1) { field.Clear(); passCount = 0; } } isTurnEnd = false; yield return(new WaitForSeconds(1.0f)); current.RestorePanelColor(); } gameOverPanel.gameObject.SetActive(true); }