Blitz3D+ Command Reference

PickedEntity ( )

Parameters

None.

Description

Returns the entity 'picked' by the most recently executed pick command - CameraPick, EntityPick or LinePick.

Returns 0 if the last pick hit nothing.

The pick functions already return the picked entity themselves; PickedEntity simply lets you fetch it again later without re-running the pick - for example in a function that inspects all the Picked state after the pick happened elsewhere.

See also: PickedX, PickedNX, PickedTime, PickedSurface, PickedTriangle.

Example

; PickedEntity Example
; --------------------

Graphics3D 640,480,0,2
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,3,-8

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())

    ; PickedEntity returns whatever the last pick command hit (0 for a miss)
    hit=PickedEntity()

    ; Highlight the picked entity and park the marker on the pick point
    If hit<>0
        If hit<>floor Then EntityColor hit,255,255,255
        ShowEntity marker
        PositionEntity marker,PickedX(),PickedY(),PickedZ()
    Else
        HideEntity marker
    EndIf

    ; Name the picked entity by comparing its handle with our targets
    name$="nothing"
    If hit=cube Then name$="the cube"
    If hit=ball Then name$="the ball"
    If hit=drum Then name$="the drum"
    If hit=floor Then name$="the floor"

    ; 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"
    Text 0,20,"PickedEntity: "+hit+" ("+name$+")"

    Flip

Wend

End

Index