Example #1
0
    //Hungry Routine seeks out grass objects and moves to eat them
    // not able to flee while eating
    // if cannot find food, enters DEAD state
    void HungryRoutine()
    {
        //gets all grass tag objects in world
        var eatObjects = GameObject.FindGameObjectsWithTag("Grass");
        var eatCount   = eatObjects.Length;

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

            //gets angle to grass obj
            float eatAngle = Vector3.Angle(eatDir, transform.forward);
            if (eatAngle < 350.0F)
            {
                transform.LookAt(eatTarget.transform.position);
                c.Move(eatDir.normalized * seekSpeed * Time.deltaTime);
                nherdState = herdState.IDLE;
            }
            else
            {
                print("Cannot find grass");
                //should wander to find it
            }
        }
        if (currHunger <= -Globals.full_hun)
        {
            //  nherdState = herdState.DEAD;
        }
    }
Example #2
0
 private void OnTriggerEnter(Collider other)
 {
     if (other.CompareTag("Grass"))
     {
         EatGrass(other);
     }
     if (other.CompareTag("VisionCone"))
     {
         print("Smelled predator");
         nherdState = herdState.FLEEING;
     }
 }
Example #3
0
 //Performs IDLE state routines
 // switches to flee state if found player
 //switches to eating state if hungry
 //else Wanders
 void IdleRoutine(float playerDistance)
 {
     if (playerDistance < 25)// | if (player_angle <= 50.0F)
     {
         SetTarget(target);
         nherdState = herdState.FLEEING;
     }
     else if (currHunger <= 0)
     {
         // nherdState = herdState.HUNGRY;   // temporary since no grass yet
     }
 }
    //Flee Routine runs from player or target
    //nneds to rotate away and run away quickly
    void FleeRoutine(float playerDistance)
    {
        Vector3 f = transform.TransformDirection(Vector3.forward);

        c.SimpleMove(f * fleeSpeed);
        //c.Move(transform.forward * fleeSpeed * Time.deltaTime);
        if (playerDistance > 40)
        {
            SetTarget(null);
            nherdState = herdState.IDLE;
        }
    }
Example #5
0
    private void OnControllerColliderHit(ControllerColliderHit other)
    {
        if (other.gameObject.CompareTag("Predator"))
        {
            {
                print("Hit by predator");
                nherdState = herdState.DEAD;
                biteSound.Play();

                //Destroy(this.gameObject);
            }
        }
        if (other.gameObject.CompareTag("Player"))
        {
            {
                print("Hit by player");
                nherdState = herdState.DEAD;
                biteSound.Play();

                // Destroy(this.gameObject);
            }
        }
    }
    void Update()
    {
        hunger--;
        Vector3 forward      = transform.forward;
        Vector3 playerDir    = player.transform.position - transform.position;
        float   player_angle = Vector3.Angle(playerDir, forward);
        var     distance     = Vector3.Distance(player.transform.position, transform.position);

        //  print(distance);

        if (isWandering == false)
        {
            StartCoroutine(Wander());
        }
        if (isRotatingRight == true)
        {
            transform.Rotate(transform.up * Time.deltaTime * rotSpeed);
        }
        if (isRotatingLeft == true)
        {
            transform.Rotate(transform.up * Time.deltaTime * -rotSpeed);
        }
        if (isWalking == true)
        {
            transform.position += transform.forward * movementSpeed * Time.deltaTime;
        }


        switch (nherdState)
        {
        case herdState.IDLE:
            //Look for player
            eating = 1000;     //restore eating timer
            if (distance < 20) //if (player_angle <= 50.0F)
            {
                //if player is found
                SetTarget(target);
                nherdState = herdState.FLEEING;

                print("! --------------- ZEBRA FLEE");
            }

            //Check hunger
            //if hunger low, look for grass
            else if (hunger <= 0)
            {
                //print("Hungry");
                var     objects     = GameObject.FindGameObjectsWithTag("Grass");
                var     objectCount = objects.Length;
                var     obj         = objects[0];
                Vector3 grassDir    = obj.transform.position - transform.position;
                float   grass_angle = Vector3.Angle(grassDir, forward);
                if (grass_angle < 300.0F)
                {
                    transform.LookAt(obj.transform.position, Vector3.zero);
                    transform.position = Vector3.MoveTowards(transform.position, obj.transform.position, seekSpeed);
                    //  nherdState = herdState.EATING;
                    print("! --------------- ZEBRA EAT");
                }
                else
                {
                    print("Cannot find grass");
                }
            }
            break;

        case herdState.FLEEING:
            transform.position += transform.forward * movementSpeed * Time.deltaTime;
            if (distance > 40)
            {
                SetTarget(null);
                nherdState = herdState.IDLE;
                print("! --------------- ZEBRA IDLE");
            }
            break;

            /*  case herdState.EATING:
             *    eating--;
             *    if (eating <= 0)
             *    {
             *        nherdState = herdState.IDLE;
             *        print("! --------------- ZEBRA IDLE");
             *    }
             *    break;
             *    //etc.*/
        }
    }