Mouse by Gilfalas6th Nov 2003 17:49
|
---|
Summary This code allows you to click anywhere on a matrix and reports the coordinates of the target area. Description The original version of this code was written by a user called JamesBlond. Although his method is really great it seems to have one disadvantage. It didn't allow you to use matrixes with position y<>0. With my version you can position your matrix(es) anywhere in space (x,y,z) and still accurately find the exact coordinates on where you clicked. This can come in handy for RTS games and such. Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com ` To get the mouse coordinates call the function like this: ` eg. mmcoord(mousex(),mousey(),1,200,200,4000,60) ` - scrx# and scry# are the screen coordinates ` - matnum is the matrix number ` - msizex and msizez are the x and z size of the current matrix ` - r# is the length of the vector and should ideally be equal to the camera range ` - FOV# is the field of view of the camera (make sure you get this value right!) function mmcoord(object,scrx#,scry#,matnum,msizex,msizez,r#,FOV#) ax#=camera angle x() ay#=camera angle y() scrw#=screen width() scrh#=screen height() hmax# = r#*tan(FOV#/2) mh# = (((scrh#/2-scry#)*2)/scrh#)*hmax# wmax# = r#*scrw#/scrh#*tan(FOV#/2) mw# = (((scrx#-scrw#/2)*2)/scrw#)*wmax# cl# = r#*cos(ax#) ch# = -r#*sin(ax#) sl# = mh#*cos(90-ax#) sh# = mh#*sin(90-ax#) ox# = camera position x() + (cl#+sl#)*sin(ay#) + mw#*cos(ay#) oy# = camera position y() + (ch#+sh#) oz# = camera position z() + (cl#+sl#)*cos(ay#) - mw#*sin(ay#) for i#=0 to 1 step (1.0/r#) x# = camera position x() + (ox#-camera position x())*i# y# = camera position y() + (oy#-camera position y())*i# z# = camera position z() + (oz#-camera position z())*i# if x#>=matrix position x(matnum) and x#<=matrix position x(matnum)+msizex and z#>=matrix position z(matnum) and z#<=matrix position z(matnum)+msizez if y#-matrix position y(matnum)+get ground height(matnum,x#,z#)<=0 position object object,x#,matrix position y(matnum)+1,z# exitfunction endif ENDIF next i# endfunction |