private void Update() { switch (monstruo.EstadoMonstruoActual()) { case EstadosMonstruo.EnRuta: if (((Vector2)transform.position - ruta[puntoRutaActual].EstaPosicion()).sqrMagnitude < MARGEN) { puntoRutaActual = (puntoRutaActual + 1) % ruta.Length; } break; case EstadosMonstruo.PensandoRuta: caminoDeVuelta = ControladorRecorrido.instance.EncontarCamino(monstruoRB.position, ruta); if (caminoDeVuelta != null) { monstruo.CambiarEstadoMonstruo(EstadosMonstruo.VolviendoARuta); } break; case EstadosMonstruo.VolviendoARuta: if (caminoDeVuelta.Fin()) { monstruo.CambiarEstadoMonstruo(EstadosMonstruo.EnRuta); } else { caminoDeVuelta.PosicionObjetivo(transform.position); } break; } }
//Aplica el A* desde los puntosRecorrido mas cercanos a la posicion final e inicial. public listaNodos EncontarCamino(Vector2 inicio, PuntoRecorrido[] fin) { //Busca el recorrido. Nodo aux = crearRecorrido(inicio, fin); //Crea la lista en orden. listaNodos lista = new listaNodos(); while (aux != null) { lista.ponerNodo(aux.este.EstaPosicion()); aux = aux.padre; } return(lista); }