Ejemplo n.º 1
0
    private void UpdateSurprisePhase()
    {
        // Manage Surprise Phase States
        switch (surprisePhase)
        {
        case SurprisePhase.MovingTowardsDoor:
            nav.destination = surpriseNode.position;

            if (nav.remainingDistance < nav.stoppingDistance)
            {
                surprisePhase = SurprisePhase.LookingAtPlayer;
            }
            break;

        case SurprisePhase.LookingAtPlayer:
            timeSpentLooking += Time.deltaTime;
            if (timeSpentLooking > waitingTimeBeforeOpeningWardrobe)
            {
                timeSpentLooking = 0;
                // Look at player
                transform.LookAt(mySenses.player.transform.position);     // Note: We need to smoothly look at player
                surprisePhase = SurprisePhase.DeterminingNextMove;
            }
            break;

        case SurprisePhase.DeterminingNextMove:
            // Check if monster was chasing the player
            if (aiStateBeforeSurprisePhase == AIState.Chasing)
            {
                // Open Doors
                OpenWardrobeDoors(true);

                //Game over
                Debug.Log("GAME OVER FROM CHASE");


                surprisePhase = SurprisePhase.None;
            }
            // Check if monster was Investigating or was coming from Alerted Investigation
            else if (aiStateBeforeSurprisePhase == AIState.Investigating ||
                     aiStateBeforeSurprisePhase == AIState.AlertedInvestigation)
            {
                surprisePhase = SurprisePhase.Randomizing;
            }
            break;

        case SurprisePhase.Randomizing:
            // Randomize
            rand = Random.Range(1, 101);

            // Proceed to final move
            surprisePhase = SurprisePhase.DeterminingFinalMove;
            break;

        case SurprisePhase.DeterminingFinalMove:

            if (rand <= percentageOfOpeningWardrobe)
            {
                // Open Doors
                OpenWardrobeDoors(false);

                // GameOver
                Debug.Log("GAME OVER FROM RANDOM");

                surprisePhase = SurprisePhase.None;
            }
            else
            {
                surprisePhase = SurprisePhase.None;

                mySenses.lastHeardPosition = mySenses.resetPosition;
                mySenses.lastSeenPosition  = mySenses.resetPosition;

                mySenses.lastSeenPositionRoom  = mySenses.resetRoomString;
                mySenses.lastHeardPositionRoom = mySenses.resetRoomString;

                idleTimer                 = 0f;
                investigateTimer          = 0f;
                alertedInvestigationTimer = 0f;
                restTimer                 = 0f;

                SetNormalSpeedInNavMeshAgent();

                // Return to patrolling state
                aiState = AIState.Patrolling;
            }
            break;

        case SurprisePhase.SurprisePlayer:
            nav.destination = surpriseNode.position;

            if (nav.remainingDistance < nav.stoppingDistance)
            {
                Debug.Log("Opened the Doors and Surprise the player");
                OpenWardrobeDoors(false);

                //Game over
                Debug.Log("GAME OVER BECAUSE MONSTER SAW YOU IN THE CLOSET");

                surprisePhase = SurprisePhase.None;
            }
            break;

        default:
            break;
        }
    }
Ejemplo n.º 2
0
    private void UpdateSurprisePhase()
    {
        // Manage Surprise Phase States
        switch (surprisePhase)
        {
            case SurprisePhase.MovingTowardsDoor:
                nav.destination = surpriseNode.position;

                if (nav.remainingDistance < nav.stoppingDistance)
                {
                    surprisePhase = SurprisePhase.LookingAtPlayer;
                }
                break;

            case SurprisePhase.LookingAtPlayer:
                timeSpentLooking += Time.deltaTime;
                if (timeSpentLooking > waitingTimeBeforeOpeningWardrobe)
                {
                    timeSpentLooking = 0;
                    // Look at player
                    transform.LookAt(mySenses.player.transform.position); // Note: We need to smoothly look at player
                    surprisePhase = SurprisePhase.DeterminingNextMove;
                }
                break;

            case SurprisePhase.DeterminingNextMove:
                // Check if monster was chasing the player
                if (aiStateBeforeSurprisePhase == AIState.Chasing)
                {
                    // Open Doors
                    OpenWardrobeDoors(true);

                    //Game over
                    Debug.Log("GAME OVER FROM CHASE");


                    surprisePhase = SurprisePhase.None;
                }
                // Check if monster was Investigating or was coming from Alerted Investigation
                else if (aiStateBeforeSurprisePhase == AIState.Investigating ||
                         aiStateBeforeSurprisePhase == AIState.AlertedInvestigation)
                {
                    surprisePhase = SurprisePhase.Randomizing;
                }
                break;

            case SurprisePhase.Randomizing:
                // Randomize
                rand = Random.Range(1, 101);

                // Proceed to final move 
                surprisePhase = SurprisePhase.DeterminingFinalMove;
                break;

            case SurprisePhase.DeterminingFinalMove:

                if (rand <= percentageOfOpeningWardrobe)
                {
                    // Open Doors
                    OpenWardrobeDoors(false);

                    // GameOver
                    Debug.Log("GAME OVER FROM RANDOM");

                    surprisePhase = SurprisePhase.None;
                }
                else
                {
                    surprisePhase = SurprisePhase.None;

                    mySenses.lastHeardPosition = mySenses.resetPosition;
                    mySenses.lastSeenPosition = mySenses.resetPosition;

                    mySenses.lastSeenPositionRoom = mySenses.resetRoomString;
                    mySenses.lastHeardPositionRoom = mySenses.resetRoomString;

                    idleTimer = 0f;
                    investigateTimer = 0f;
                    alertedInvestigationTimer = 0f;
                    restTimer = 0f;

                    SetNormalSpeedInNavMeshAgent();

                    // Return to patrolling state
                    aiState = AIState.Patrolling;
                }
                break;

            case SurprisePhase.SurprisePlayer:
                nav.destination = surpriseNode.position;

                if (nav.remainingDistance < nav.stoppingDistance)
                {
                    Debug.Log("Opened the Doors and Surprise the player");
                    OpenWardrobeDoors(false);

                    //Game over
                    Debug.Log("GAME OVER BECAUSE MONSTER SAW YOU IN THE CLOSET");

                    surprisePhase = SurprisePhase.None;
                }
                break;

            default:
                break;
        }

    }