REM ***********************************************
REM Title: Radar
REM Author: Phaelax
REM Downloaded from: http://dbcc.zimnox.com/
REM ***********************************************
 
sync on
sync rate 40
hide mouse
randomize timer()
 
rem show us a ground plane
make matrix 1,500,500,40,40
 
rem player object
make object sphere 2,1
color object 2,rgb(255,0,0)
 
`make other objects
for t = 3 to 20
   make object cone t,1
   position object t, rnd(500),0,rnd(500)
   color object t, rgb(255,0,0)
next t
 
width = screen width()/2
height = screen height()/2
 
ink rgb(255,0,0),0
 
do
 
   camera()
   yrotate object 2,camera angle y()
   position object 2, camera position x(),0.5,camera position z()
 
   draw_radar(width,height,100,500,2,3,20)
 
sync
loop
 
 
 
function camera()
 
   speed# = 1
   cx# = camera position x()
   cz# = camera position z()
   a# = camera angle y()
   cxa# = camera angle x()
 
   if shiftkey() then speed# = 3
   if upkey()=1
      cx#=newxvalue(cx#,a#,speed#)
      cz#=newzvalue(cz#,a#,speed#)
   endif
   if downkey()=1
      cx#=newxvalue(cx#,a#,0-speed#)
      cz#=newzvalue(cz#,a#,0-speed#)
   endif
   if leftkey()=1
      cx#=newxvalue(cx#,wrapvalue(a#-90.0),speed#)
      cz#=newzvalue(cz#,wrapvalue(a#-90.0),speed#)
   endif
   if rightkey()=1
      cx#=newxvalue(cx#,wrapvalue(a#+90.0),speed#)
      cz#=newzvalue(cz#,wrapvalue(a#+90.0),speed#)
   endif
 
   a#=wrapvalue(a#+(mousemovex()/3.0))
   cxa#=cxa#+(mousemovey()/3.0)
   if cxa#<-90.0 then cxa#=-90.0
   if cxa#>90.0 then cxa#=90.0
   position camera cx#,1.5,cz#
   rotate camera cxa#,a#,0
endfunction
 
 
 
rem X screen position of radar
rem Y screen position of radar
rem radar's radius
rem radar's range
rem player object
rem starting object number to include in radar checking
rem ending object number to include in radar checking
function draw_radar(x,y,radius,range,obj,aobj,bobj)
 
   rem get player's position
   px# = object position x(obj)
   pz# = object position z(obj)
 
   rem loop through all wanted object
   for t = aobj to bobj
      rem get object's position
      ox# = object position x(t)
      oz# = object position z(t)
 
      rem calculate squared distance
      sqDist# = (px#-ox#)*(px#-ox#) + (pz#-oz#)*(pz#-oz#)
      rem is object within range?
      if sqDist# <= range*range
         rem get angle between object and player (offset angle)
         offAng# = wrapvalue(atanfull(ox#-px#,oz#-pz#))
         ang# = (object angle y(obj) - offAng#)+180
         rem calculate object's distance from player on radar screen
         rem because the distance is squared, we square the other values and avoid
         rem using the sqrt() function. This way, we only have to use 1 instead of 2.
         rDist# = sqrt((sqDist# * (radius*radius)) / (range*range))
         rx# = x + sin(Ang#)*rDist#
         ry# = y + cos(Ang#)*rDist#
         circle rx#, ry#, 1
      endif
   next t
 
   circle x, y, radius
   line x-3,y,x+3,y
   line x,y-3,x,y+3
 
endfunction