Ejemplo n.º 1
0
    //======================================
    //
    //	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;
        }
    }