home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / aminet / proclib20.lha / ScreenFX / MOVING_RAINBOWS.Amos / MOVING_RAINBOWS.amosSourceCode
AMOS Source Code  |  1993-10-26  |  3KB  |  100 lines

  1. Screen Open 0,320,200,2,0 : Cls 0
  2. _RAIN_SPACE=30 : Rem "Space" between rainbows, in degrees 
  3. _RAIN_SPEED=4 : Rem Maximum speed in pixels per second 
  4. _RAIN_POS=150 : Rem Central position for the rainbows (hardware coordinate)
  5. _RAIN_AMP=70 : Rem 1/2 the distance over which the rainbows move
  6. Dim RYPOS(360+3*_RAIN_SPACE),RHEIGHT(360,3)
  7. ' set up rainbow animation 
  8. SET_MOVING_RAINBOWS[_RAIN_AMP,_RAIN_POS,_RAIN_SPACE,0,_RAIN_SPEED]
  9. ' display rainbows 
  10. _DISPLAY_RAINBOWS[2,_RAIN_SPACE]
  11. ' animate rainbows 
  12. _ANIMATE_RAINBOWS
  13. ' remove rainbows
  14. _REMOVE_RAINBOWS[2,N]
  15. '
  16. Procedure SET_MOVING_RAINBOWS[AMP,POS,RSP2,AFFECTCOL,SPEED]
  17.    Shared RYPOS(),RHEIGHT()
  18.    RSP1=2*RSP2
  19.    RSP0=3*RSP2
  20.    RHT=30
  21.    Restore _LIST
  22.    For R=0 To 3
  23.       Set Rainbow R,AFFECTCOL,30,"","",""
  24.       For N=0 To 14
  25.          Read V : Rain(R,N)=V : Rain(R,29-N)=V
  26.       Next N
  27.    Next R
  28.    _LIST:
  29.    Data $1,$2,$3,$4,$5,$6,$7,$8,$9,$A,$B,$C,$D,$E,$F
  30.    Data $10,$20,$30,$40,$50,$60,$70,$80,$90,$A0,$B0,$C0,$D0,$E0,$F0
  31.    Data $100,$200,$300,$400,$500,$600,$700,$800,$900,$A00,$B00,$C00,$D00,$E00,$F00
  32.    Data $110,$220,$330,$440,$550,$660,$770,$880,$990,$AA0,$BB0,$CC0,$DD0,$EE0,$FF0
  33.    Degree 
  34.    For N=1 To 360
  35.       RYPOS(N)=AMP*Cos(N)+POS
  36.       Y3=AMP*Cos(N)+POS
  37.       Y2=AMP*Cos(N+RSP2)+POS
  38.       Y1=AMP*Cos(N+RSP1)+POS
  39.       Y0=AMP*Cos(N+RSP0)+POS
  40.       D1=RHT
  41.       If Y0<Y1+D1 and Y0>=Y1 Then D1=Y0-Y1
  42.       D2=RHT
  43.       If Y1<Y2+D2 and Y1>=Y2 Then D2=Y1-Y2
  44.       If Y0<Y2+D2 and Y0>=Y2 Then D2=Y0-Y2
  45.       D3=RHT
  46.       If Y2<Y3+D3 and Y2>=Y3 Then D3=Y2-Y3
  47.       If Y1<Y3+D3 and Y1>=Y3 Then D3=Y1-Y3
  48.       If Y0<Y3+D3 and Y0>=Y3 Then D3=Y0-Y3
  49.       RHEIGHT(N,1)=D1
  50.       RHEIGHT(N,2)=D2
  51.       RHEIGHT(N,3)=D3
  52.    Next N
  53.    For N=361 To 360+RSP0
  54.       RYPOS(N)=AMP*Cos(N)+POS
  55.    Next N
  56. End Proc
  57. Procedure _DISPLAY_RAINBOWS[SPEED,RSP2]
  58.    Shared RYPOS(),RHEIGHT()
  59.    RSP1=2*RSP2
  60.    RSP0=3*RSP2
  61.    RHT=30
  62.    Rainbow 0,0,RYPOS(RSP0+1),0
  63.    Rainbow 1,0,RYPOS(RSP1+1),0
  64.    Rainbow 2,0,RYPOS(RSP2+1),0
  65.    Rainbow 3,0,RYPOS(1),0
  66.    For N=0 To RHT Step SPEED
  67.       Rainbow 0,0,,N
  68.       If N<=RHEIGHT(1,1) Then Rainbow 1,0,,N
  69.       If N<=RHEIGHT(1,2) Then Rainbow 2,0,,N
  70.       If N<=RHEIGHT(1,3) Then Rainbow 3,0,,N
  71.       Wait Vbl 
  72.    Next N
  73. End Proc
  74. Procedure _ANIMATE_RAINBOWS
  75.    Shared _RAIN_SPACE,RHEIGHT(),RYPOS(),_RAIN_SPEED
  76.    RSP0=3*_RAIN_SPACE
  77.    RSP1=2*_RAIN_SPACE
  78.    Do 
  79.       For N=1 To 360 Step _RAIN_SPEED
  80.          Rainbow 0,0,RYPOS(N+RSP0),30
  81.          Rainbow 1,0,RYPOS(N+RSP1),RHEIGHT(N,1)
  82.          Rainbow 2,0,RYPOS(N+_RAIN_SPACE),RHEIGHT(N,2)
  83.          Rainbow 3,0,RYPOS(N),RHEIGHT(N,3)
  84.          Wait Vbl : Synchro 
  85.          Exit If Mouse Key=1
  86.       Next N
  87.       Exit If Mouse Key=1
  88.    Loop 
  89. End Proc
  90. Procedure _REMOVE_RAINBOWS[SPEED,POS]
  91.    Shared RHEIGHT()
  92.    RHT=30
  93.    For N2=RHT To 0 Step -SPEED
  94.       Rainbow 0,0,,N2
  95.       If N2<=RHEIGHT(POS,1) Then Rainbow 1,0,,N2
  96.       If N2<=RHEIGHT(POS,2) Then Rainbow 2,0,,N2
  97.       If N2<=RHEIGHT(POS,3) Then Rainbow 3,0,,N2
  98.       Wait Vbl 
  99.    Next N2
  100. End Proc