Beispiel #1
0
 public override void UpdateBehavior(AnimalBehaviorManager manager)
 {
     //if my path is complete pop the behavior
     if (PathComplete(manager))
     {
         //did i just reach the den?
         if (target == manager.Den)
         {
             //was the hunter chasing me?
             GameObject hunter = GameObject.FindGameObjectWithTag("Hunter");
             if (hunter.GetComponent <HunterWander>().target == gameObject)
             {
                 //tell the hunter to start wandering again
                 hunter.GetComponent <HunterWander>().enabled = true;
                 hunter.GetComponent <HunterChase>().enabled  = false;
             }
             //reached den, despawning
             Debug.Log("animal reached den and despawned");
             Destroy(gameObject);
         }
         //CONSTRUCTION ZONE
         //pop the current walk to target if the target is what we just reached
         else if (target == manager.walkToTargets.Peek())
         {
             manager.walkToTargets.Pop();
         }
         //END CONSTRUCTION ZONE
         manager.behaviors.Pop();
     }
 }
 private void OnTriggerEnter(Collider other)
 {
     //did an animal just walk into the area?
     if (other.gameObject.tag == "Animal")
     {
         //is the animal's walkto target this gameobject's position?
         AnimalBehaviorManager manager = other.gameObject.GetComponent <AnimalBehaviorManager>();
         if (manager.walkTo.target == gameObject && manager.behaviors.Count > 0)
         {
             //is the animal's current behavior walkto?
             if (manager.behaviors.Peek() == manager.walkTo)
             {
                 //if the hunter was targeting the animal have him wander again
                 GameObject hunter = GameObject.FindGameObjectWithTag("Hunter");
                 if (hunter.GetComponent <HunterChase>().chaseTarget == other.gameObject)
                 {
                     hunter.GetComponent <HunterWander>().enabled = true;
                     hunter.GetComponent <HunterChase>().enabled  = false;
                 }
                 //animal arrived, destroy animal
                 Destroy(other.gameObject);
             }
         }
     }
 }
 private void TriggerCheck(Collider other)
 {
     //did an animal just walk into the area?
     if (other.gameObject.tag == "Animal")
     {
         //is the animal's walkto target this area?
         AnimalBehaviorManager manager = other.gameObject.GetComponent <AnimalBehaviorManager>();
         if (manager.walkTo.target == gameObject && manager.behaviors.Count > 0)
         {
             //is the animal's current behavior walkto?
             if (manager.behaviors.Peek() == manager.walkTo)
             {
                 //animal arrived and behavior poped
                 manager.behaviors.Pop();
                 //do I need to pop a walk to target too?
                 if (manager.walkToTargets.Count > 0)
                 {
                     if (manager.walkToTargets.Peek() == gameObject)
                     {
                         manager.walkToTargets.Pop();
                     }
                 }
             }
         }
     }
 }
    public override void DoBehavior(AnimalBehaviorManager manager)
    {
        GameObject test = target;

        if (test != null)
        {
            //if (target == null)
            //{
            //    Debug.Log("NULL BITCH");
            //}
            //update distance to target and timer on how offten the animal can attack
            UpdateDistance();
            UpdateAttackSpeedTimer();
            //is the animal in range and ready to attack?
            if (distance <= AttackDistance && AttackSpeedTimer >= AttackSpeed)
            {
                AttackSpeedTimer = 0;
                //deal damage if in range
                //Debug.Log("AGGRESSIVE ANIMAL ATTACKED " + target.name + " FOR " + AttackDamage + " DAMAGE\nHUNTER HP NOW " + target.GetComponent<Health>().CurrentHP);
                //did I just kill the thing I was chasing?
                if (target.GetComponent <Health>().CurrentHP - AttackDamage <= 0)
                {
                    killedTarget = true;
                    if (target.tag == "Animal")
                    {
                        killedAnimal = true;
                    }
                }
                target.GetComponent <Health>().IncrementHP(-AttackDamage);
            }
            manager.agent.destination = target.transform.position + (target.GetComponent <Rigidbody>().velocity.normalized *ProjectedDistance);
            Debug.DrawLine(transform.position, manager.agent.destination, Color.red);
        }
    }
 public override void UpdateBehavior(AnimalBehaviorManager manager)
 {
     //pop behavior off stack
     if (CheckBehavior(manager))
     {
         manager.behaviors.Pop();
         manager.GetComponent <FieldOfView>().FindVisibleTargets();
     }
 }
Beispiel #6
0
 public override bool CheckBehavior(AnimalBehaviorManager manager)
 {
     //Condition
     if (target != null)
     {
         return(PathComplete(manager));
     }
     return(true);
 }
 public override void UpdateBehavior(AnimalBehaviorManager manager)
 {
     if (CheckBehavior(manager))
     {
         manager.behaviors.Pop();
         targetWanderTime = Random.Range(minWanderTime, maxWanderTime);
         wanderTime       = 0;
     }
 }
Beispiel #8
0
 public override void UpdateBehavior(AnimalBehaviorManager manager)
 {
     Debug.DrawLine(gameObject.transform.position, manager.agent.destination, Color.red);
     //if the animal is far enough away from the hunter stop evading
     if (CheckBehavior(manager))
     {
         manager.behaviors.Pop();
     }
 }
Beispiel #9
0
 public void Start()
 {
     lastPos = this.gameObject.transform.position;
     this.AnimalBehaviorManager = this.GetComponent <AnimalBehaviorManager>();
     if (!this.gameObject.TryGetComponent(out this.Animator))
     {
         this.Animator = null;
         Debug.Log("Animator component not attached");
     }
 }
 public override bool CheckBehavior(AnimalBehaviorManager manager)
 {
     wanderTime += Time.deltaTime;
     //has the animal wandered long enough?
     if (wanderTime >= targetWanderTime)
     {
         return(true);
     }
     return(false);
 }
Beispiel #11
0
    public override bool CheckBehavior(AnimalBehaviorManager manager)
    {
        //distance between animal and hunter
        float distance = Vector3.Distance(transform.position, target.transform.position);

        //is the animal a "safe" distace away?
        if (distance >= SafeDistance)
        {
            return(true);
        }
        return(false);
    }
    public override void DoBehavior(AnimalBehaviorManager manager)
    {
        target = Vector3.zero;
        target = Random.insideUnitCircle.normalized * raduis;
        target = (Vector2)target + Random.insideUnitCircle * jitter;

        target.z = target.y;
        target  += transform.position;
        target  += transform.forward * distance;
        target.y = transform.position.y;
        manager.agent.destination = target;
        Debug.DrawLine(gameObject.transform.position, manager.agent.destination, Color.green);
    }
 protected bool PathComplete(AnimalBehaviorManager manager)
 {
     if (!manager.agent.pathPending)
     {
         if (manager.agent.stoppingDistance >= manager.agent.remainingDistance)
         {
             if (!manager.agent.hasPath || manager.agent.velocity.sqrMagnitude == 0f)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Beispiel #14
0
 public override void DoBehavior(AnimalBehaviorManager manager)
 {
     if (manager.walkToTargets.Count > 0)
     {
         target = manager.walkToTargets.Peek();
     }
     //logic
     if (target != null)
     {
         manager.agent.destination = target.transform.position;
     }
     else
     {
         manager.agent.destination = gameObject.transform.position;
     }
     Debug.DrawLine(gameObject.transform.position, manager.agent.destination, Color.blue);
 }
    public override bool CheckBehavior(AnimalBehaviorManager manager)
    {
        GameObject test = target;

        if (test != null)
        {
            //is the object past the stop distance and not in our vision?
            if ((distance >= StopDistance && !manager.vision.visibleTargets.Contains(target.transform)) || killedTarget == true)
            {
                return(true);
            }
        }
        else
        {
            return(true);
        }
        return(false);
    }
Beispiel #16
0
 private void TriggerCheck(Collider other)
 {
     //did an animal just walk into the area?
     if (other.gameObject.tag == "Animal")
     {
         //is the animal's walkto target this area?
         AnimalBehaviorManager manager = other.gameObject.GetComponent <AnimalBehaviorManager>();
         if (manager.behaviors.Count > 0)
         {
             if (manager.behaviors.Peek() == manager.evade)
             {
                 //do nothing already evading
             }
             else if (manager.behaviors.Peek() == manager.walkTo && manager.walkTo.target == gameObject)
             {
                 //animal arrived and behavior poped
                 manager.behaviors.Pop();
                 //do I need to pop a walk to target too?
                 if (manager.walkToTargets.Count > 0)
                 {
                     if (manager.walkToTargets.Peek() == gameObject)
                     {
                         manager.walkToTargets.Pop();
                     }
                 }
             }
             //if they were chasing something run from it instead
             else if (manager.behaviors.Peek() == manager.chase && manager.chase.target != null)
             {
                 manager.evade.target = manager.chase.target;
                 manager.behaviors.Pop();
                 manager.behaviors.Push(manager.evade);
             }
         }
     }
 }
 public virtual void UpdateBehavior(AnimalBehaviorManager manager)
 {
 }
 public virtual void DoBehavior(AnimalBehaviorManager manager)
 {
 }
 public virtual bool CheckBehavior(AnimalBehaviorManager manager)
 {
     return(false);
 }
Beispiel #20
0
 public void SetInstance()
 {
     inst = this;
 }
Beispiel #21
0
 public override void DoBehavior(AnimalBehaviorManager manager)
 {
     //sets destination based on player position and target position (target is what it is running from)
     manager.agent.destination = transform.position + ((target.transform.position - gameObject.transform.position).normalized * -SafeDistance);
 }