Example #1
0
    IEnumerator Atacar()
    {
        int guerrerosEnCapital = 0;

        while (puntosDispAux > StageData.COSTE_PA_ATACAR)
        {
            for (int i = guerrerosDisponibles.Count - 1; i >= 0; i--)
            {
                if (guerrerosDisponibles[i] == null)
                {
                    guerrerosDisponibles.Remove(guerrerosDisponibles[i]);
                }
                else
                {
                    guerrerosDisponibles[i].AvanzarHaciaDestino(ref puntosDispAux);
                    while (!guerrerosDisponibles[i].AccionTerminada())
                    {
                        yield return(null);
                    }
                }
            }

            if (guerrerosDisponibles.Count <= MINIMO_GUERREROS)
            {
                estado = EstadoAtaque.Preparacion;
            }
        }
        fin = true;
    }
Example #2
0
    IEnumerator ColocarTropasEnCapital()
    {
        Node nodoDestino = StageData.currentInstance.GetNodeFromPosition(jug.capitalesEnemigas[objetivoActual].transform.position);

        //obtenemos nodos suficientes alrededor para colocar a los guerreros
        casillasDestinoPreparacion = new List <Node>();
        int radioNecesario = guerrerosDisponibles.Count / 8;

        while (casillasDestinoPreparacion.Count <= guerrerosDisponibles.Count)
        {
            radioNecesario++;
            casillasDestinoPreparacion = Control.GetNodosAlAlcance(nodoDestino, radioNecesario);
        }

        //asignamos a cada unidad un destino
        for (int i = 0; i < guerrerosDisponibles.Count; i++)
        {
            guerrerosDisponibles[i].SetDestino(casillasDestinoPreparacion[i]);
            while (!guerrerosDisponibles[i].caminoListo)
            {
                yield return(null);
            }
        }

        estado = EstadoAtaque.Ataque;
        //al terminar, volvemos a ejecutar para empezar la accion en si
        Ataca(objetivoActual, puntosDispAux);
    }
Example #3
0
    IEnumerator dirigirTropas()
    {
        un.caminoListo = false;
        StageData.currentInstance.GetPathToTarget(this.transform.position, jug.capitalesEnemigas[objetivoActual].transform.position, un);

        while (!un.caminoListo)
        {
            yield return(null);
        }

        caminoCapial = un.caminoActual;

        //se preparan las tropas a una distancia segura
        //elegimos alrededor de que nodo se concentraran
        Node nodoDestino = StageData.currentInstance.GetNodeFromPosition(caminoCapial[caminoCapial.Count - DISTANCIA_PREPARACION_CAPITAL]);

        //obtenemos nodos suficientes alrededor para colocar a los guerreros
        casillasDestinoPreparacion = new List <Node>();
        int radioNecesario = guerrerosDisponibles.Count / 8;

        while (casillasDestinoPreparacion.Count <= guerrerosDisponibles.Count)
        {
            radioNecesario++;
            casillasDestinoPreparacion = Control.GetNodosAlAlcance(nodoDestino, radioNecesario);
        }

        //asignamos a cada unidad un destino
        for (int i = 0; i < guerrerosDisponibles.Count; i++)
        {
            guerrerosDisponibles[i].SetDestino(casillasDestinoPreparacion[i]);
            while (!guerrerosDisponibles[i].caminoListo)
            {
                yield return(null);
            }
        }

        estado = EstadoAtaque.Preparacion;
        //al terminar, volvemos a ejecutar para empezar la accion en si
        Ataca(objetivoActual, puntosDispAux);
        fin = true;
    }
Example #4
0
    public void Ataca(int objetivo, int puntosDisponibles, bool empezarDeCero = false)
    {
        puntosDispAux = puntosDisponibles;
        if (empezarDeCero)
        {
            estado = EstadoAtaque.Planificacion;
        }
        fin = false;
        switch (estado)
        {
        case EstadoAtaque.Planificacion:
            objetivoActual = objetivo;
            guerrerosDisponibles.Clear();

            //contamos los guerreros y si hay poca el ataque se cancela

            //se obtienen los guerreros de los que se dispone
            for (int i = 0; i < jug.unidadesDisponibles.Count; i++)
            {
                if (jug.unidadesDisponibles[i].IdUnidad == TipoUnidad.Warrior)
                {
                    guerrerosDisponibles.Add((IA_Guerrero)jug.unidadesDisponibles[i]);
                }
            }

            StartCoroutine("dirigirTropas");
            puntosDispAux = puntosDisponibles;
            break;

        case EstadoAtaque.Preparacion:
            puntosDispAux = puntosDisponibles;
            StartCoroutine("PrepararTropas");
            break;

        case EstadoAtaque.Ataque:
            puntosDispAux = puntosDisponibles;
            StartCoroutine("Atacar");
            break;
        }
    }