예제 #1
0
    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);
    }