public void GetScared(float fearIncrease) { if (humanAudio.isPlaying != true) { if (fear < 8) humanAudio.PlayOneShot(scream1); else if (fear >= 8) humanAudio.PlayOneShot(scream2); } this.GetComponent<Animator>().SetBool("isScared", true); fear += fearIncrease; if (fear > 10) { fear = 10; } state = possibleStates.scared; }
void AcquireTarget() { if (currentRoomTargetList.Count > 0) { target = currentRoomTargetList[Random.Range(0, currentRoomTargetList.Count)].transform; Travel(target); } else { state = possibleStates.findingRoom; } }
void Update() { if (state == possibleStates.findingRoom) { this.gameObject.GetComponent<Animator>().SetBool("isMoving", true); state = possibleStates.traveling; FindNewRoom(); } else if (state == possibleStates.investigating) { state = possibleStates.searchingRoom; AcquireTarget(); } else if (state == possibleStates.searchingRoom && (this.transform.position - target.transform.position).magnitude < 3f) { //run search target method here, if tagged bone, destroy object and add to an inventory state = possibleStates.investigating; this.gameObject.GetComponent<Animator>().SetBool("isSearching", true); StartCoroutine(SearchingObjectInRoom()); currentRoomTargetList.Remove(target.gameObject); } else if (state == possibleStates.traveling && (this.transform.position - target.transform.position).magnitude < 2f) { if (location == possibleLocations.ElseWhere) { currentWingRoomList.Remove(target.gameObject); state = possibleStates.investigating; } else { state = possibleStates.findingRoom; } } else if (state == possibleStates.traveling) { RaycastHit doorHit; if (Physics.Raycast(transform.position + new Vector3(0, 1, 0), transform.forward, out doorHit, 2f, 1 << 12)) { doorHit.collider.transform.GetComponent<DoorController>().ChangeDoorState(); StartCoroutine(WaitForDoorToOpen()); } } else if (state == possibleStates.scared && (this.transform.position - entrance.position).magnitude < 3) { SceneManager.LoadScene(2); Debug.Log("Your NPC got too scared and ran"); } else if (state == possibleStates.scared) { state = possibleStates.running; RunScared(); } }
IEnumerator WaitForDoorToOpen() { state = possibleStates.waiting; yield return new WaitForSeconds(1f); state = possibleStates.traveling; }
IEnumerator RunningScared(Transform entranceDoor) { agent.SetDestination(entranceDoor.position); agent.speed = 10; yield return new WaitForSeconds(fear); agent.speed = 3.5f; this.gameObject.GetComponent<Animator>().SetBool("isScared", false); state = possibleStates.findingRoom; }