Leí el manual y no entiendo muy bien la función dot_product(), pues ahí dice que me serviría para lo que quiero, pero quisiera entender como usarla...En la imagen se explica lo que quiero lograr:
(https://dl.dropboxusercontent.com/u/39289049/10961981_10206041711981201_1519455858_n.jpg)
El manual muestra cómo se calcula el "producto punto":
[gml]
dot_product( x1,y1, x2,y2 ) = (x1*x2) + (y1*y2)
[/gml]
y por sus propiedades es igual a |x1,y1|*|x2,y2|*cos(ángulo)
Se puede usar para saber si un objeto está en el rango de visión de otro objeto, pero se me ocurre un método más entendible:
(http://www.comunidadgm.org/preguntas-y-respuestas/como-se-usa-dot_product()-(quiero-identificar-si-un-punto-esta-en-un-angulo)/?action=dlattach;attach=14178;image)
Tenemos al objeto observador en una posición (x, y) y su vector de visión "V" con ángulo de inclinación "a" y ángulo de visión "c", y tenemos otro objeto con posición (ob.x, ob.y), el paso fundamental es saber cuánto mide el ángulo "b", con GML es muy fácil
[gml]
b = point_direction( x,y, ob.x,ob.y );
[/gml]
después se obtiene la diferencia entre los ángulos a y b
[gml]
dif = abs( angle_difference(a,b) );
[/gml]
y por último se compara con el ángulo de visión
[gml]
if( dif <= c/2 ) //el objeto es observado
[/gml]