|
entity - entity handle range# - maximum distance of the pick, in world units |
|
Casts a ray forward from an entity and returns the nearest pickable entity 'ahead' of it, or 0 if there is none within range. The ray starts at the entity's position and travels along its z axis - the direction the entity is facing - for up to range units. Point a camera or a gun at something and EntityPick tells you what it is looking at: ideal for crosshair targeting, 'press E to use' prompts, and checking what an NPC is facing. An entity must have a non-zero EntityPickMode to be pickable. The source entity itself is not picked, but anything pickable in the way is - including friendly scenery. After a successful pick, the Picked commands hold the details: PickedX/Y/Z for the point hit, PickedNX/NY/NZ for the normal, PickedEntity and friends for what was hit. See also: CameraPick, LinePick, EntityPickMode, PickedEntity. |
; EntityPick Example
; ------------------
Graphics3D 640,480,0,2
SetBuffer BackBuffer()
camera=CreateCamera()
PositionEntity camera,0,8,-14
RotateEntity camera,25,0,0
light=CreateLight()
RotateEntity light,60,30,0
floor=CreatePlane()
EntityColor floor,60,90,60
; Turret in the centre - EntityPick looks straight down its z axis
turret=CreateCube()
ScaleEntity turret,0.7,0.7,2
PositionEntity turret,0,1,0
EntityColor turret,130,130,150
; Three drones orbit the turret - EntityPickMode 2 makes them pickable
drone1=CreateSphere()
EntityPickMode drone1,2
drone2=CreateSphere()
EntityPickMode drone2,2
drone3=CreateSphere()
EntityPickMode drone3,2
orbit#=0
While Not KeyDown(1)
; March the drones round their orbit
orbit=orbit+1
PositionEntity drone1,Sin(orbit)*7,1,Cos(orbit)*7
PositionEntity drone2,Sin(orbit+120)*7,1,Cos(orbit+120)*7
PositionEntity drone3,Sin(orbit+240)*7,1,Cos(orbit+240)*7
; A/D keys aim the turret
If KeyDown(30) Then TurnEntity turret,0,2,0
If KeyDown(32) Then TurnEntity turret,0,-2,0
; EntityPick: which pickable entity is directly ahead of the turret?
target=EntityPick(turret,20)
; Repaint the drones, then flash the one in the turret's line of sight
EntityColor drone1,60,160,220
EntityColor drone2,60,160,220
EntityColor drone3,60,160,220
If target<>0 Then EntityColor target,255,255,60
; 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
Text 0,0,"A/D: aim the turret Arrow keys: move camera Esc: exit"
If target<>0
Text 0,20,"EntityPick(turret,20) = "+target+" - target locked!"
Else
Text 0,20,"EntityPick(turret,20) = 0 (no drone in the line of sight)"
EndIf
Flip
Wend
End