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(); } }
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; } }
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(); } }
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); }
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); }
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); }
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); }
public void SetInstance() { inst = this; }
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); }