I wrote some code that you can use. In your case, you test if one car is infront of another. In my snippet (which I will put on the codebase), I am checking if a player is in front of a level object.
The code has comments
ObjectInFrontOf( iObject, iInFrontOfObject, fDistance# )
`%Project Title%
`CheckIfInFrontOfObject.dba
`======================
` Make Player
PlayerObject = 1
Make Object Cube PlayerObject, 3.0
Color Object PlayerObject, Rgb(0, 255, 255)
Set Object Emissive PlayerObject, Rgb(0, 255, 255)
Position Object PlayerObject, -10,0,-10
` Make level object to collide into
LevelObject = 2
Make Object Cone LevelObject, 3.0
Set Object Cull LevelObject, 0 ` Now we can see the back of the cone
XRotate Object LevelObject, 90
Fix Object Pivot LevelObject ` Now the X angle is zero, but the cone mesh has been rotated
Color Object LevelObject, Rgb(255, 0,0)
Set Object Emissive LevelObject, Rgb(255, 0, 0)
` Make matrix guide
Make Matrix 1, 40,40,10,10
Position Matrix 1, -20, 0, -20
Position Camera 0,20,-20
Point Camera 0,0,0
Sync On : Sync Rate 60
Do
` Make sure we can see the object
If Object In Screen( PlayerObject ) = 0
Point Camera Object Position X( PlayerObject ), Object Position Y( PlayerObject ), Object Position Z( PlayerObject )
Endif
` Provide keyboard movement
ControlObject( PlayerObject, UpKey() - Downkey(), RightKey() - LeftKey(), 0.25, 5.0)
` Rotate the level object slowly
ControlObject( LevelObject, 0, 0.25, 0, 1.0)
If ObjectInFrontOf( PlayerObject, LevelObject, 5 )
Color Object LevelObject, Rgb(255,0,0)
Set Object Emissive PlayerObject, Rgb(255,0, 0)
Else
Color Object LevelObject, Rgb(0,255,0)
Set Object Emissive PlayerObject, Rgb(0, 255, 255)
Endif
Text 0,0,"Collide in front of this cone to make it green"
Sync
Loop
Function ControlObject( iObject, fForwardForce#, fClockwiseForce#, fMovementSpeed#, fRotateSpeed#)
Move Object iObject, fForwardForce# * fMovementSpeed#
Turn Object Right iObject, fClockwiseForce# * fRotateSpeed#
Endfunction
Function ObjectInFrontOf( iObject, iInFrontOfObject, fDistance# )
` Check if object is colliding before checking if it is in front
If Object Collision( iObject, iInFrontOfObject )
x1# = Object Position X( iInFrontOfObject )
y1# = Object Position Y( iInFrontOfObject )
z1# = Object Position Z( iInFrontOfObject )
` Cast a ray infront
x2# = NewXValue( x1#, Object Angle Y( iInFrontOfObject ), fDistance# )
y2# = y1# ` In this scenario, the player cannot move up or down
` Use this otherwise: Object Position Y( iObject )
` If you wanted to check if the object is pointing upwards towards the player
` aswell, use this: NewYValue( y1#, Object Angle X( iInFrontOfObject ), fDistance# )
z2# = NewZValue( z1#, Object Angle Y( iInFrontOfObject ), fDistance# )
If Intersect Object( iObject, x1#, y1#, z1#, x2#, y2#, z2# ) > 0 Then ExitFunction 1
Endif
Endfunction 0
