Exemplo n.º 1
0
    /*private void Start()
     * {
     *  Nodo = StageData.currentInstance.GetNodeFromPosition(transform.position);
     * }*/

    /*void Update()
     * {
     *      Nodo = StageData.currentInstance.GetNodeFromPosition(transform.position);
     *      Nodo.unidad = this;
     * }*/


    public void AccionMover(List <Vector3> camino)
    {
        MoverUnidad mv = (MoverUnidad)acciones[ACCION_MOVER];

        print(mv == null);
        // mv.Ejecutar(StageData.currentInstance.GetNodeFromPosition(camino[camino.Count - 1]), camino);
    }
Exemplo n.º 2
0
    public void AvanzarHaciaDestino(ref int puntosDisponibles)
    {
        listo = false;
        List <Node> alcance;

        //alcance = acciones[ACCION_MOVER].VerNodosAlAlcance();

        //si no atacamos, movemos
        if (posActual + 6 > caminoTotalANodoDestino.Count - 1)
        {
            caminoActual = caminoTotalANodoDestino.GetRange(posActual, caminoTotalANodoDestino.Count - 1);
            heLlegado    = true;
        }
        else
        {
            caminoActual = caminoTotalANodoDestino.GetRange(posActual, 6);
        }
        //print(caminoActual.Count);


        //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)
        {
            print("Avanzar hacia destino" + caminoActual.Count);
            heLlegado = true;
            listo     = true;
            return;
        }

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

        //print(StageData.currentInstance.GetNodeFromPosition(destino));
        if (mv.Ejecutar(StageData.currentInstance.GetNodeFromPosition(destino)))
        {
            posActual         += incrementoPos;
            puntosDisponibles -= StageData.COSTE_PA_MOVER_UNIDAD;
        }
        listo = true;
    }
Exemplo n.º 3
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;
    }
Exemplo n.º 4
0
    /* public void AvanzarHaciaDestinoMasLejano(ref int puntosDisponibles)
     * {
     *   listo = false;
     *   List<Node> alcance;
     *   alcance = Control.GetNodosAlAlcance(StageData.currentInstance.GetNodeFromPosition(this.transform.position), acciones[ACCION_MOVER].Alcance);
     *   //Codigo de recolectar
     *
     *   caminoActual = caminoAObjetivo.GetRange(posActual, acciones[ACCION_MOVER].Alcance - 1);
     *
     *
     *   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;
     *       }
     *
     *   }
     *   if (destino == Vector3.zero) {
     *       heLlegado = true;
     *       listo = true;
     *       return;
     *   }
     *
     *   MoverUnidad mv = (MoverUnidad)acciones[ACCION_MOVER];
     *   if (mv.Ejecutar(StageData.currentInstance.GetNodeFromPosition(destino))) {
     *
     *       posActual += incrementoPos;
     *       puntosDisponibles -= StageData.COSTE_PA_MOVER_UNIDAD;
     *   }
     *   listo = true;
     *   //Falta Construir, que no tengo muy claro donde ponerlo
     *
     * }
     */


    public void AvanzarHaciaDestino(bool esEdificioDeRecoleccion)
    {
        listo = false;
        List <Node> alcance;
        bool        construir = false;

        //alcance = acciones[ACCION_MOVER].VerNodosAlAlcance();

        //si no atacamos, movemos
        if (posActual + 4 > caminoTotalANodoDestino.Count - 1)
        {
            //si esta al alcance, debe construir
            caminoActual = caminoTotalANodoDestino.GetRange(posActual, caminoTotalANodoDestino.Count - 1);
            construir    = true;
        }
        else
        {
            caminoActual = caminoTotalANodoDestino.GetRange(posActual, 4);
        }
        //print(caminoActual.Count);


        if (construir)
        {
            Construir accionConstr = (Construir)acciones[ACCION_CONSTRUIR];
            if (accionConstr.Ejecutar(nodoRecurso))
            {
                heLlegado = true;
            }
        }

        //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)
        {
            //print("Avanzar hacia destino" + caminoActual.Count);
            CrearEdificio(esEdificioDeRecoleccion);
            heLlegado = true;
            listo     = true;
            return;
        }

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

        //print(StageData.currentInstance.GetNodeFromPosition(destino));
        if (mv.Ejecutar(StageData.currentInstance.GetNodeFromPosition(destino)))
        {
            posActual += incrementoPos;
        }
        listo = true;
    }