home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / programs / programming / wwbounce / !WWBounce / WWv2Data < prev   
Text File  |  1998-06-24  |  7KB  |  303 lines

  1. # WimpWorks Information File
  2. # WimpWorks © Jaffa Software 1997. All rights reserved.
  3.  
  4. DEF TASKdetails
  5.     Name        WWBounce
  6.     Purpose        ActiveApps Demo
  7.     Author        © Charles Talibard 1998
  8.     Licence        Public Domain
  9.     Version        1.05 (11 March 1998)
  10.     Compress    False
  11.     Memory        0K
  12.     IconbarSide    Right
  13.     IconbarPriority    &00000000
  14.     IconbarSprite    WWBWaiting
  15.     IconbarText    
  16. ENDTASK
  17.  
  18. DEF WEMinclude
  19.     Starter Pack
  20. ENDWEM
  21.  
  22. DEF MENUiconMenu%
  23.     WWBounce
  24.     Info
  25.         S(infoWindow%)
  26.         
  27.     Quit
  28.         
  29.         CLOSEDOWN
  30. ENDMENU
  31.  
  32. DEF SUBR_PROCBounceInit
  33.     Event    0
  34.     Every    -1
  35. DEF PROCBounceInit
  36.   Ball_XPos% = 100
  37.   Ball_YPos% = -100
  38.   Ball_XVel% = 4
  39.   Ball_YVel% = -4
  40.   Ball_Radius% = 30
  41.   
  42.   BUSYOFF
  43.   Active = FALSE
  44.   
  45.   Hello_Ref%  = 0
  46.   Bounce_Ref% = 0
  47.   myID%       = 0 
  48.   
  49.   REDEFINE("R"," ",&F2)
  50.   OPENWINDOW(room)
  51.   
  52.   PROCLocateServer
  53.   WHILE myID%=0
  54.     action%=POLL
  55.     HOUROFF
  56.   ENDWHILE
  57.  
  58.   PROCUpdateWalls  
  59.   DELETEICON(-2, TASKINFO(&03))
  60.   
  61. ENDPROC
  62. ENDSUBR
  63.  
  64. DEF SUBR_PROCBallUpdate
  65.     Event    1
  66.     Every    -1
  67. DEF PROCBallUpdate(time%)
  68.   LOCAL Bounce%, Old_XVel%, Old_YVel%, command$
  69.   
  70.   IF myID% = 0 OR Active = FALSE THEN ENDPROC
  71.   
  72.   Old_XVel% = Ball_XVel%
  73.   Old_YVel% = Ball_YVel%
  74.  
  75.   Ball_XPos% += Ball_XVel%
  76.   Ball_YPos% += Ball_YVel%
  77.   
  78.   IF Ball_XPos% <= WestWall%  THEN Ball_XVel% = -Ball_XVel%:Ball_XPos%=WestWall%:Bounce% = TRUE
  79.   IF Ball_XPos% >= EastWall%  THEN Ball_XVel% = -Ball_XVel%:Ball_XPos%=EastWall%:Bounce% = TRUE
  80.   IF Ball_YPos% >= NorthWall% THEN Ball_YVel% = -Ball_YVel%:Ball_YPos%=NorthWall%:Bounce% = TRUE
  81.   IF Ball_YPos% <= SouthWall% THEN Ball_YVel% = -Ball_YVel%:Ball_YPos%=SouthWall%:Bounce% = TRUE
  82.  
  83.   IF Bounce% THEN
  84.     command$  = STRING$(255," ")
  85.     command$  = "BOUNC "+STR$(myID%)+" "
  86.     command$ += STR$(Ball_XPos%)+" "+STR$(Ball_YPos%)+" "
  87.     command$ += STR$(Old_XVel%)+" "+STR$(Old_YVel%)
  88.     
  89.     Bounce_Ref%=COMMAND("WWHouse",command$)
  90.   ENDIF
  91.   
  92.   OPENWINDOW(room)
  93. '  CLWIN(room)
  94. '  CIRCLEFILL(room,Ball_XPos%,Ball_YPos%,Ball_Radius%,&80ff00)
  95.  
  96.   ' Force a redraw of where the ball was and where the ball now is
  97.   '
  98.   Old_XVel% = ABS(Ball_XVel%)*2
  99.   Old_YVel% = ABS(Ball_YVel%)*2
  100.   SYS "Wimp_ForceRedraw", room, Ball_XPos%-Ball_Radius%-Old_XVel%, Ball_YPos%-Ball_Radius%-Old_YVel%, Ball_XPos%+Ball_Radius%+Old_XVel%, Ball_YPos%+Ball_Radius%+Old_YVel%
  101. ENDPROC
  102. ENDSUBR
  103.  
  104. DEF SUBR_PROCUpdateWalls
  105.     Event    -1
  106.     Every    -1
  107. DEF PROCUpdateWalls
  108.   LOCAL XPos%,YPos%,width%,height%,command$,action%
  109.    
  110.   WINDOWPOS(room,XPos%,YPos%,WestWall%,NorthWall%)
  111.   WINDOWSIZE(room,width%,height%)
  112.   NorthWall% = 0 + NorthWall%
  113.   SouthWall% = 0 - height%
  114.   EastWall%  = width% + WestWall%
  115.   SouthWall% += NorthWall%
  116.   
  117.   command$  = STRING$(255," ")
  118.   command$  = "RESIZ " + STR$(myID%) 
  119.   command$ += " " + STR$(XPos%)
  120.   command$ += " " + STR$(YPos%)
  121.   command$ += " " + STR$(width%)
  122.   command$ += " " + STR$(height%)
  123.   Resize_Ref% = COMMAND("WWHouse",command$)
  124. ENDPROC
  125. ENDSUBR
  126.  
  127. DEF SUBR_PROCToggleActive
  128.     Event    -1
  129.     Every    -1
  130. DEF PROCToggleActive
  131.   IF Active = TRUE THEN PROCActiveOff ELSE PROCActiveOn
  132. ENDPROC
  133. ENDSUBR
  134.  
  135. DEF SUBR_PROCActiveOn
  136.     Event    -1
  137.     Every    -1
  138. DEF PROCActiveOn
  139.   Active = TRUE
  140.   BUSYON
  141.   REDRAW(room)
  142. ENDPROC
  143. ENDSUBR
  144.  
  145. DEF SUBR_PROCActiveOff
  146.     Event    -1
  147.     Every    -1
  148. DEF PROCActiveOff
  149.   Active = FALSE
  150.   BUSYOFF
  151. ENDPROC
  152. ENDSUBR
  153.  
  154. DEF SUBR_PROCBallOff
  155.     Event    -1
  156.     Every    -1
  157. DEF PROCBallOff
  158.   Active = FALSE
  159.   BUSYOFF
  160.   CLWIN(room)
  161. ENDPROC
  162. ENDSUBR
  163.  
  164. DEF SUBR_PROCBallOn
  165.     Event    -1
  166.     Every    -1
  167. DEF PROCBallOn(X%,Y%,XV%,YV%)
  168.   Ball_XPos% = X%
  169.   Ball_YPos% = Y%
  170.   Ball_XVel% = XV%
  171.   Ball_YVel% = YV%
  172.  
  173.   Active = TRUE
  174.   BUSYON
  175.   
  176.   PROCBallUpdate(0)
  177. ENDPROC
  178. ENDSUBR
  179.  
  180. DEF SUBR_PROCPollUpdates
  181.     Event    18
  182.     Every    -1
  183. DEF PROCPollUpdates(block%, action%)
  184.   CASE action% OF
  185.   WHEN 2 : PROCUpdateWalls
  186.   WHEN 3 : CLOSEDOWN
  187.   ENDCASE
  188. ENDPROC
  189. ENDSUBR
  190.  
  191. DEF SUBR_PROCAAReplyHandler
  192.     Event    14
  193.     Every    -1
  194. DEF PROCAAReplyHandler(task$, reference%, reply$)
  195.   CASE reference% OF
  196.   WHEN Hello_Ref% : IF RIGHT$(reply$,1) = "Y" THEN PROCActiveOn ELSE PROCActiveOff
  197.                     reply$=MID$(reply$,7,LEN(reply$)-8)
  198.                     SETTITLE(room,"Room "+reply$)
  199.     
  200.                     myID% = VAL(reply$)
  201.                     
  202.   WHEN Bounce_Ref% : IF reply$="NOBLL" THEN PROCBallOff
  203.   ENDCASE
  204. ENDPROC
  205. ENDSUBR
  206.  
  207. DEF SUBR_FNClosedown
  208.     Event    2
  209.     Every    -1
  210. DEF FNClosedown
  211.   LOCAL myRef%
  212.   myRef% = COMMAND("WWHouse","DYING "+STR$(myID%))
  213. =TRUE
  214. ENDSUBR
  215.  
  216. DEF SUBR_PROCAACommandHandler
  217.     Event    13
  218.     Every    -1
  219. DEF PROCAACommandHandler(task$, reference%, command$)
  220.   LOCAL commandName$,XPos%,YPos%,XVel%,YVel%,param$
  221.  
  222.   IF task$<>"WWHouse" THEN ENDPROC
  223.   
  224.   commandName$  = LEFT$(command$, 5)
  225.   commandName$ += " "+STR$(VAL(MID$(command$,7)))
  226.   
  227.   IF commandName$ = "GETBL "+STR$(myID%) THEN
  228.     param$ = MID$(command$, LEN(commandName$)+2)
  229.     XPos%  = VAL(FNStringToken(param$))
  230.     YPos%  = VAL(FNStringToken(param$))
  231.     XVel%  = VAL(FNStringToken(param$))
  232.     YVel%  = VAL(FNStringToken(param$))
  233.     PROCBallOn(XPos%,YPos%,XVel%,YVel%)
  234.   ENDIF
  235. ENDPROC
  236. ENDSUBR
  237.  
  238. DEF SUBR_FNStringToken
  239.     Event    -1
  240.     Every    -1
  241. DEF FNStringToken(RETURN string$)
  242.   LOCAL next$,pos%
  243.     
  244.   pos%    = INSTR(string$," ")
  245.   next$   = LEFT$(string$, pos%-1)
  246.   string$ = MID$(string$, pos%+1)
  247.   IF pos% = 0 THEN string$=""
  248. =next$
  249. ENDSUBR
  250.  
  251. DEF SUBR_PROCLocateServer
  252.     Event    -1
  253.     Every    -1
  254. DEF PROCLocateServer
  255.   IF myID% <> 0 THEN ENDPROC
  256.   Hello_Ref%  = COMMAND("WWHouse","HELLO")
  257.   AFTER((50 + RND(50)),"PROCLocateServer")
  258. ENDPROC
  259. ENDSUBR
  260.  
  261. DEF SUBR_PROCR
  262.     Event    -1
  263.     Every    -1
  264. DEF PROCR(bigTemp%, smallTemp%, xff%, yff%, window%, bbox%)
  265.   LOCAL x%, y%
  266.   
  267.   ' This is the new redraw procedure - although a bit of a hack
  268.   ' atm, with the next minor version upgrade (ie. >2.18) there will
  269.   ' be an OFFICIAL stub through which you can add your own redraw
  270.   ' code
  271.   
  272.   ' bigTemp%   Block of &100-bytes for temporary use
  273.   ' smallTemp% Block of &010-bytes for temporary use
  274.   ' xff%       X Fiddle Factor (TM) - Add this to internal window
  275.   '            coordinates for a screen position
  276.   ' yff%       Y Fiddle Factor (TM) - Same as for XFF but vertically
  277.   ' window%    Window handle of window being redrawn
  278.   ' bbox%      Pointer to 4 word block of redraw bounding box
  279.   '      +0    x min (inclusive)
  280.   '      +4    y min (inclusive)
  281.   '      +8    x max (exclusive)
  282.   '      +12   y max (exclusive)
  283.   
  284.   IF Active=TRUE AND myID%>0 THEN
  285.      SYS "ColourTrans_SetGCOL",&0080FF00
  286.      x% = Ball_XPos%+xff%
  287.      y% = Ball_YPos%+yff%
  288.      SYS "OS_Plot",4,x%,y%
  289.      SYS "OS_Plot",157,x%+Ball_Radius%,y%
  290.   ELSE
  291.      IF myID%=0 THEN
  292.         SYS "ColourTrans_SetGCOL",&0000FF00
  293.         SYS "OS_Plot",4,xff%+100,yff%-100
  294.         PRINT "No Server Found - Load !WWHouse"
  295.      ENDIF
  296.   ENDIF
  297.   
  298.   ' As we don't use internal redraw routines don't need to call the original
  299.   ' version of PROCR
  300. ENDPROC
  301. ENDSUBR
  302.  
  303.