path_line()

path_line(<fichero>, <gráfico>, <tamaño casilla>, <x>, <y>)

Retorna:

True (1), si se puede ir hasta un punto sin atravesar ningún obstáculo, o false (0) en caso contrario.

Descripción:

Determina si, dentro de un mapa de búsqueda, se puede ir en linea recta hasta un punto (partiendo de las coordenadas actuales del proceso), sin atravesar ningún obstáculo del mapa de búsqueda (en el manual de usuario se puede encontrar información sobre estos mapas).

En caso de querer obtener una ruta para sortear los obstáculos entre dos puntos, se debe utilizar la función path_find(), y para ver si el punto destino está dentro de un obstáculo la función path_free().

El mapa de búsqueda.

Los códigos de <fichero> y <gráfico> se refieren al mapa de búsqueda. Este es una versión reducida del decorado real, donde se aparecen en color negro (el número 0 de la paleta) las zonas libres y con color blanco los obstáculos del mismo.

Como <tamaño casilla> se indica el factor de reducción del mapa de búsqueda, es decir, por cuanto se tendrían que multiplicar el ancho y alto del mismo para mostrarse a tamaño real. Por ejemplo, si para una pantalla de 320x200 se genera un mapa de búsqueda de 160x100, entonces el tamaño de casilla será 2.

A continuación se deben indicar las coordenadas <x> e <y> hacia las que debe dirigirse el proceso (se toma como origen de la ruta las coordenadas actuales del proceso que ejecute la función path_find()).


Programa ejemplo:
PROGRAM ejemplo_path_line;

BEGIN
    load_fpg("help\help.fpg");
    put_screen(0, 7);
    graph=200;
    mouse.graph=200;
    LOOP

        // Mira si puede ir en línea recta hacia el ratón

        IF (path_line(0,201,2,mouse.x,mouse.y))

            IF (fget_dist(x,y,mouse.x,mouse.y)>4)
                xadvance(fget_angle(x,y,mouse.x,mouse.y),4);
                draw(1,24,15,0,x,y,mouse.x,mouse.y);
            ELSE
                x=mouse.x;
                y=mouse.y;
            END
        END

        FRAME;
        delete_draw(all_drawing);
    END
END


En este ejemplo se utiliza el gráfico número 7 del fichero help.fpg como decorado, y el gráfico número 201 del mismo como su mapa de búsqueda. El tamaño de las casillas en el mapa de búsqueda es 2

El proceso principal está continuamente comprobando si se puede ir en línea recta hsata las coordenadas del ratón con la función path_line(). Cuando esto sea posible, se traza la línea con la función draw(), y se avanzan las coordenadas del proceso con la función xadvance().

Para obtener la distancia y el ángulo hacia el cursor del ratón se utilizan las funciones fget_dist() y fget_angle().


Ver: path_find() - path_free()