public void AccionAtacar(Node objetivo) { Atacar at = (Atacar)acciones[ACCION_ATACAR]; print(at == null); //at.Ejecutar(objetivo.unidad); }
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; }