// Use this for initialization void Start() { if (!curInput || !curPlayer || !curPowerup) { GameObject player = FindObjectOfType <TurnManager>().GetCurrentPlayer(); curInput = player.GetComponent <PlayerInput>(); curPlayer = player.GetComponent <PlayerControl>(); curPowerup = player.GetComponent <PlayerPowerUpController>(); } }
IEnumerator CheckTurnSwitch() { while (true) { if (gameObject.activeInHierarchy) { PlayerControl curPlayerControl = players[curPlayerIndex].GetComponent <PlayerControl>(); Rigidbody curPlayerRB = players[curPlayerIndex].GetComponent <Rigidbody>(); PlayerInput curPlayerInput = players[curPlayerIndex].GetComponent <PlayerInput>(); PlayerPowerUpController curPlayerPowerUp = players[curPlayerIndex].GetComponent <PlayerPowerUpController>(); PlayerPoints curPlayerPoints = players[curPlayerIndex].GetComponent <PlayerPoints>(); if (turnsSinceWin > turnsAfterWinUntilEndGame || AllPlayersWon()) { // End the game! Debug.Log("GAME HAS ENDED!"); SceneManager.LoadScene("GameEndScreen"); } if (curPlayerControl.getPossibleTurnOver() && (curPlayerRB.velocity.magnitude < minimumVelocity || !curPlayerPoints.playerPlaying)) { StartCoroutine(switchTurn(curPlayerControl, curPlayerRB, curPlayerInput, curPlayerPowerUp, curPlayerPoints)); } else { confirming = false; // The player is moving, so we are no longer confirmed. } if (AllPlayersWon()) { // End the game! } yield return(new WaitForSeconds(WAIT_TIME)); } //yield return new WaitForSeconds(WAIT_TIME); } }
IEnumerator switchTurn(PlayerControl curPlayerControl, Rigidbody curPlayerRB, PlayerInput curPlayerInput, PlayerPowerUpController curPlayerPowerUp, PlayerPoints curPlayerPoints) { if (!confirming && curPlayerPoints.playerPlaying) { confirming = true; // We are currently confirming! Debug.Log("Confirming!"); yield break; } // If we make it here, the player has been stationary for WAIT_TIME seconds or they've won! Debug.Log("Confirmed!"); curPlayerRB.velocity = Vector3.zero; curPlayerPowerUp.EndTurn(); curPlayerInput.enabled = false; curPlayerControl.enabled = false; curPlayerControl.endTurn(); curPlayerIndex = (curPlayerIndex + 1) % players.Length; Camera.main.GetComponent <CameraMan>().ballLeaveFlight(); // There might be a better way to do this... foreach (GameObject powerUp in powerUps) { powerUp.GetComponentInChildren <PowerUpManager>().Respawn(players.Length); } int playersWonCounter = 0; while (!players[curPlayerIndex].GetComponent <PlayerPoints>().playerPlaying) { printPlayersWon(); Debug.Log("Skipping turns! Current player is: " + curPlayerIndex); Debug.Log("First Winning Player was: " + firstWinningPlayerIndex); if (curPlayerIndex == firstWinningPlayerIndex) { turnsSinceWin++; print("Turns Since Win: " + turnsSinceWin); } playersWon[curPlayerIndex] = true; playersWonCounter++; curPlayerIndex = (curPlayerIndex + 1) % players.Length; printPlayersWon(); if (playersWonCounter >= (players.Length - 1)) { Debug.Log("GAME HAS ENDED!"); SceneManager.LoadScene("GameEndScreen"); yield break; } } curPlayerControl = players[curPlayerIndex].GetComponent <PlayerControl>(); curPlayerRB = players[curPlayerIndex].GetComponent <Rigidbody>(); curPlayerInput = players[curPlayerIndex].GetComponent <PlayerInput>(); curPlayerPowerUp = players[curPlayerIndex].GetComponent <PlayerPowerUpController>(); Camera.main.GetComponent <CameraMan>().target = players[curPlayerIndex].transform; curPlayerInput.enabled = true; curPlayerControl.enabled = true; curPlayerPowerUp.UpdateUI(); inputController.curInput = curPlayerInput; inputController.curPlayer = curPlayerControl; inputController.curPowerup = curPlayerPowerUp; players[curPlayerIndex].GetComponent <Indicator>().setActive(true); confirming = false; }