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(); } }