EntityCollided ( entity,type )

Parameters

entity - entity handle
type - collision type to look for, as assigned with EntityType

Description

Returns an entity of the given collision type that collided with an entity, or 0 if none did.

This is the quick, one-call collision query: after UpdateWorld, If EntityCollided( player,TYPE_PICKUP ) tells you a pickup was touched this step and hands you its handle - hide it, add the score, done. It answers for the last UpdateWorld only; nothing carries over between frames.

If several entities of that type collided in the same step, you get the first one recorded. To handle every collision - or to react to many different types - loop 1 to CountCollisions( entity ) with CollisionEntity and GetEntityType instead.

See also: CountCollisions, CollisionEntity, GetEntityType, EntityType, Collisions.

Entity physics (Extended): physical pairs declared by Physics appear in the same collision snapshot, including resting and sleeping contacts. Use EntityHit when you need an impact instead of ongoing contact. Collision results are replaced by the next successful update and affected entries can be invalidated by deletion or rule/type changes.

Example

; EntityCollided Example
; ----------------------

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

; Collision type ids
type_player=1
type_scenery=2

; NOTE: fixed overhead camera - the arrow keys steer the PLAYER, not the camera
camera=CreateCamera()
PositionEntity camera,0,13,-13
RotateEntity camera,45,0,0

light=CreateLight()
RotateEntity light,60,30,0

floor=CreatePlane()
EntityColor floor,70,110,70

; The player ball is the collision SOURCE, so it needs an ellipsoid radius
player=CreateSphere()
EntityColor player,220,60,60
PositionEntity player,0,1,0
EntityRadius player,1
EntityType player,type_player

; Two walls meeting in a corner, plus a crate
wall1=CreateCube()
ScaleEntity wall1,7,1.5,0.5
PositionEntity wall1,0,1.5,7
EntityType wall1,type_scenery

wall2=CreateCube()
ScaleEntity wall2,0.5,1.5,7
PositionEntity wall2,7,1.5,0
EntityType wall2,type_scenery

crate=CreateCube()
ScaleEntity crate,1.2,1.2,1.2
PositionEntity crate,-4,1.2,3
EntityType crate,type_scenery

; Ellipsoid-to-polygon collisions with a sliding response
Collisions type_player,type_scenery,2,2

While Not KeyDown(1)

    ; Repaint the scenery; the entity being touched is flashed white below
    EntityColor wall1,150,150,160
    EntityColor wall2,150,150,160
    EntityColor crate,200,160,60

    ; Arrow keys steer the player ball
    If KeyDown(200) Then MoveEntity player,0,0,0.1
    If KeyDown(208) Then MoveEntity player,0,0,-0.1
    If KeyDown(203) Then MoveEntity player,-0.1,0,0
    If KeyDown(205) Then MoveEntity player,0.1,0,0

    ; UpdateWorld performs the collision checks and the slide response
    UpdateWorld

    ; EntityCollided: did the ball hit any entity of type_scenery this update?
    hit=EntityCollided(player,type_scenery)
    If hit<>0 Then EntityColor hit,255,255,255

    RenderWorld

    Text 0,0,"Arrow keys: drive the ball into the walls and crate   Esc: exit"
    If hit<>0
        name$="?"
        If hit=wall1 Then name$="back wall"
        If hit=wall2 Then name$="side wall"
        If hit=crate Then name$="crate"
        Text 0,20,"EntityCollided(player,type_scenery) = "+hit+" ("+name$+")"
    Else
        Text 0,20,"EntityCollided(player,type_scenery) = 0 - not touching anything"
    EndIf

    Flip

Wend

End

Index