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; }
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; }
/* 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; }