Beispiel #1
0
        /// <summary>
        /// This function handles the nomination of the Mayor, the killing of the Villager or Werewolf vote and the switching of Chat canals
        /// </summary>
        void VoteSystem()
        {
            if (_formerState != DayNightCycle.GetCurrentState())
            {
                _formerState = DayNightCycle.GetCurrentState();
                DayNightCycle.Instance.UpdateClockText(true);

                if (_formerState == 1)
                {
                    // This prevents the Witch from being detected because she's outside before anyone else
                    if (_localPM.role == "Witch")
                    {
                        _localPM.GoHome();
                    }
                    if (mostVotedPlayer != "")
                    {
                        if (PhotonNetwork.isMasterClient)
                        {
                            GameObject[] players = GameObject.FindGameObjectsWithTag("Player");
                            foreach (GameObject player in players)
                            {
                                if (player.name == mostVotedPlayer)
                                {
                                    player.GetComponent <PhotonView> ().RPC("KillPlayer", PhotonTargets.All, new object[] { });
                                }
                                else
                                {
                                    player.GetComponent <PhotonView> ().RPC("ResetPlayerVote", PhotonTargets.All, new object[] { });
                                }
                            }
                        }
                    }
                    else
                    {
                        _localPM.votedPlayer = "";
                    }
                    _localPM.gameObject.GetComponent <Light> ().enabled = false;
                    _minimapHidingSeal.SetActive(false);
                    countDay++;
                    if (!_localPM.isAlive || _localPM.role == "Werewolf")
                    {
                        ChatManager.Instance.SwitchVillagerToWerewolf(true);
                    }
                    else
                    {
                        ChatManager.Instance.SwitchVillagerToWerewolf(false);
                    }
                }
                else if (_formerState == 2)
                {
                    if (countDay > 1 && singleVotes.Find(v => v.reason == "Mayor") == null)
                    {
                        CheckOrSetMayor();
                    }

                    if (_localPM.isAlive)
                    {
                        resetVoteButton.SetActive(true);
                    }

                    _formerState = DayNightCycle.GetCurrentState();
                }
                else if (_formerState == 4)
                {
                    if (countDay == 1 && PhotonNetwork.isMasterClient)
                    {
                        mayorName = mostVotedPlayer;
                    }
                    else if (countDay > 1 && _localPM.gameObject.name == mostVotedPlayer)
                    {
                        _localPM.isAlive = false;
                    }

                    resetVoteButton.SetActive(false);
                }
                else if (_formerState == 5)
                {
                    _localPM.votedPlayer = "";
                    _localPM.gameObject.GetComponent <Light> ().enabled = true;
                    countNight++;
                    if (!_localPM.isAlive || _localPM.role == "Werewolf")
                    {
                        ChatManager.Instance.SwitchVillagerToWerewolf(true);
                    }
                    else
                    {
                        ChatManager.Instance.SwitchVillagerToWerewolf(false);
                    }

                    // Each night, the Seer can reveal someone's role
                    if (_localPM.role == "Seer")
                    {
                        _localPM.seerRevealingAvailable = true;
                    }

                    // The first night, all Werewolves discover each other
                    if (countNight == 1 && _localPM.role == "Werewolf")
                    {
                        GameObject[] players = GameObject.FindGameObjectsWithTag("Player");
                        foreach (GameObject player in players)
                        {
                            PlayerManager pM = player.GetComponent <PlayerManager> ();
                            if (pM.role == "Werewolf")
                            {
                                pM.isDiscovered = true;
                            }
                        }
                    }
                }
                else if (_formerState == 6)
                {
                    if (_localPM.isAlive && _localPM.role != "Seer")
                    {
                        _minimapHidingSeal.SetActive(true);
                    }
                }
                else if (_formerState == 7)
                {
                    _audioSource.PlayOneShot(_audioSource.clip);                      // wolf howling

                    // This prevents the Seer from being detected because she's outside when the Werewolves go out
                    if (_localPM.role == "Seer")
                    {
                        _localPM.GoHome();
                        _minimapHidingSeal.SetActive(true);
                    }
                    else if (_localPM.role == "Werewolf")
                    {
                        _minimapHidingSeal.SetActive(false);
                        if (_localPM.isAlive)
                        {
                            resetVoteButton.SetActive(true);
                        }
                    }

                    // During this phase, the Little Girl can spy the Werewolves by clicking the button "Spy"
                    if (_localPM.role == "LittleGirl" && _localPM.isAlive)
                    {
                        _spyButton.SetActive(true);
                    }
                }
                else if (_formerState == 8)
                {
                    // This prevents Werewolves from being detected because they are outside when the Witch go out
                    if (_localPM.role == "Werewolf")
                    {
                        _localPM.GoHome();
                        _minimapHidingSeal.SetActive(true);
                        resetVoteButton.SetActive(false);
                    }

                    if (_localPM.role == "LittleGirl")
                    {
                        _minimapHidingSeal.SetActive(true);
                        _localPM.littleGirlSpying = false;
                        _spyButton.SetActive(false);
                    }

                    if (_localPM.role == "Witch")
                    {
                        _minimapHidingSeal.SetActive(false);
                    }
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Searches through all the players, updates the voted player list and check if there is a most voted player.
        /// </summary>
        void RefreshVotedPlayers()
        {
            _votedPlayers.Clear();

            GameObject[] players = GameObject.FindGameObjectsWithTag("Player");
            _infoText.text = "";
            foreach (GameObject player in players)
            {
                PlayerManager pM = player.GetComponent <PlayerManager> ();
                if (pM.votedPlayer != "" && pM.isAlive)
                {
                    _votedPlayers.Add(pM.votedPlayer);
                    // Double vote of the Mayor doesn't count during the night if he's a Werewolf!
                    if (DayNightCycle.GetCurrentState() < 5 && player.name == mayorName)
                    {
                        _votedPlayers.Add(pM.votedPlayer);
                    }
                }
                if (player.name == mayorName)
                {
                    _infoText.text += "[M] ";
                }
                _infoText.text += PlayerManager.GetProperName(player.name) + " > " + PlayerManager.GetProperName(pM.votedPlayer) + "\n";
            }

            // This part checks if there is a most voted player
            if (_votedPlayers.Count == 0)
            {
                mostVotedPlayer = "";
            }
            else
            {
                int           previousCount    = _votedPlayers.FindAll(p => p == _votedPlayers [0]).Count;
                List <string> mostVotedPlayers = new List <string> ();
                mostVotedPlayers.Add(_votedPlayers [0]);

                for (int i = 1; i < _votedPlayers.Count; i++)
                {
                    int newCount = _votedPlayers.FindAll(p => p == _votedPlayers [i]).Count;
                    if (newCount > previousCount)
                    {
                        mostVotedPlayers.Remove(_votedPlayers [i - 1]);
                        mostVotedPlayers.Add(_votedPlayers [i]);
                        previousCount = newCount;
                    }
                    else if (newCount == previousCount && !mostVotedPlayers.Contains(_votedPlayers [i]))
                    {
                        mostVotedPlayers.Add(_votedPlayers [i]);
                    }
                }

                if (mostVotedPlayers.Count > 1)
                {
                    mostVotedPlayer = "";
                }
                else
                {
                    mostVotedPlayer = mostVotedPlayers [0];
                }
            }
        }