コード例 #1
0
ファイル: NPC.cs プロジェクト: ndbookout/MadMansion
    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;
    }
コード例 #2
0
ファイル: NPC.cs プロジェクト: ndbookout/MadMansion
 void AcquireTarget()
 {
     if (currentRoomTargetList.Count > 0)
     {
         target = currentRoomTargetList[Random.Range(0, currentRoomTargetList.Count)].transform;
         Travel(target);
     }
     else
     {
         state = possibleStates.findingRoom;
     }
 }
コード例 #3
0
ファイル: NPC.cs プロジェクト: ndbookout/MadMansion
    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();
        }
    }
コード例 #4
0
ファイル: NPC.cs プロジェクト: ndbookout/MadMansion
    IEnumerator WaitForDoorToOpen()
    {
        state = possibleStates.waiting;

        yield return new WaitForSeconds(1f);

        state = possibleStates.traveling;
    }
コード例 #5
0
ファイル: NPC.cs プロジェクト: ndbookout/MadMansion
    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;
    }