/// <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); } } } }
/// <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]; } } }