/*
     * 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);
    }