|
entity - entity handle type - collision type to look for, as assigned with EntityType |
|
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.
; 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