示例#1
0
    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;
        }
    }
示例#2
0
    //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);
    }