Exemplo n.º 1
0
    public void Huir()
    {
        if (bocadillos.hormigaSeleccionada != null && bocadillos.hormigaSeleccionada == this)
        {
            if (this.agente.isOnOffMeshLink)
            {
                bocadillos.Nada();
            }
            else
            {
                bocadillos.Huir();
            }
        }
        if (enemigosCerca.Count > 0)
        {
            EnemigoGenerico enemigoCerca = enemigosCerca[0];
            if (enemigoCerca != null)
            {
                // Elimino todo lo que esté haciendo, pero no le quito la orden
                // reina.DesasignarComidaACoger(this);
                // Suelto la comida, pero no la desasigno
                if (comida != null && comida.laEstanLLevando)
                {
                    comida.transform.SetParent(null);
                    comida.laEstanLLevando = false;
                    posComida      = Vector3.zero;
                    posDejarComida = Vector3.zero;
                }

                //reina.DesasignarHormigaACurar(this);
                // Dejo de curar a la hormgia pero no la desasigno
                if (hormigaACurar != null)
                {
                    // No hace falta hacer nada
                }

                //reina.DesasignarHuevoACurar(this);
                // Dejo de cuidar un huevo pero no lo desasigno
                if (huevoACuidar != null)
                {
                    // No hace falta hacer nada
                }

                // Si estoy huyendo de él, me saco de hormigas atacandole
                enemigoCerca.hormigasAtacandole.Remove(this);

                // Corro en direccion contraria al enemigo
                Vector3 direccionEnemigo   = Vector3.Normalize(enemigoCerca.transform.position - this.transform.position);
                Vector3 direccionContraria = direccionEnemigo * -1f * 3;
                posHuida = this.transform.position + direccionContraria;

                NavMeshPath path = new NavMeshPath();
                NavMesh.CalculatePath(transform.position, posHuida, NavMesh.AllAreas, path);
                agente.SetDestination(posHuida);
                if (path.status == NavMeshPathStatus.PathComplete)
                {
                    agente.SetDestination(posHuida);
                }
                else
                {
                    posHuida = posHuida - 2 * direccionContraria;
                    agente.SetDestination(posHuida);
                }
            }
        }

        if (posHuida != Vector3.zero)
        {
            if (Vector3.Distance(this.transform.position, posHuida) < 0.6f)
            {
                posHuida = Vector3.zero;
                Task.current.Succeed();
                return;
            }
        }
        else
        {
            Task.current.Succeed();
            return;
        }
    }