Exemplo n.º 1
0
 private void OnTriggerEnter(Collider other)
 {
     if (!agente.isOnOffMeshLink)
     {
         // Si encuentras un enemigo y no está en la lista de enemigos
         if (other.tag == "Enemigo")
         {
             EnemigoGenerico aux = other.GetComponent <EnemigoGenerico>();
             // Actualizas al enemigo de que hay hormiga cerca
             if (!aux.hormigasCerca.Contains(this))
             {
                 aux.hormigasCerca.Add(this);
             }
             // Actualizas a la hormiga y avisas a la reina de este enemigo
             if (!enemigosCerca.Contains(aux))
             {
                 if (aux.hormigasAtacandole.Count < 2)
                 {
                     if (aux.hormigasAtacandole.Count == 0)
                     {
                         reina.RecibirAlertaEnemigo(aux);
                     }
                     else if (aux.hormigasAtacandole[0] == this)
                     {
                         reina.RecibirAlertaEnemigo(aux);
                     }
                 }
                 enemigosCerca.Add(aux);
             }
         }
         else if (other.tag == "Trigo")
         {
             Comida aux = other.gameObject.GetComponent <Comida>();
             if (!aux.hormigasCerca.Contains(this))
             {
                 aux.hormigasCerca.Add(this);
             }
             if (!aux.haSidoCogida && !aux.laEstanLLevando && aux.hormigaQueLlevaLaComida == null)
             {
                 reina.RecibirAlertaComida(aux);
             }
         }
         else if (other.tag == "Huevo")
         {
             Huevo aux = other.GetComponent <Huevo>();
             // Actualizas al huevo de las hormigas que tiene cerca
             if (!aux.hormigasCerca.Contains(this))
             {
                 aux.hormigasCerca.Add(this);
             }
             // Actualizas la lista de huevos cerca
             if (!huevosCerca.Contains(aux))
             {
                 huevosCerca.Add(aux);
             }
         }
     }
 }
Exemplo n.º 2
0
 public void ReinaEnPeligro()
 {
     if (reina.enemigosCerca.Count != 0 && reinaCerca == true)
     {
         enemigoAlQueAtacar = reina.enemigosCerca[0];
         Task.current.Succeed();
     }
     else
     {
         enemigoAlQueAtacar = null;
         Task.current.Fail();
     }
 }
Exemplo n.º 3
0
 private void OnTriggerExit(Collider other)
 {
     // Si un enemigo sale de nuestro collider, y estabamos luchando con el actualizar la lista
     if (other.tag == "Enemigo")
     {
         EnemigoGenerico aux = other.GetComponent <EnemigoGenerico>();
         aux.hormigasCerca.Remove(this);
         enemigosCerca.Remove(aux);
     }
     else if (other.tag == "Trigo")
     {
         Comida aux = other.gameObject.GetComponent <Comida>();
         comidaQueHayCerca.Remove(aux);
         aux.hormigasCerca.Remove(this);
     }
     else if (other.tag == "Reina")
     {
         reinaCerca = false;
         //Debug.Log("Reina cerca");
     }
 }
Exemplo n.º 4
0
 private void OnTriggerExit(Collider other)
 {
     // Si un enemigo sale de nuestro collider, y estabamos luchando con el actualizar la lista
     if (other.tag == "Enemigo")
     {
         EnemigoGenerico aux = other.GetComponent <EnemigoGenerico>();
         aux.hormigasCerca.Remove(this);
         enemigosCerca.Remove(aux);
     }
     else if (other.tag == "Trigo")
     {
         Comida aux = other.gameObject.GetComponent <Comida>();
         aux.hormigasCerca.Remove(this);
     }
     else if (other.tag == "Huevo")
     {
         Huevo aux = other.GetComponent <Huevo>();
         huevosCerca.Remove(aux);
         aux.hormigasCerca.Remove(this);
     }
 }
Exemplo n.º 5
0
    public void HaySoldadosCerca()
    {
        foreach (HormigaGenerica h in hormigasCerca)
        {
            if (h != null)
            {
                Soldado hormigaSoldado = h.transform.gameObject.GetComponent(typeof(Soldado)) as Soldado;
                Obrera  hormigaObrera  = h.transform.gameObject.GetComponent(typeof(Obrera)) as Obrera;

                if (hormigaObrera != null)
                {
                    if (hormigaObrera.enemigoAlQueAtacar == null)
                    {
                        if (enemigosCerca.Count > 0)
                        {
                            EnemigoGenerico enem = this.enemigosCerca[Random.Range(0, this.enemigosCerca.Count)];
                            // Si no lo tiene ya asignado por orden
                            if (hormigaObrera.enemigoAlQueAtacarPorOrden != enem)
                            {
                                hormigaObrera.enemigoAlQueAtacar = enem;
                                if (!hormigaObrera.enemigoAlQueAtacar.hormigasAtacandole.Contains(hormigaObrera))
                                {
                                    hormigaObrera.enemigoAlQueAtacar.hormigasAtacandole.Add(hormigaObrera);
                                }
                            }
                        }
                    }
                }
                else if (hormigaSoldado != null)
                {
                    if (hormigaSoldado.enemigoAlQueAtacar == null)
                    {
                        if (enemigosCerca.Count > 0)
                        {
                            EnemigoGenerico enem = this.enemigosCerca[Random.Range(0, this.enemigosCerca.Count)];
                            // Si no lo tiene ya asignado por orden
                            if (hormigaSoldado.enemigoAlQueAtacarPorOrden != enem)
                            {
                                hormigaSoldado.enemigoAlQueAtacar = enem;
                                if (!hormigaSoldado.enemigoAlQueAtacar.hormigasAtacandole.Contains(hormigaSoldado))
                                {
                                    hormigaSoldado.enemigoAlQueAtacar.hormigasAtacandole.Add(hormigaSoldado);
                                }
                            }
                        }
                    }
                }
            }
        }

        bool haySoldadosEnTodas = false;
        int  cont = 0;

        foreach (EnemigoGenerico enem in enemigosCerca)
        {
            cont = 0;
            foreach (HormigaGenerica hormiga in enem.hormigasAtacandole)
            {
                if (hormiga != null)
                {
                    Soldado hormigaSoldado2 = hormiga.transform.gameObject.GetComponent(typeof(Soldado)) as Soldado;
                    if (hormigaSoldado2 != null)
                    {
                        haySoldadosEnTodas = true;
                        break;
                    }
                    else if (cont == enem.hormigasAtacandole.Count - 1)
                    {
                        haySoldadosEnTodas = false;
                        break;
                    }
                }
                cont++;
            }

            if (haySoldadosEnTodas == false)
            {
                break;
            }
        }

        if (haySoldadosEnTodas)
        {
            Task.current.Succeed();
            enemigoAlQueAtacar = null;
        }
        else
        {
            Task.current.Fail();
        }
    }
Exemplo n.º 6
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;
        }
    }
Exemplo n.º 7
0
    public void Atacar()
    {
        if (bocadillos.hormigaSeleccionada != null && bocadillos.hormigaSeleccionada == this)
        {
            if (this.agente.isOnOffMeshLink)
            {
                bocadillos.Nada();
            }
            else
            {
                bocadillos.Atacar();
            }
        }

        // Si el enemigo al que tenia asignado como orden, muere, me quito la orden
        if (enemigoAlQueAtacarPorOrden == null)
        {
            if (hayOrdenDeAtacar)
            {
                hayOrdenDeAtacar = false;
                this.SacarDeOcupadas();
                Task.current.Succeed();
                return;
            }
        }

        // Si no tengo enemigo al que atacar, miro los enemigos cerca
        if (enemigoAlQueAtacar == null)
        {
            if (enemigosCerca.Count > 0)
            {
                enemigoAlQueAtacar = enemigosCerca[0];
                if (!enemigoAlQueAtacar.hormigasAtacandole.Contains(this))
                {
                    enemigoAlQueAtacar.hormigasAtacandole.Add(this);
                }
                Task.current.Succeed();
                return;
            }
            else if (enemigoAlQueAtacarPorOrden == null)
            {
                Task.current.Fail();
                return;
            }
        }

        // Si me encuentro un enemigo por el camino al que atacar
        if (enemigoAlQueAtacar != null)
        {
            // Me encuentro a un enemigo, aunque tenga orden

            // 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
            }

            // Asigno la posición a la que hay que ir
            agente.SetDestination(enemigoAlQueAtacar.transform.position);

            // En el momento que esté cerca
            if (Vector3.Distance(transform.position, enemigoAlQueAtacar.transform.position) < 1.2f)
            {
                if (tiempoEntreAtaques <= 0)
                {
                    float random = Random.Range(0, 10);
                    if (random < 9f)
                    {
                        enemigoAlQueAtacar.quitarVida(this.daño);
                    }
                    else
                    {
                        //Debug.Log("Ataque fallido");
                    }
                    tiempoEntreAtaques = tiempoEntreAtaquesMax;
                    Task.current.Succeed();
                    return;
                }
                else
                {
                    Vector3 randomDirection = UnityEngine.Random.insideUnitSphere * 1 + enemigoAlQueAtacar.transform.position;
                    agente.SetDestination(randomDirection);
                    tiempoEntreAtaques -= Time.deltaTime;
                    Task.current.Succeed();
                    return;
                }
            }
            else
            {
                // Te estás acercando al enemigo
                agente.SetDestination(enemigoAlQueAtacar.transform.position);
                Task.current.Succeed();
                return;
            }
        }

        // Si tengo un enemigo mandado por orden
        else if (enemigoAlQueAtacarPorOrden != null)
        {
            // Si tengo orden de atacar a un enemigo
            reina.DesasignarComidaACoger(this);
            reina.DesasignarHormigaACurar(this);
            reina.DesasignarHuevoACurar(this);

            agente.SetDestination(enemigoAlQueAtacarPorOrden.transform.position);

            // En el momento que esté cerca
            if (Vector3.Distance(transform.position, enemigoAlQueAtacarPorOrden.transform.position) < 1.2f)
            {
                if (tiempoEntreAtaques <= 0)
                {
                    float random = Random.Range(0, 10);
                    if (random < 9f)
                    {
                        enemigoAlQueAtacarPorOrden.quitarVida(this.daño);
                    }
                    else
                    {
                        //Debug.Log("Ataque fallido");
                    }
                    tiempoEntreAtaques = tiempoEntreAtaquesMax;
                    Task.current.Succeed();
                    return;
                }
                else
                {
                    Vector3 randomDirection = UnityEngine.Random.insideUnitSphere * 1 + enemigoAlQueAtacarPorOrden.transform.position;
                    agente.SetDestination(randomDirection);
                    tiempoEntreAtaques -= Time.deltaTime;
                    Task.current.Succeed();
                    return;
                }
            }
            else
            {
                // Te estás acercando al enemigo
                agente.SetDestination(enemigoAlQueAtacarPorOrden.transform.position);
                Task.current.Succeed();
                return;
            }
        }
    }