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; } }
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; } }