/* * OnTriggerStay: método por el cual el agente se intenta * reproducir si colisiona con otro agente del mismo tipo * y ambos pueden. */ private void OnTriggerStay(Collider collision) { BaseAgent otherAgent = collision.gameObject.GetComponent <BaseAgent>(); if (gameObject.tag == collision.tag && canReproduce && otherAgent.canReproduce) { if (Reproduction(otherAgent)) { canReproduce = false; otherAgent.canReproduce = false; ChangeState(state.Wander); otherAgent.ChangeState(state.Wander); } } }
/* * Collision Detected: método llamado cuando un rayo choca con un agente. * Dependiendo de su tag y diferentes parámetros, cambiará o no de estado. */ protected bool CollisionDetected(Collider collider) { BaseAgent otherAgent = collider.gameObject.GetComponent <BaseAgent>(); if (gameObject.tag == collider.tag && canReproduce && otherAgent.canReproduce) { _pursuitTarget = otherAgent._agent; ChangeState(state.Pursuit); otherAgent._pursuitTarget = _agent; otherAgent.ChangeState(state.Pursuit); } if (gameObject.tag == collider.tag) { return(false); } if (!string.IsNullOrEmpty(predatorTag) && collider.gameObject.CompareTag(predatorTag)) { NavMeshAgent colAgent = collider.gameObject.GetComponent <NavMeshAgent>(); if (colAgent == null) { return(false); } _evadeTarget = colAgent; ChangeState(state.Evade); //huir return(true); } else { if (!collider.gameObject.CompareTag(gameObject.tag) && isHungry && (_pursuitTarget == null || _pursuitPlant == null)) { for (int i = 0; i < foodTag.Length; i++) { if (!string.IsNullOrEmpty(foodTag[i]) && collider.CompareTag(foodTag[i])) { if (collider.CompareTag(tagsAgents.Plantas.ToString())) { if (collider.gameObject.GetComponent <LifeCycle>().canBeEaten) { _pursuitPlant = collider.transform; _pursuitTarget = null; ChangeState(state.Pursuit); } } else { NavMeshAgent colAgent = collider.gameObject.GetComponent <NavMeshAgent>(); if (colAgent == null) { return(false); } _pursuitTarget = colAgent; ChangeState(state.Pursuit); _pursuitPlant = null; } //perseguir return(false); } } } } return(false); }