REM Start of BASIC! Program
REM color spiral
REM by mookiebearapps 2019



FN.DEF hue2(hue,r,g,b)

 LET hue1=hue/60

 LET x=1-ABS(MOD(hue1,2)-1)

 SW.BEGIN FLOOR(hue1)

  SW.CASE 0
   LET r1=1:LET g1=x:LET b1=0
   SW.BREAK
  SW.CASE 1
   LET r1=x: LET g1=1:LET b1=0
   SW.BREAK
  SW.CASE 2 
   LET r1=0:LET g1=1:LET b1=x
   SW.BREAK
  SW.CASE 3
   LET r1=0:LET g1=x:LET b1=1
   SW.BREAK
  SW.CASE 4
   LET r1=x:LET g1=0:LET b1=1
   SW.BREAK
  SW.CASE 5
   LET r1=1:LET g1=0:LET b1=x
   SW.BREAK
 SW.END

 r=255*r1
 g=255*g1
 b=255*b1
FN.END


DIM r[361],g[361],b[361]

FOR i=0 TO 360
 call hue2(i,&r[i+1],&g[i+1],&b[i+1])
NEXT

GR.OPEN 255,0,0,0,0,1
GR.SCREEN aw,ah
w=aw/2:h=ah/2
LET h2=h/2
LET w2=w/2
DIM sw[w+1],rd[h+1]

FOR x=0 TO w
 let sw[x+1]=(2^(MAX(x-w/10,1)/w)-1)*360+1
NEXT
FOR y=0 TO h
 let rd[y+1]=(ABS(y-h2)/(h2))*h2+1
NEXT 
GR.SCALE aw/w,ah/h

GR.SET.ANTIALIAS 0
GR.SET.STROKE 1
sweep_angle=15
fill_mode=1
Rd=w/4
t=1
LET fill_mode=1
layers=15

DO
 do
 gr.touch t,x,y
 pause 5
 until t

 IF (rd<>oldrd | oldsw<>sweep_angle)

  GR.CLS

  LET trd=rd
  LET tsweep=sweep_angle
  FOR rd=trd TO 1 STEP -trd/layers
   let sweep_angle*=0.96
   FOR a=0 TO 360 STEP sweep_angle
    

    GR.COLOR 255,r[a+1],g[a+1],b[a+1]


    LET left=w2-rd
    LET top=h2-rd
    LET right=w2+rd
    LET bottom=h2+rd

    GR.ARC arc, left, top, right, bottom, a+d, sweep_angle+2, fill_mode

   NEXT
  NEXT
  LET rd=trd
  LET sweep_angle=tsweep
  GR.RENDER
  LET oldrd=rd
  LET oldsw=sweep_angle
 ENDIF


 LET x*=w/aw
 LET y*=h/ah

 
  IF y<h/2 THEN ds=-3 ELSE ds=3
  LET sweep_angle=sw[x+1]
  LET Rd=rd[y+1]
 
 d+=ds

UNTIL backkey

End

onbackkey:
backkey=1
Back.resume
