Shows how to use the intersect object command and get the coordinates of intersection using the returned distance from that function.
set display mode 800,600,32
REM make a random image
for x=1 to 32
for y=1 to 32
dot x, y, rgb(0,rnd(255),0)
next y
next x
get image 1,1,1,32,32
sync on
backdrop on
autocam off
hide mouse
randomize timer()
REM VARIABLES
y#=100.0
line#=1000.0
REM OBJECTS
for i=1 to 5
make object cube i, 100
position object i, rnd(1000),100,rnd(1000)
next i
for i=6 to 10
make object sphere i, rnd(100)+50
position object i, rnd(1000),100,rnd(1000)
next i
rem make some ground
make object plain 11, 1000,1000
xrotate object 11, 90
position object 11, 500,0,500
texture object 11, 1
scale object texture 11,10,10
set object light 11, 0
REM END OF LINE OBJECT
make object sphere 100,10
color object 100,rgb(255,0,0)
REM ================== MAIN LOOP ===============
DO
gosub PLAYER_CONTROLS
gosub CAMERA_STATUS
d# = cos(cxa#) * line#
ty# = y# - sin(cxa#) * line#
tx# = newxvalue(x#,a#,d#)
tz# = newzvalue(z#,a#,d#)
olddist# = line#
for obj=1 to 11
dist# = intersect object(obj, x#,y#,z#,tx#,ty#,tz#)
if dist# < olddist# and dist# > 0
olddist# = dist#
endif
next obj
dist# = olddist#
if dist# = 0 then dist# = line#
gdist# = cos(cxa#)*dist#
tx# = newxvalue(x#, a#, gdist#)
ty# = y# - sin(cxa#)*dist#
tz# = newzvalue(z#, a#, gdist#)
position object 100,tx#,ty#,tz#
text 1,1,"FPS: "+str$(screen fps())
text 1, 10,"Distance: "+str$(dist#)
set cursor 0,20
print object position x(100)
print object position y(100)
print object position z(100)
sync
loop
REM control player's movement
PLAYER_CONTROLS:
runspeed#=0
if shiftkey()=1 then runspeed#=-5.5
if upkey()=1
x#=newxvalue(x#,a#,6+runspeed#)
z#=newzvalue(z#,a#,6+runspeed#)
endif
if downkey()=1
x#=newxvalue(x#,a#,-6-runspeed#)
z#=newzvalue(z#,a#,-6-runspeed#)
endif
if leftkey()=1
x#=newxvalue(x#,wrapvalue(a#-90.0),6.0+runspeed#)
z#=newzvalue(z#,wrapvalue(a#-90.0),6.0+runspeed#)
endif
if rightkey()=1
x#=newxvalue(x#,wrapvalue(a#+90.0),6.0+runspeed#)
z#=newzvalue(z#,wrapvalue(a#+90.0),6.0+runspeed#)
endif
RETURN
REM control player's angle of site/rotation and position
CAMERA_STATUS:
rem rotate camera according to mouse
a#=wrapvalue(a#+(mousemovex()/3.0))
rem position and rotate camera
cxa#=cxa#+(mousemovey()/3.0)
if cxa#<-90.0 then cxa#=-90.0
if cxa#>90.0 then cxa#=90.0
position camera x#,y#,z#
rotate camera wrapvalue(cxa#),a#,0
RETURN
"eureka" - Archimedes