PickedTime# ( )
Parameters
| None. |
Description
|
Returns how far along the pick ray the most recent pick hit, as a fraction from 0 to 1. Despite the name this is not a duration - it is a position along the ray fired by CameraPick, EntityPick or LinePick. 0 means the hit came right at the ray's start, 0.5 halfway along, 1 at its very end. That makes distances easy: multiply PickedTime by the length of the ray. For EntityPick the ray length is the range you passed, so PickedTime()*range is the distance to the target - a laser rangefinder in one line. For LinePick it is the length of the dx,dy,dz vector; for CameraPick the ray reaches to the camera's far range. If the last pick missed, PickedTime returns 1 - but check the pick command's return value (or PickedEntity) to be sure, since a genuine hit at the ray's very end also gives values close to 1. See also: PickedEntity, PickedX, LinePick, EntityPick, CameraPick. |
Example
; PickedTime Example ; ------------------ Graphics3D 640,480,0,2 SetBuffer BackBuffer() camera=CreateCamera() PositionEntity camera,0,3,-8 ; A short draw range keeps the PickedTime fractions easy to read CameraRange camera,1,50 light=CreateLight() RotateEntity light,45,45,0 ; Shooting-gallery floor - EntityPickMode 2 makes it pickable by its polygons floor=CreatePlane() EntityColor floor,70,110,70 EntityPickMode floor,2 ; Three targets, all pickable by their polygons cube=CreateCube() PositionEntity cube,-3,1,4 EntityPickMode cube,2 ball=CreateSphere() PositionEntity ball,0,1.4,4 EntityPickMode ball,2 drum=CreateCylinder() PositionEntity drum,3,1,4 EntityPickMode drum,2 ; Small marker sphere shows the exact pick point marker=CreateSphere() ScaleEntity marker,0.15,0.15,0.15 EntityColor marker,255,255,0 HideEntity marker bob#=0 While Not KeyDown(1) ; Repaint the targets; the picked one is flashed white below EntityColor cube,200,180,60 EntityColor ball,60,120,220 EntityColor drum,220,80,60 ; The ball bobs gently so the gallery feels alive bob=bob+2 PositionEntity ball,0,1.4+0.4*Sin(bob),4 ; Click to shoot - CameraPick casts a pick ray through the mouse cursor If MouseHit(1) Then CameraPick(camera,MouseX(),MouseY()) ; Highlight the last picked entity and park the marker on the pick point hit=PickedEntity() If hit<>0 If hit<>floor Then EntityColor hit,255,255,255 ShowEntity marker PositionEntity marker,PickedX(),PickedY(),PickedZ() Else HideEntity marker EndIf ; Arrow keys move the camera If KeyDown(200) Then MoveEntity camera,0,0,0.1 If KeyDown(208) Then MoveEntity camera,0,0,-0.1 If KeyDown(203) Then TurnEntity camera,0,1,0 If KeyDown(205) Then TurnEntity camera,0,-1,0 RenderWorld ; Crosshair at the mouse position Rect MouseX()-6,MouseY(),13,1 Rect MouseX(),MouseY()-6,1,13 Text 0,0,"Click a target or the floor to pick it Arrow keys: move camera Esc: exit" ; PickedTime is how far along the pick ray the hit happened ; (0 = at the camera, 1 = the far end of the ray) Text 0,20,"PickedTime: "+PickedTime() Text 0,40,"Near targets give small fractions - pick the far floor for big ones" Flip Wend End
Index