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:


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:


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]