//Following Routine follows player until input says stop or return home
    //input can also switch to hungry state
    void FollowingRoutine(Vector3 playerDir, float playerDistance)
    {
        transform.LookAt(player.transform.position);
        Vector3 f = transform.TransformDirection(playerDir);

        if (playerDistance < 55)
        {
            c.SimpleMove(Vector3.zero * 0);
        }
        else
        {
            c.Move(playerDir * followSpeed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.G))
        {
            print("pride stopped following");
            player.RemoveFollower();
            nprideState = prideState.IDLE;
        }
        if (Input.GetKey(KeyCode.H))
        {
            print("pride headed home");
            nprideState = prideState.HOMEWARD;
        }
        if (Input.GetKey(KeyCode.J))
        {
            print("pride went hunting");
            nprideState = prideState.HUNGRY;
        }
    }
    //Homeward Routine sends character home then switches to idle
    void HomewardRoutine()
    {
        GameObject[] homeObj;
        homeObj = GameObject.FindGameObjectsWithTag("Home");
        //gets current target position and distance
        Vector3 homeDir      = homeObj[0].transform.position - transform.position;
        float   homeDistance = Vector3.Distance(homeObj[0].transform.position, transform.position);

        transform.LookAt(homeObj[0].transform.position);


        if (homeObj.Length == 0)
        {
            Debug.Log("No game objects are tagged with 'Home'");
        }

        Vector3 f = transform.TransformDirection(homeDir);

        c.SimpleMove(f * seekSpeed);
        //c.Move(f * movementSpeed * Time.deltaTime);
        if (homeDistance < 20)
        {
            c.SimpleMove(Vector3.zero * 0);
            nprideState = prideState.IDLE;
        }
    }
Esempio n. 3
0
    private void OnControllerColliderHit(ControllerColliderHit other)
    {
        if (other.gameObject.CompareTag("Prey"))
        {
            {
                biteSound.Play();
                //Destroy(other.gameObject);
                currHunger  = Globals.full_hun;
                nprideState = prideState.IDLE;
                Debug.Log("hit prey");
                health_bar.ResetHunger();
            }
        }
        if (other.gameObject.CompareTag("Player"))
        {
            {
                touchingPlayer = true;

                //print("Follow that player");
            }
        }
        if (other.gameObject.CompareTag("Home"))
        {
            {
                Debug.Log("Home");

                health_bar.ResetEnergy();
            }
        }
    }
Esempio n. 4
0
    //Following Routine follows player until input says stop or return home
    //input can also switch to hungry state
    void FollowingRoutine(Vector3 playerDir, float playerDistance)
    {
        isFollowing = true;
        transform.LookAt(player.transform.position);
        Vector3 f = transform.TransformDirection(playerDir);

        if (!isHunting)
        {
            animState = 2;
            if (playerDistance > 25)
            {
                touchingPlayer = false;
            }
            if (touchingPlayer)
            {
                c.SimpleMove(Vector3.zero * 0);
                animState = 1;
            }
            else
            {
                c.Move(playerDir * followSpeed * Time.deltaTime);
                //animState = 2;
            }
        }
        if (Input.GetKey(KeyCode.F))
        {
            isHunting = false;
        }
        if (Input.GetKey(KeyCode.G))
        {
            print("pride stopped following");
            player.RemoveFollower();
            nprideState = prideState.IDLE;
            isFollowing = false;
        }
        else if (Input.GetKey(KeyCode.H))
        {
            print("pride headed home");
            nprideState = prideState.HOMEWARD;
            isFollowing = false;
        }
        else if (Input.GetKey(KeyCode.J))
        {
            touchingPlayer = false;
            print("pride went hunting");
            nprideState = prideState.HUNGRY;
            isFollowing = false;
        }
        else if (Input.GetKey(KeyCode.K))//makes pause
        {
            c.SimpleMove(Vector3.zero * 0);
            animState = 1;
            isHunting = true;
        }
    }
Esempio n. 5
0
    void HungryRoutine(float playerDistance)
    {
        //gets all prey tag objects in world

        var eatObjects = GameObject.FindGameObjectsWithTag("Prey");
        var eatCount   = eatObjects.Length;

        print(eatCount);
        if (eatCount > 0)
        {
            //sets prey obj target
            var     eatTarget = eatObjects[0];
            Vector3 eatDir    = eatTarget.transform.position - transform.position;

            float eatAngle = Vector3.Angle(eatDir, transform.forward);
            if (eatAngle < 150.0F)
            {
                transform.LookAt(eatTarget.transform.position);
                c.Move(eatDir.normalized * movementSpeed * Time.deltaTime);
                animState = 2;
            }
            else
            {
                print("Cannot find prey");
                //should wander to find it
            }
        }
        if (currHunger <= -Globals.full_hun)
        {
            //  nherdState = herdState.DEAD;
        }
        if (playerDistance < 20 && Input.GetKey(KeyCode.F))// | if (player_angle <= 50.0F)
        {
            SetTarget(target);
            nprideState = prideState.FOLLOWING;
            player.AddFollower(this);
            print("pride started following");
        }
        else if (Input.GetKey(KeyCode.H))
        {
            SetTarget(target);
            nprideState = prideState.HOMEWARD;
            print("pride headed home");
        }
    }
 private void OnControllerColliderHit(ControllerColliderHit other)
 {
     if (other.gameObject.CompareTag("Prey"))
     {
         {
             biteSound.Play();
             Destroy(other.gameObject);
             currHunger  = Globals.full_hun;
             nprideState = prideState.IDLE;
         }
     }
     if (other.gameObject.CompareTag("Player"))
     {
         {
             //print("Follow that player");
         }
     }
 }
 //Performs IDLE state routines
 // switches to follow state if player recruits
 //switches to hungry state if hunger low
 //switches to homeward state if player calls
 //else Wanders
 void IdleRoutine(float playerDistance)
 {
     if (playerDistance < 20 && Input.GetKey(KeyCode.F))// | if (player_angle <= 50.0F)
     {
         SetTarget(target);
         nprideState = prideState.FOLLOWING;
         player.AddFollower(this);
         print("pride started following");
     }
     else if (Input.GetKey(KeyCode.H))
     {
         SetTarget(target);
         nprideState = prideState.HOMEWARD;
         print("pride headed home");
     }
     else if (currHunger <= 0)
     {
         nprideState = prideState.HUNGRY;   // sent itself after food
     }
 }
Esempio n. 8
0
    // Update is called once per frame
    void Update()
    {
        currHunger--;
        if (health_bar.health <= 0)
        {
            isAlive             = false;
            animState           = 10;
            this.gameObject.tag = "Untagged";
            nprideState         = prideState.DEAD;
        }
        //gets current target position and distance
        Vector3 playerDir      = player.transform.position - transform.position;
        float   playerAngle    = Vector3.Angle(playerDir, transform.forward);
        float   playerDistance = Vector3.Distance(player.transform.position, transform.position);

        //Performs wandering routines
        if (isAlive)
        {
            if (!isWalking)
            {
                animState = 1;
            }
            if (isWandering == false)
            {
                StartCoroutine(Wander());
            }
            if (isRotatingRight == true)
            {
                transform.Rotate(0, rotSpeed * Time.deltaTime, 0);
                animState = 3;
            }
            if (isRotatingLeft == true)
            {
                transform.Rotate(0, -rotSpeed * Time.deltaTime, 0);
                animState = 4;
            }

            if (!isFollowing)
            {
                if (isWalking == true)
                {
                    Vector3 f = transform.TransformDirection(Vector3.forward);
                    c.SimpleMove(f * movementSpeed);
                    animState = 5;
                }
            }
        }



        //Performs stateful routines
        switch (nprideState)
        {
        case prideState.IDLE:
            IdleRoutine(playerDistance);
            break;

        case prideState.HUNGRY:
            HungryRoutine(playerDistance);
            break;

        case prideState.HOMEWARD:
            HomewardRoutine();
            break;

        case prideState.DEAD:
            // DeadRoutine();
            break;

        case prideState.FOLLOWING:
            FollowingRoutine(playerDir, playerDistance);
            break;
        }


        AnimationHandler(animState);

        //grounded handler
        if (c.isGrounded)
        {
            verticalSpeed = -c.stepOffset / Time.deltaTime;
        }
        else
        {
            verticalSpeed -= playerGravity * Time.deltaTime;
        }
        Vector3 m = new Vector3(0, verticalSpeed, 0);

        movement = movement + (m * Time.deltaTime * 2);
        c.Move(movement);
    }