|
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. |
; 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