Hi guys i've got this code to move an object at mouse position when you double click somwhere, the prototype works fine but when i move it to my project something goes wrong i don't know what exactly.Istead of placing the object at mouse position to a given distance it place it to camera position.For get pick vector to be accurate i read that camera position must be appended.Also sometimes in the prototype code when you move the mouse near the placed object it ovverides camera condition and move the camera slightly.Here is the code:
sync on
make object sphere 1,10
position object 1,0,0,0
make object sphere 2,10
position object 2,10,0,0
FreeRoamObj = 4
make object sphere FreeRoamObj,10
position object FreeRoamObj,0,0,0
ZOOM#=-300
SPEED# = 0.5
CameraControl(1,3,1,0,200,ZOOM#,0,0,0,SPEED#,1,1,0,0,-180,180,0,0)
double_speed = 350
mouseclicked = 0
do
if mouseclick()=1 and clicked = 0
clicked = 1
if mouseclicked = 1
if (timer()-time) > double_speed/4
mouseclicked = mouseclicked + 1
endif
else
mouseclicked = mouseclicked + 1
endif
endif
if mouseclicked = 0 then time = timer()
if mouseclicked = 2 and (timer()-time) < double_speed
position object FreeRoamObj,x#,y#,z#
mouseclicked = 0
doubleclick = 1
endif
if timer()-time > double_speed then mouseclicked = 0
if mouseclick() = 0 then clicked = 0
if mouseclick() = 2
INC ZOOM#,MOUSEMOVEZ()*.5
CameraControl(1,3,1,0,200,ZOOM#,0,0,0,SPEED#,1,1,0,0,-180,180,0,0)
endif
CamY#=CamY#+MOUSEMOVEX()*SPEED#
CamX#=CamX#+MOUSEMOVEY()*SPEED#
INC ZOOM#,MOUSEMOVEZ()*.5
Zoom(1,3,1,0,200,ZOOM#,0,0,0,SPEED#,1,1,0,0,-180,180,0,0)
if spacekey() = 0 then spacedown = 0
if spacekey() = 1 and spacedown = 0
spacedown = 1
obj = find free object()
make object cube obj, 100
inc numObjects
`dist# = 4 * object size(obj)
pick screen mousex(),mousey(), 3000
position object obj,x#,y#,z#
bSelected=1
endif
`x# = x# + (mousemovex()*1)
`y# = y# - (mousemovey()*1)
pick screen mousex(),mousey(), 3000
x# = get pick vector x()+camera position x()
y# = get pick vector y()+camera position y()
z# = get pick vector z()+camera position z()
if obj <> 0
if object exist(obj) = 1
position object obj,x#,y#,z#
endif
endif
if mouseclick() = 0 then leftmousedown = 0
if mouseclick() = 1 and leftmousedown = 0 and bSelected=0
leftmousedown = 1
obj = pick object (mousex(),mousey(),1,numObjects)
if obj > 0
bSelected=1
endif
endif
selected_object = pick object (mousex(),mousey(),1,10)
text 0,0,"selected_object: "+str$(selected_object)
text 0,20,"fps: "+str$(screen fps())
text 0,40," mouseclicked: "+str$( mouseclicked)
text 0,60,"oposx: "+str$(object position x (FreeRoamObj))+" oposy: "+str$(object position y (FreeRoamObj))+" oposz: "+str$(object position z (FreeRoamObj))
text 0,320,"camposx: "+str$(camera position x())+" camposy: "+str$(camera position y())+" camposz: "+str$(camera position z())
text 0,340,"Freex: "+str$(object position x(FreeRoamObj))+" Freey: "+str$(object position y(FreeRoamObj))+" Freez: "+str$(object position z(FreeRoamObj))
sync
loop
FUNCTION CameraControl(Object, Dummy, Mesh, X#, Y#, Z#, XTilt#,YTilt#,ZTilt#, Speed#, DumX, DumY, ObjX, ObjY, MaxUp#, MaxDown#, MaxLeft#, MaxRight#)
IF OBJECT EXIST(Dummy)=0
DIM CamX#(0)
DIM CamY#(0)
MAKE OBJECT TRIANGLE Dummy, 0,0,0,0,0,0,0,0,0
MAKE MESH FROM OBJECT Mesh, Dummy
ADD LIMB Dummy, 1, Mesh
DELETE MESH Mesh
ENDIF
IF OBJECT EXIST(Dummy)=1
OFFSET LIMB Dummy, 1, X#, Y#, Z#
IF Speed#=0
IF X#=0 AND Y#=0 AND Z#=0
POSITION CAMERA OBJECT POSITION X(Object),OBJECT POSITION Y(Object),OBJECT POSITION Z(Object)
POINT CAMERA OBJECT POSITION X(Object), OBJECT POSITION Y(Object), OBJECT POSITION Z(Object)
ENDIF
ENDIF
IF X#>0 OR Y#>0 OR Z#>0
POSITION OBJECT Dummy, OBJECT POSITION X(Object),OBJECT POSITION Y(Object), OBJECT POSITION Z(Object)
POSITION CAMERA LIMB POSITION X(Dummy, 1),LIMB POSITION Y(Dummy, 1),LIMB POSITION Z(Dummy, Object)
POINT CAMERA OBJECT POSITION X(Object)+XTilt#, OBJECT POSITION Y(Object)+YTilt#, OBJECT POSITION Z(Object)+ZTilt#
ENDIF
IF Speed#>0
IF X#=0 AND Y#=0 AND Z#=0
POSITION CAMERA OBJECT POSITION X(Object),OBJECT POSITION Y(Object),OBJECT POSITION Z(Object)
XROTATE CAMERA CamX#(0)
YROTATE CAMERA CamY#(0)
ENDIF
CamY#(0)=CamY#(0)+MOUSEMOVEX()*Speed#
CamX#(0)=CamX#(0)+MOUSEMOVEY()*Speed#
IF MaxUp#>0 OR MaxUp#<0
IF CamX#(0)<MaxUp# THEN CamX#(0)=MaxUp#
ENDIF
IF MaxDown#>0 OR MaxDown#<0
IF CamX#(0)>MaxDown# THEN CamX#(0)=MaxDown#
ENDIF
IF MaxLeft#>0 OR MaxLeft#<0
IF CamY#(0)<MaxLeft# THEN CamY#(0)=MaxLeft#
ENDIF
IF MaxRight#>0 OR MaxRight#<0
IF CamY#>MaxRight# THEN CamY#=MaxRight#
ENDIF
IF DumX=1
XROTATE OBJECT Dummy,CamX#(0)
ENDIF
IF DumY=1
YROTATE OBJECT Dummy,CamY#(0)
ENDIF
IF ObjX=1
XROTATE OBJECT Object, CamX#(0)
ENDIF
IF ObjY=1
YROTATE OBJECT Object, CamY#(0)
ENDIF
ENDIF
ENDIF
ENDFUNCTION CameraControl
`ZOOM
Function Zoom(Object, Dummy, Mesh, X#, Y#, Z#, XTilt#,YTilt#,ZTilt#, Speed#, DumX, DumY, ObjX, ObjY, MaxUp#, MaxDown#, MaxLeft#, MaxRight#)
IF OBJECT EXIST(Dummy)=0
DIM CamX#(0)
DIM CamY#(0)
MAKE OBJECT TRIANGLE Dummy, 0,0,0,0,0,0,0,0,0
MAKE MESH FROM OBJECT Mesh, Dummy
ADD LIMB Dummy, 1, Mesh
DELETE MESH Mesh
ENDIF
IF OBJECT EXIST(Dummy)=1
OFFSET LIMB Dummy, 1, X#, Y#, Z#
IF Speed#=0
IF Z#=0
POSITION CAMERA OBJECT POSITION X(Object),OBJECT POSITION Y(Object),OBJECT POSITION Z(Object)
POINT CAMERA OBJECT POSITION X(Object), OBJECT POSITION Y(Object), OBJECT POSITION Z(Object)
ENDIF
ENDIF
POSITION OBJECT Dummy, OBJECT POSITION X(Object),OBJECT POSITION Y(Object), OBJECT POSITION Z(Object)
POSITION CAMERA LIMB POSITION X(Dummy, 1),LIMB POSITION Y(Dummy, 1),LIMB POSITION Z(Dummy, Object)
POINT CAMERA OBJECT POSITION X(Object)+XTilt#, OBJECT POSITION Y(Object)+YTilt#, OBJECT POSITION Z(Object)+ZTilt#
IF Speed#>0
IF Z#=0
POSITION CAMERA OBJECT POSITION X(Object),OBJECT POSITION Y(Object),OBJECT POSITION Z(Object)
XROTATE CAMERA CamX#(0)
YROTATE CAMERA CamY#(0)
ENDIF
CamY#(0)=CamY#(0)+MOUSEMOVEX()*Speed#
CamX#(0)=CamX#(0)+MOUSEMOVEY()*Speed#
IF MaxUp#>0 OR MaxUp#<0
IF CamX#(0)<MaxUp# THEN CamX#(0)=MaxUp#
ENDIF
IF MaxDown#>0 OR MaxDown#<0
IF CamX#(0)>MaxDown# THEN CamX#(0)=MaxDown#
ENDIF
IF MaxLeft#>0 OR MaxLeft#<0
IF CamY#(0)<MaxLeft# THEN CamY#(0)=MaxLeft#
ENDIF
IF MaxRight#>0 OR MaxRight#<0
IF CamY#>MaxRight# THEN CamY#=MaxRight#
ENDIF
IF DumX=1
XROTATE OBJECT Dummy,CamX#(0)
ENDIF
IF DumY=1
YROTATE OBJECT Dummy,CamY#(0)
ENDIF
IF ObjX=1
XROTATE OBJECT Object, CamX#(0)
ENDIF
IF ObjY=1
YROTATE OBJECT Object, CamY#(0)
ENDIF
ENDIF
ENDIF
endfunction Zoom
Coding is My Kung Fu!
And My Kung Fu is better than Yours!