Rem Pick Object Rem Created: 14/07/2003 18:54:11 rem Init app sync on : sync rate 60 rem Make floor make object plain 1,300,300 position object 1,0,-50,0 xrotate object 1,270 rem Make object to drag make object cube 2,100 set shadow shading on 2 rem Setup camera and light set point light 0,-100,500,-100 position camera -200,0,-200 point camera 0,0,0 rem main loop do rem Call drag subroutine gosub _drag_object rem User prompt center text 320,20,"CLICK AND HOLD OBJECT TO DRAG - RIGHT BUTTON TO ROTATE" rem Update screen sync rem End loop loop _drag_object: if mouseclick()=0 then pickmode=0 : cursorobj=0 mclick=mouseclick() if mclick>0 if pickmode=0 cursorobj=pick object(mousex(),mousey(),2,2) if cursorobj>0 pickmode=mclick pickdistance#=get pick distance() pickfromx#=get pick vector x() pickfromy#=get pick vector y() pickfromz#=get pick vector z() if pickmode=1 objx#=object position x(cursorobj) objy#=object position y(cursorobj) objz#=object position z(cursorobj) else objx#=object angle x(cursorobj) objy#=object angle y(cursorobj) objz#=object angle z(cursorobj) pickdiffx#=mousemovey() : pickdiffx#=0 pickdiffy#=mousemovex() : pickdiffy#=0 endif else highlightobj=0 endif endif if pickmode>0 if pickmode=1 pick screen mousex(),mousey(),pickdistance# picktox#=get pick vector x() picktoy#=get pick vector y() picktoz#=get pick vector z() pickdiffx#=picktox#-pickfromx# pickdiffy#=picktoy#-pickfromy# pickdiffz#=picktoz#-pickfromz# grid=0 if grid=1 pickdiffx#=int(pickdiffx#/5)*5 pickdiffy#=int(pickdiffy#/5)*5 pickdiffz#=int(pickdiffz#/5)*5 endif position object cursorobj,objx#+pickdiffx#,objy#+pickdiffy#,objz#+pickdiffz# else pickdiffx#=pickdiffx#+mousemovey() pickdiffy#=pickdiffy#+mousemovex() grid=0 if grid=1 tpickdiffx#=int(pickdiffx#/22.5)*22.5 tpickdiffy#=int(pickdiffy#/22.5)*22.5 else tpickdiffx#=pickdiffx# tpickdiffy#=pickdiffy# endif rotate object cursorobj,wrapvalue(objx#-tpickdiffx#),wrapvalue(objy#-tpickdiffy#),objz# endif endif endif return