public void GameOver(GameOverType gameOverType, bool waitForFrame) { if (!gameActive && waitForFrame) { return; } gameActive = false; if (waitForFrame) { // mecanim doesn't trigger the event if we wait until the frame is over playerController.GameOver(gameOverType); StartCoroutine(WaitForFrameGameOver(gameOverType)); } else { inputController.GameOver(); // Mission Manager's gameOver must be called before the Data Manager's gameOver so the Data Manager can grab the // score multiplier from the Mission Manager to determine the final score missionManager.GameOver(); coinGUICollection.GameOver(); // Only call game over on the DataManager if there is no chance a revive is going to happen. We don't want to forget // the values stored in the data manager if a revive does happen if (!allowRevives || !dataManager.CanRevive() || !dataManager.CanPurchaseRevive()) { dataManager.GameOver(); } if (playerController.enabled) { playerController.GameOver(gameOverType); } if (chaseController != null) { chaseController.GameOver(gameOverType); } audioManager.PlayBackgroundMusic(false); if (gameOverType != GameOverType.Quit) { audioManager.PlaySoundEffect(SoundEffects.GameOverSoundEffect); } guiManager.GameOver(); cameraController.GameOver(gameOverType); } }
public void ShowGUI(GUIState state) { screenTouch.SetActive(false); switch (state) { case GUIState.InGame: screenTouch.SetActive(true); if (tutorialShown) { tutorialPanel.SetActive(true); } #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) if (useuGUI) { inGameActivePowerUpImage.gameObject.SetActive(powerUpActive); EventSystem.current.SetSelectedGameObject(null); } else { #endif #if COMPILE_NGUI inGameActivePowerUp.gameObject.SetActive(powerUpActive); #endif #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) } #endif break; case GUIState.EndGame: #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) if (useuGUI) { endGameScoreText.text = dataManager.GetScore(true).ToString(); endGameCoinsText.text = dataManager.GetLevelCoins(true).ToString(); endGameMultiplierText.text = string.Format("{0}x", missionManager.GetScoreMultiplier()); } else { #endif #if COMPILE_NGUI endGameScore.text = dataManager.GetScore(true).ToString(); endGameCoins.text = dataManager.GetLevelCoins(true).ToString(); endGameMultiplier.text = string.Format("{0}x", missionManager.GetScoreMultiplier()); #endif #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) } #endif // only need to show the animation if we are coming from in game or revive if (guiState == GUIState.InGame || guiState == GUIState.Revive) { endGamePanel.SetActive(true); endGamePlayAnimation.enabled = true; endGamePlayAnimation.Stop(); #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) if (useuGUI) { endGamePlayAnimation[endGamePlayAnimationName].speed = -1; endGamePlayAnimation[endGamePlayAnimationName].time = endGamePlayAnimation[endGamePlayAnimationName].length; } else { #endif #if COMPILE_NGUI endGamePlayAnimation[endGamePlayAnimationName].speed = 1; #endif #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) } #endif endGamePlayAnimation.Play(endGamePlayAnimationName); for (int i = 0; i < inGamePlayAnimation.Length; ++i) { inGamePlayAnimation[i].Stop(); inGamePlayAnimation[i][inGamePlayAnimationName].speed = 1; inGamePlayAnimation[i].enabled = true; inGamePlayAnimation[i].Play(inGamePlayAnimationName); } #if COMPILE_NGUI // NGUI 2 uses UIButtonPlayAnimation. NGUI 3 uses UIPlayAnimation. When the NGUI 3 version of the play animation activates it automatically disables // the animation component. We don't want that so we are just going to disable the NGUI component. System.Type playAnimationType = System.Type.GetType("UIPlayAnimation, Assembly-CSharp"); if (playAnimationType != null) { var playAnimations = endGamePanel.GetComponentsInChildren(playAnimationType); for (int i = 0; i < playAnimations.Length; ++i) { ((MonoBehaviour)playAnimations[i]).enabled = false; } // enable the buttons again after the animation is done playing StartCoroutine(EnableComponents(endGamePlayAnimation[endGamePlayAnimationName].length, playAnimations)); } #endif } break; case GUIState.Store: // go back to the correct menu that we came from if (guiState == GUIState.MainMenu) { storeBackToEndGameButton.SetActive(false); storeBackToMainMenuButton.SetActive(true); } else if (guiState == GUIState.EndGame) { storeBackToMainMenuButton.SetActive(false); storeBackToEndGameButton.SetActive(true); } storeSelectingPowerUp = false; storeItemIndex = dataManager.GetSelectedCharacter(); RefreshStoreGUI(); RefreshStoreItem(); break; case GUIState.Pause: if (tutorialShown) { tutorialPanel.SetActive(false); } if (inGameMissionsPanel.activeSelf) { // speed up the animation so the panel will disappear quicker inGameMissionsPlayAnimation[inGameMissionsPlayAnimationName].speed = 2; } #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) if (useuGUI) { pauseScoreText.text = dataManager.GetScore().ToString(); pauseCoinsText.text = (dataManager.GetLevelCoins(true) + coinGUICollection.GetAnimatingCoins()).ToString(); pauseSecondaryCoinsText.text = dataManager.GetLevelCoins(false).ToString(); } else { #endif #if COMPILE_NGUI pauseScore.text = dataManager.GetScore().ToString(); pauseCoins.text = (dataManager.GetLevelCoins(true) + coinGUICollection.GetAnimatingCoins()).ToString(); pauseSecondaryCoins.text = dataManager.GetLevelCoins(false).ToString(); #endif #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) } #endif break; case GUIState.Stats: #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) if (useuGUI) { statsHighScoreText.text = dataManager.GetHighScore().ToString(); statsCoinsText.text = dataManager.GetTotalCoins(true).ToString(); statsSecondaryCoinsText.text = dataManager.GetTotalCoins(false).ToString(); statsPlayCountText.text = dataManager.GetPlayCount().ToString(); } else { #endif #if COMPILE_NGUI statsHighScore.text = dataManager.GetHighScore().ToString(); statsCoins.text = dataManager.GetTotalCoins(true).ToString(); statsSecondaryCoins.text = dataManager.GetTotalCoins(false).ToString(); statsPlayCount.text = dataManager.GetPlayCount().ToString(); #endif #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) } #endif break; case GUIState.Missions: if (guiState == GUIState.MainMenu) { missionsBackToEndGameButton.SetActive(false); missionsBackToMainMenuButton.SetActive(true); } else // coming from GUIState.EndGame { missionsBackToMainMenuButton.SetActive(false); missionsBackToEndGameButton.SetActive(true); } #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) if (useuGUI) { missionsScoreMultiplierText.text = string.Format("{0}x", missionManager.GetScoreMultiplier()); missionsActiveMission1Text.text = dataManager.GetMissionDescription(missionManager.GetMission(0)); missionsActiveMission2Text.text = dataManager.GetMissionDescription(missionManager.GetMission(1)); missionsActiveMission3Text.text = dataManager.GetMissionDescription(missionManager.GetMission(2)); } else { #endif #if COMPILE_NGUI missionsScoreMultiplier.text = string.Format("{0}x", missionManager.GetScoreMultiplier()); missionsActiveMission1.text = dataManager.GetMissionDescription(missionManager.GetMission(0)); missionsActiveMission2.text = dataManager.GetMissionDescription(missionManager.GetMission(1)); missionsActiveMission3.text = dataManager.GetMissionDescription(missionManager.GetMission(2)); #endif #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) } #endif break; case GUIState.Revive: revivePanel.SetActive(true); #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) if (useuGUI) { reviveDescriptionText.text = "Do you want to use " + dataManager.GetReviveCost() + " diamonds to revive?\n\nYou have " + (dataManager.GetTotalCoins(false) + dataManager.GetLevelCoins(false)).ToString() + " diamonds."; } else { #endif #if COMPILE_NGUI reviveDescription.text = "Do you want to use " + dataManager.GetReviveCost() + " diamonds to revive?\n\nYou have " + (dataManager.GetTotalCoins(false) + dataManager.GetLevelCoins(false)).ToString() + " diamonds."; // Deactivate the yes animation if the player doesn't have enough coins. NGUI3 automatically starts with it deactivated if (!dataManager.CanPurchaseRevive()) { System.Type animationType = System.Type.GetType("UIButtonPlayAnimation, Assembly-CSharp"); if (animationType != null) { var playAnimation = reviveYesButton.GetComponent(animationType); ((MonoBehaviour)playAnimation).enabled = false; } } #endif #if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5) } #endif revivePlayAnimation.enabled = true; revivePlayAnimation.Stop(); revivePlayAnimation[revivePlayAnimationName].speed = 1; revivePlayAnimation.Play(revivePlayAnimationName); break; } guiState = state; }