//====================================== // // Update() - SET PARAMS PRIOR TO DRAW // // This function is where any params // get changed prior to the draw code // being called; all the param changes // must happen here because the draw // code gets called twice (layout+render), // and therefore must not change params // //====================================== void Update() { // clean handling for modifier keys DebounceKeyboardInput(); // debug option (enabled at top of file) if (skipStraightToLevel == true) { //SetGuiState("guiStateStartApp1"); selectedPuma = 0; levelManager.SetSelectedPuma(selectedPuma); infoPanelVisible = false; if (++skipStraightToLevelFrameCount == 10) { SetGuiState("guiStateGameplay"); levelManager.SetGameState("gameStateLeavingGui"); skipStraightToLevel = false; } } // detect caught condition if (levelManager.IsCaughtState() == true && guiState != "guiStateFeeding1" && guiState != "guiStateFeeding2") { SetGuiState("guiStateFeeding1"); } //====================================== // GUI STATE MACHINE // // Processing for GUI state machine //====================================== switch (guiState) { //--------------------- // StartApp States // // game launch //--------------------- case "guiStateStartApp1": break; case "guiStateStartApp2": // fade-out of popup panel guiStateDuration = 1.1f; if (Time.time > guiStateStartTime + guiStateDuration) { infoPanel.ClearIntroFlag(); SetGuiState("guiStateEnteringOverlay"); } break; //----------------------- // Overlay States // // entering, viewing and // leaving the main GUI //----------------------- case "guiStateEnteringOverlay": // fade-in of overlay panel guiStateDuration = 1.6f; FadeInOpacityLogarithmic(); CheckForKeyboardEscapeFromOverlay(); CheckForKeyboardSelectionOfPuma(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateOverlay"); } break; case "guiStateOverlay": // ongoing overlay state CheckForKeyboardEscapeFromOverlay(); CheckForKeyboardSelectionOfPuma(); break; case "guiStateLeavingOverlay": // fade-out of overlay panel guiStateDuration = 1f; FadeOutOpacityLogarithmic(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateEnteringGameplay1"); } break; //----------------------- // Gameplay States // // entering, viewing and // leaving the 3D world //----------------------- case "guiStateEnteringGameplay1": // no GUI during initial camera zoom guiStateDuration = 1.9f; if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateEnteringGameplay2"); } break; case "guiStateEnteringGameplay2": // fade-in of movement controls guiStateDuration = 1.8f; FadeInOpacityLogarithmic(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateEnteringGameplay3"); } break; case "guiStateEnteringGameplay3": // fade-in of position indicators guiStateDuration = 0.7f; FadeInOpacityLogarithmic(); CheckForKeyboardEscapeFromGameplay(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateEnteringGameplay4"); } break; case "guiStateEnteringGameplay4": // brief pause guiStateDuration = 0.2f; CheckForKeyboardEscapeFromGameplay(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateEnteringGameplay5"); } break; case "guiStateEnteringGameplay5": // fade-in of status displays guiStateDuration = 1.2f; FadeInOpacityLinear(); CheckForKeyboardEscapeFromGameplay(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateGameplay"); } break; case "guiStateGameplay": // ongoing game-play state CheckForKeyboardEscapeFromGameplay(); break; case "guiStateLeavingGameplay": // fade-out of game-play controls guiStateDuration = 0.7f; FadeOutOpacityLinear(); CheckForKeyboardSelectionOfPuma(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateEnteringOverlay"); if (overlayPanel.GetCurrentScreen() == 3) { // return to select screen rather than quit screen overlayPanel.SetCurrentScreen(0); } if (scoringSystem.GetPumaHealth(selectedPuma) <= 0f) { // puma has died selectedPuma = -1; overlayPanel.SetCurrentScreen(0); } } break; //------------------------------ // Feeding States // // entering, viewing and // leaving the feeding display //------------------------------ case "guiStateFeeding1": // fade-out of game-play controls guiStateDuration = 1f; FadeOutOpacityLinear(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateFeeding2"); } break; case "guiStateFeeding2": // pause during attack on deer guiStateDuration = 2f; if (Time.time - guiStateStartTime > guiStateDuration) { SetGuiState("guiStateFeeding3"); } break; case "guiStateFeeding3": // fade-in of feeding display main panel guiStateDuration = 1f; FadeInOpacityLinear(); if (SelectedPumaIsFullHealth() == false) { CheckForKeyboardEscapeFromFeeding(); } if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateFeeding4"); } break; case "guiStateFeeding4": // brief pause guiStateDuration = 1f; if (SelectedPumaIsFullHealth() == false) { CheckForKeyboardEscapeFromFeeding(); } if (Time.time > guiStateStartTime + guiStateDuration) { if (SelectedPumaIsFullHealth() == true) { SetGuiState("guiStatePumaWins1"); } else { SetGuiState("guiStateFeeding5"); } } break; case "guiStateFeeding5": // fade-in of feeding display 'ok' button guiStateDuration = 1f; FadeInOpacityLinear(); CheckForKeyboardEscapeFromFeeding(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateFeeding6"); } break; case "guiStateFeeding6": // ongoing view of feeding display CheckForKeyboardEscapeFromFeeding(); break; case "guiStateFeeding7": // fade-out of feeding display guiStateDuration = 2f; FadeOutOpacityLinear(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateFeeding8"); } break; case "guiStateFeeding8": // fade-in of movement controls guiStateDuration = 0.9f; FadeInOpacityLinear(); CheckForKeyboardEscapeFromGameplay(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateFeeding9"); } break; case "guiStateFeeding9": // fade-in of position indicators guiStateDuration = 1f; FadeInOpacityLogarithmic(); CheckForKeyboardEscapeFromGameplay(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateFeeding10"); } break; case "guiStateFeeding10": // brief pause guiStateDuration = 0.1f; CheckForKeyboardEscapeFromGameplay(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateFeeding11"); } break; case "guiStateFeeding11": // fade-in of status indicators guiStateDuration = 0.7f; FadeInOpacityLinear(); CheckForKeyboardEscapeFromGameplay(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateGameplay"); } break; //------------------------------ // Puma Wins // // if during feeding // puma health reaches 100% //------------------------------ case "guiStatePumaWins1": // fade-in of puma wins display guiStateDuration = 2f; FadeInOpacityLinear(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStatePumaWins2"); } break; case "guiStatePumaWins2": // brief pause guiStateDuration = 1f; CheckForKeyboardEscapeFromPumaWins(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStatePumaWins3"); } break; case "guiStatePumaWins3": // fade-in of puma wins 'ok' button guiStateDuration = 1f; FadeInOpacityLinear(); CheckForKeyboardEscapeFromPumaWins(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStatePumaWins4"); } break; case "guiStatePumaWins4": // ongoing view of puma wins display CheckForKeyboardEscapeFromPumaWins(); break; case "guiStateLeavingPumaWins": // fade-out of puma wins display guiStateDuration = 0.7f; FadeOutOpacityLinear(); CheckForKeyboardSelectionOfPuma(); if (Time.time > guiStateStartTime + guiStateDuration) { SetGuiState("guiStateEnteringOverlay"); selectedPuma = -1; overlayPanel.SetCurrentScreen(0); } break; //------------------ // Error Check //------------------ default: Debug.Log("ERROR - GuiManager.Update() got bad state: " + guiState); break; } }