Ejemplo n.º 1
0
    public void AccionConstruir(Node objetivo)
    {
        Construir co = (Construir)acciones[ACCION_CONSTRUIR];

        print(co == null);
        co.Ejecutar(objetivo);
    }
Ejemplo n.º 2
0
    bool CrearEdificio(bool esEdificioDeRecoleccion)
    {
        Construir   creadorEdificios = (Construir)acciones[ACCION_CONSTRUIR];
        List <Node> nodosAptos       = Control.GetNodosAlAlcance(Nodo, 2);

        if (esEdificioDeRecoleccion)
        {
            List <Node> nodosConRecursos = new List <Node>();
            foreach (Node n in nodosAptos)
            {
                if (n.resourceType != TipoRecurso.NullResourceType)
                {
                    nodosConRecursos.Add(n);
                }
            }

            foreach (Node n in nodosConRecursos)
            {
                //print("A ver si construyo un edificio de recursos");
                if (creadorEdificios.Ejecutar(n) /* && tiene recursos suficientes*/)
                {
                    //print("He construidoooo");
                    ((JugadorIA)StageData.currentInstance.GetPartidaActual().JugadorActual).rolReco.recursosSinExplotar.Remove(n.position);
                    return(true);
                }
            }
        }
        else
        {
            List <Node> nodosParaTorres = new List <Node>();
            foreach (Node n in nodosAptos)
            {
                if (n.resourceType == TipoRecurso.NullResourceType)
                {
                    nodosParaTorres.Add(n);
                }
            }

            foreach (Node n in nodosParaTorres)
            {
                print("A ver si construyo una torre");
                if (creadorEdificios.Ejecutar(n) /* && tiene recursos suficientes*/)
                {
                    print("He construidoooo");
                    ((JugadorIA)StageData.currentInstance.GetPartidaActual().JugadorActual).rolReco.recursosSinExplotar.Remove(n.position);
                    return(true);
                }
            }
        }


        return(false);
    }
Ejemplo n.º 3
0
    public void GenerarArbol(Construccion arbol, Vector3 posicion, Construir construir)
    {
        bool añadir = true;

        if (ComprobarEdificable(arbol, posicion) == false)
        {
            añadir = false;
        }

        if (construir.ComprobarPosicion(arbol, posicion) != null)
        {
            añadir = false;
        }

        if (añadir == true)
        {
            construir.AñadirConstruccion(arbol, posicion, false);
        }
    }
Ejemplo n.º 4
0
    void CrearTorres()
    {
        List <Unidad> aldeanosCreadores = GetCreadoresDeTorres();
        int           aldeanoActual     = 0;
        Construir     contructor        = new Construir();

        while (numeroCreaciones > 0 && aldeanoActual < aldeanosCreadores.Count)                                                                                                          //Proceso para crear
        {
            List <Node> NodosAlAlcance = OrdenarNodos(Control.GetNodosAlAlcance(StageData.currentInstance.GetNodeFromPosition(aldeanosCreadores[aldeanoActual].transform.position), 2)); //Obtenemos los nodos en los que podemos crear
            foreach (Node n in NodosAlAlcance)                                                                                                                                           //RecorremosEsos nodos ahora que estan ordenados por distancia
            {
                if (contructor.Ejecutar(n))                                                                                                                                              //Si hemos conseguido crear pasamos al siguiente nodo
                {
                    numeroCreaciones--;
                    break;
                }
            }
            aldeanoActual++;
            if (aldeanoActual >= aldeanosCreadores.Count)
            {
                print("NO SE PUEDEN CREAR MAS TORRES  PORQUE NO CABEN MAS UNIDADES");
            }
        }
    }
Ejemplo n.º 5
0
    public void PonerArboles(Guardado partida, Construir construir)
    {
        if (partida != null)
        {
            if (partida.edificiosID.Count > 0)
            {
                int i = 0;
                while (i < partida.edificiosID.Count)
                {
                    Vector3 posicion = new Vector3(partida.edificiosX[i], 0.5f, partida.edificiosZ[i]);

                    Construccion arbol = null;

                    foreach (Construccion arbol2 in arboles)
                    {
                        if (arbol2.id == partida.edificiosID[i])
                        {
                            arbol = arbol2;
                        }
                    }

                    if (arbol != null)
                    {
                        GenerarArbol(arbol, posicion, construir);
                    }

                    i += 1;
                }
            }
        }
        else
        {
            if (arboles != null)
            {
                if (arboles.Length > 0)
                {
                    int arbolesTramo1 = 250;

                    int i = 0;
                    while (i < arbolesTramo1)
                    {
                        Vector3 posicion = new Vector3(Random.Range(0, 30), 1, Random.Range(0, 99));
                        int     j        = Random.Range(0, arboles.Length);

                        if (arboles[j] != null)
                        {
                            GenerarArbol(arboles[j], posicion, construir);
                        }
                        i++;
                    }

                    int arbolesTramo2 = 30;
                    i = 0;
                    while (i < arbolesTramo2)
                    {
                        Vector3 posicion = new Vector3(Random.Range(31, 69), 1, Random.Range(0, 99));
                        int     j        = Random.Range(0, arboles.Length);

                        if (arboles[j] != null)
                        {
                            GenerarArbol(arboles[j], posicion, construir);
                        }
                        i++;
                    }

                    int arbolesTramo3 = 250;
                    i = 0;
                    while (i < arbolesTramo3)
                    {
                        Vector3 posicion = new Vector3(Random.Range(70, 99), 1, Random.Range(0, 99));
                        int     j        = Random.Range(0, arboles.Length);

                        if (arboles[j] != null)
                        {
                            GenerarArbol(arboles[j], posicion, construir);
                        }
                        i++;
                    }
                }
            }
        }
    }
Ejemplo n.º 6
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;
    }