Пример #1
0
    IEnumerator GameTurn()
    {
        SwitchTime();
        //First Turn only
        yield return(new WaitForSeconds(.5f));

        yield return(new WaitUntil(() => skyManager.IsReady()));

        foreach (PlayerInfo g in playersList)
        {
            g.playerRef().yourTurn = false;
            g.playerRef().prevVote = -1;
        }

        //CUPIDON
        if (!refCupidon.IsNull())
        {
            BaseRole _refCupidon = refCupidon.playerRef().GetComponent <BaseRole>();

            turnIssue = TurnIssue.CUPIDON;
            FireForPlayers();
            MessageToPlayers("MJ : Cupidon choisi deux personnes qui tomberont amoureuses", true);

            refCupidon.playerRef().yourTurn = true;
            refCupidon.playerRef().RpcChangeCursorColor(Color.white);
            _refCupidon.PlayTurn();
            yield return(new WaitForSeconds(.5f));

            yield return(new WaitUntil(() => _refCupidon.IsReady()));

            refCupidon.playerRef().yourTurn = false;
            refCupidon.playerRef().RpcChangeCursorColor(Color.black);
            ResetVote();
        }

        bool gameRun = true;

        while (gameRun)
        {
            if (!bFirstTurn)
            {
                SwitchTime();

                yield return(new WaitForSeconds(.5f));

                yield return(new WaitUntil(() => skyManager.IsReady()));

                turnIssue = TurnIssue.NO_TURN;
                FireForPlayers();
                bFirstTurn = false;
            }

            //VOYANTE
            if (!refVoyante.IsNull())
            {
                BaseRole _refVoyante = refVoyante.playerRef().GetComponent <BaseRole>();

                turnIssue = TurnIssue.SEER;
                FireForPlayers();
                MessageToPlayers("MJ : La voyante choisi une personne pour connaitre son rôle", true);

                refVoyante.playerRef().yourTurn = true;
                refVoyante.playerRef().RpcChangeCursorColor(Color.white);
                _refVoyante.PlayTurn();
                yield return(new WaitForSeconds(.5f));

                yield return(new WaitUntil(() => _refVoyante.IsReady()));

                refVoyante.playerRef().yourTurn = false;
                refVoyante.playerRef().RpcChangeCursorColor(Color.black);
                ResetVote();
            }

            //LOUPS
            if (wolvesList.Count > 0)
            {
                turnIssue = TurnIssue.NO_TURN;
                FireForPlayers(true);
                MessageToPlayers("MJ : Les loups choissisent une personnes à tuer", true);

                foreach (PlayerInfo p in wolvesList)
                {
                    BaseRole _refWolf      = p.playerRef().GetComponent <BaseRole>();
                    p.playerRef().yourTurn = true;
                    p.playerRef().RpcChangeCursorColor(Color.white);
                    _refWolf.PlayTurn();
                }

                foreach (PlayerInfo p in wolvesList)
                {
                    BaseRole _refWolf = p.playerRef().GetComponent <BaseRole>();
                    yield return(new WaitForSeconds(.5f));

                    yield return(new WaitUntil(() => _refWolf.IsReady()));
                }

                foreach (PlayerInfo p in wolvesList)
                {
                    p.playerRef().yourTurn = false;
                    p.playerRef().RpcChangeCursorColor(Color.black);
                }

                AddVictim(GetMostVote());
                ResetVote();
            }

            //SORCIÈRE
            if (!refSorciere.IsNull())
            {
                turnIssue = TurnIssue.WITCH;
                FireForPlayers();

                BaseRole _refSorciere = refSorciere.playerRef().GetComponent <BaseRole>();
                MessageToPlayers("MJ : La sorcière choisi de sauver la victime ou d'éliminer quelqu'un.", true);
                refSorciere.playerRef().RpcAddMsg("MJ: La victime est : " + victimsList[0].playerRef().pseudo);
                refSorciere.playerRef().yourTurn = true;
                refSorciere.playerRef().RpcChangeCursorColor(Color.white);
                _refSorciere.PlayTurn();
                yield return(new WaitForSeconds(.5f));

                yield return(new WaitUntil(() => _refSorciere.IsReady()));

                refSorciere.playerRef().yourTurn = false;
                refSorciere.playerRef().RpcChangeCursorColor(Color.black);
                ResetVote();
            }

            //FIN DE LA NUIT
            SwitchTime();
            yield return(new WaitForSeconds(.5f));

            MessageToPlayers("MJ :  Un nouveau jour se lève sur la village de " + village + ".", true);
            yield return(new WaitForSeconds(.5f));

            yield return(new WaitUntil(() => skyManager.IsReady()));

            //TUERIE DES VICTIMES
            if (victimsList.Count > 0)
            {
                turnIssue = TurnIssue.VICTIMS;
                FireForPlayers();

                foreach (PlayerInfo p in victimsList)
                {
                    killedDead++;
                    StartCoroutine(Kill(p));
                    yield return(new WaitForSeconds(.5f));

                    yield return(new WaitUntil(() => (killedDead <= 0)));
                }
                victimsList.Clear();
            }
            else
            {
                killedDead = 0;
                turnIssue  = TurnIssue.VOTE;
                FireForPlayers();
                MessageToPlayers("MJ :  Il n'y a aucun mort cette nuit! gg wp.", true);
            }

            GameEndCheck(ref gameRun);

            //PHASE DU JOUR (VOTE DU VILLAGE)
            if (gameRun)
            {
                foreach (PlayerInfo g in playersList)
                {
                    g.playerRef().yourTurn = true;
                    g.playerRef().RpcChangeCursorColor(Color.white);
                    g.playerRef().timer = true;
                }

                yield return(new WaitForSeconds(30f));

                foreach (PlayerInfo g in playersList)
                {
                    g.playerRef().yourTurn = false;
                    g.playerRef().RpcChangeCursorColor(Color.black);
                    g.playerRef().prevVote = -1;
                }

                /*for (int i = 0; i < playersList.Count; i++){
                 *  Debug.Log(playersList[i].pseudo + " vote: " + playersList[i].playerRef().vote);
                 * }*/

                GameObject mostVotedPlayer = GetMostVote();

                killedDead++;
                StartCoroutine(Kill(new PlayerInfo(mostVotedPlayer.GetComponent <NetworkIdentity>().netId, mostVotedPlayer.GetComponent <Player>().pseudo)));
                yield return(new WaitForSeconds(.5f));

                yield return(new WaitUntil(() => (killedDead <= 0)));
            }

            GameEndCheck(ref gameRun);

            ResetVote();
        }
    }