Пример #1
0
    public void AccionAtacar(Node objetivo)
    {
        Atacar at = (Atacar)acciones[ACCION_ATACAR];

        print(at == null);
        //at.Ejecutar(objetivo.unidad);
    }
Пример #2
0
    IEnumerator Avanzando()
    {
        //si hay unidades enemigas al alcance (guerreros y torres de defensa), las ataca si son del objetivo
        listo = false;
        List <Node> alcance;

        alcance = Control.GetNodosAlAlcance(StageData.currentInstance.GetNodeFromPosition(this.transform.position), acciones[ACCION_MOVER].Alcance);

        for (int i = 0; i < alcance.Count; i++)
        {
            if (alcance[i].unidad != null && alcance[i].unidad.IdJugador == StageData.currentInstance.GetPartidaActual().Jugadores[IdJugador].IndexPlayerObjetivoActual)
            {
                if (alcance[i].unidad.IdUnidad == TipoUnidad.Warrior || alcance[i].unidad.IdUnidad == TipoUnidad.DefensiveBuilding || alcance[i].unidad.IdUnidad == TipoUnidad.Capital)
                {
                    Atacar at = (Atacar)acciones[ACCION_ATACAR];
                    if (at.Ejecutar(alcance[i]))
                    {
                        puntosDeAccion -= StageData.COSTE_PA_ATACAR;
                        listo           = true;
                        StopCoroutine("Abanzando");
                    }
                }
            }
        }

        //si no atacamos, movemos
        caminoActual = caminoTotalACapital.GetRange(posActual, acciones[ACCION_ATACAR].Alcance);

        //comprobamos a que posiciones podemos movernos
        Vector3 destino       = Vector3.zero;
        int     incrementoPos = 0;

        for (int i = caminoActual.Count - 1; i >= 0; i--)
        {
            if (StageData.currentInstance.GetNodeFromPosition(caminoActual[i]).unidad == null && StageData.currentInstance.GetNodeFromPosition(caminoActual[i]).resourceType == TipoRecurso.NullResourceType)
            {
                destino       = caminoActual[i];
                incrementoPos = i;
                break;
            }
        }

        //si no puede moverse, ha llegado
        if (destino == Vector3.zero)
        {
            heLlegado = true;
            listo     = true;
            StopCoroutine("Avanzando");
        }

        //si puede moverse, lo hace
        MoverUnidad mv = (MoverUnidad)acciones[ACCION_MOVER];

        if (mv.Ejecutar(StageData.currentInstance.GetNodeFromPosition(destino)))
        {
            while (!mv.Fin)
            {
                yield return(null);
            }

            mv.CancelarAccion();
            posActual      += incrementoPos;
            puntosDeAccion -= StageData.COSTE_PA_MOVER_UNIDAD;
        }
        listo = true;
    }