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); }
public void AccionConstruir(Node objetivo) { Construir co = (Construir)acciones[ACCION_CONSTRUIR]; print(co == null); co.Ejecutar(objetivo); }
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"); } } }
/* 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; }