Rem FX Mini Browser
Rem Created: 28/06/2003 03:57:13

rem Init app
sync on : sync rate 60 : hide mouse : backdrop off

rem Obtain information on shader capabilities
vs#=get maximum vertex shader version()
ps#=get maximum pixel shader version()

rem Screen dimensions
gap=screen height()/20
topline=gap+60
halfwidth=screen width()/2
middleline=screen width()/2
bottomline=screen height()-gap
verthalfline=topline+((bottomline-topline)/2)
rightline=screen width()-gap
displaymax=((bottomline-topline)/18)-2
valuesdisplaymax=((bottomline-(verthalfline+gap))/18)-2
displaywidthmax=((middleline-leftline)/10)-2
valuesdisplaywidthmax=((rightline-middleline)/10)-9

rem Create list of FX files
dim list$(0) : empty array list$()
scandir("fx","")
listmax=2+array count(list$())
listtop=1

rem Create list of Effect Values
type valuestype name$ vartype hooked endtype
dim values$(0) as valuestype : empty array values$()
valuesmax=1+array count(values$())
valuestop=1

rem Setup camera and light for preview camera
position camera 0,0,0,-1000
make camera 1 : set camera view 1,middleline,topline,rightline,verthalfline
set camera aspect 1,(rightline-middleline)/((verthalfline-topline)+0.0)
backdrop on 1 : color backdrop 1,0

rem Current vars
highlight=1 : valueshighlight=1 : loadeffect=1

rem Initialise interface screen
gosub _initscreen

rem Move around world
do

rem control interface
if invalues=0
 `
 rem control list highlight
 if scancode()=0 then keypress=0
 if keypress=0
  if upkey()=1 and highlight>1 then dec highlight : keypress=1
  if downkey()=1 and highlightlisttop+displaymax then listtop=highlight-displaymax
 if highlight1 then dec valueshighlight : keypress=1
  if downkey()=1 and valueshighlightvaluestop+valuesdisplaymax then valuestop=valueshighlight-valuesdisplaymax
 if valueshighlight-1
 effect$=list$(loadeffect-1)
 gosub _loadmodelandeffect
 loadeffect=-1
endif

rem Rotate any model in view
if object exist(1)=1
 yrotate object 1,wrapvalue(object angle y(1)+1)
endif

rem Move light around slightly
l#=l#+4.0 : set point light 0,camera position x(1)+(cos(l#)*2),camera position y(1)+(sin(l#)*2),camera position z(1)-1

rem refresh interface
gosub _refreshscreen

rem update screen
sync

rem end loop
loop

`
` Subroutines for Interface
`

_initscreen:

rem Clear screen
create bitmap 1,screen width(),screen height()
set current camera 0 : draw to back
cls rgb(192,192,192)

rem Setup font
set text font "Courier New"
set text transparent

rem Write labels
set text size 20
ink rgb(0,0,0),0 : center text halfwidth,(gap/2)-10,"DBPRO FX MINI-BROWSER"
set text size 16
center text halfwidth,(gap/2)+10,"[ARROWKEYS] TO NAVIGATE  [TAB] TO TOGGLE  [T] TRANSPOSE TOGGLE"
center text gap+((middleline-(gap*2))/2),topline-20,"FX FILES"
center text middleline+((rightline-middleline)/2),topline-20,"PREVIEW AREA"
center text middleline+((rightline-middleline)/2),verthalfline+gap-20,"EFFECT VALUES"
center text halfwidth,bottomline+(gap/2)-10,"VERTEX SHADER VERSION:"+str$(vs#)+"  PIXEL SHADER VERSION:"+str$(ps#)

rem Text for boxout
set current bitmap 0
set text opaque

return

_refreshscreen:

rem Clear screen
set current camera 0
copy bitmap 1,0

ink rgb(0,0,0),rgb(192,192,192)
if invalues=0
 center text halfwidth,(gap/2)+30,"[RETURN] TO USE AUTO-SPHERE  [SPACE] TO LOAD EFFECT"
else
 center text halfwidth,(gap/2)+30,"[SPACE] TO SET RANDOM VALUE TO EFFECT VALUE"
endif

rem Panel for FX list
ink 0,0 : box gap,topline,middleline-gap,bottomline
ink rgb(255,255,255),0
for n=0 to displaymax
 if listtop+n-1
  file$=get file name$()
  if file$="." or file$=".."
   rem ignore . and ..
  else
   if get file type()=1
    scandir(file$,rel$+file$+"\")
    find first
    if fin>0
     for t=1 to fin : find next : next t
    endif
   else
    if lower$(right$(file$,3))=".fx"
     array insert at bottom list$()
     list$()=rel$+file$
    endif
   endif
  endif
  find next
  fin=fin+1
 endwhile
 set dir ".."
 `
endfunction