home *** CD-ROM | disk | FTP | other *** search
- # WimpWorks Information File
- # WimpWorks © Jaffa Software 1997. All rights reserved.
-
- DEF TASKdetails
- Name WWBounce
- Purpose ActiveApps Demo
- Author © Charles Talibard 1998
- Licence Public Domain
- Version 1.05 (11 March 1998)
- Compress False
- Memory 0K
- IconbarSide Right
- IconbarPriority &00000000
- IconbarSprite WWBWaiting
- IconbarText
- ENDTASK
-
- DEF WEMinclude
- Starter Pack
- ENDWEM
-
- DEF MENUiconMenu%
- WWBounce
- Info
- S(infoWindow%)
-
- Quit
-
- CLOSEDOWN
- ENDMENU
-
- DEF SUBR_PROCBounceInit
- Event 0
- Every -1
- DEF PROCBounceInit
- Ball_XPos% = 100
- Ball_YPos% = -100
- Ball_XVel% = 4
- Ball_YVel% = -4
- Ball_Radius% = 30
-
- BUSYOFF
- Active = FALSE
-
- Hello_Ref% = 0
- Bounce_Ref% = 0
- myID% = 0
-
- REDEFINE("R"," ",&F2)
- OPENWINDOW(room)
-
- PROCLocateServer
- WHILE myID%=0
- action%=POLL
- HOUROFF
- ENDWHILE
-
- PROCUpdateWalls
- DELETEICON(-2, TASKINFO(&03))
-
- ENDPROC
- ENDSUBR
-
- DEF SUBR_PROCBallUpdate
- Event 1
- Every -1
- DEF PROCBallUpdate(time%)
- LOCAL Bounce%, Old_XVel%, Old_YVel%, command$
-
- IF myID% = 0 OR Active = FALSE THEN ENDPROC
-
- Old_XVel% = Ball_XVel%
- Old_YVel% = Ball_YVel%
-
- Ball_XPos% += Ball_XVel%
- Ball_YPos% += Ball_YVel%
-
- IF Ball_XPos% <= WestWall% THEN Ball_XVel% = -Ball_XVel%:Ball_XPos%=WestWall%:Bounce% = TRUE
- IF Ball_XPos% >= EastWall% THEN Ball_XVel% = -Ball_XVel%:Ball_XPos%=EastWall%:Bounce% = TRUE
- IF Ball_YPos% >= NorthWall% THEN Ball_YVel% = -Ball_YVel%:Ball_YPos%=NorthWall%:Bounce% = TRUE
- IF Ball_YPos% <= SouthWall% THEN Ball_YVel% = -Ball_YVel%:Ball_YPos%=SouthWall%:Bounce% = TRUE
-
- IF Bounce% THEN
- command$ = STRING$(255," ")
- command$ = "BOUNC "+STR$(myID%)+" "
- command$ += STR$(Ball_XPos%)+" "+STR$(Ball_YPos%)+" "
- command$ += STR$(Old_XVel%)+" "+STR$(Old_YVel%)
-
- Bounce_Ref%=COMMAND("WWHouse",command$)
- ENDIF
-
- OPENWINDOW(room)
- ' CLWIN(room)
- ' CIRCLEFILL(room,Ball_XPos%,Ball_YPos%,Ball_Radius%,&80ff00)
-
- ' Force a redraw of where the ball was and where the ball now is
- '
- Old_XVel% = ABS(Ball_XVel%)*2
- Old_YVel% = ABS(Ball_YVel%)*2
- 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%
- ENDPROC
- ENDSUBR
-
- DEF SUBR_PROCUpdateWalls
- Event -1
- Every -1
- DEF PROCUpdateWalls
- LOCAL XPos%,YPos%,width%,height%,command$,action%
-
- WINDOWPOS(room,XPos%,YPos%,WestWall%,NorthWall%)
- WINDOWSIZE(room,width%,height%)
- NorthWall% = 0 + NorthWall%
- SouthWall% = 0 - height%
- EastWall% = width% + WestWall%
- SouthWall% += NorthWall%
-
- command$ = STRING$(255," ")
- command$ = "RESIZ " + STR$(myID%)
- command$ += " " + STR$(XPos%)
- command$ += " " + STR$(YPos%)
- command$ += " " + STR$(width%)
- command$ += " " + STR$(height%)
- Resize_Ref% = COMMAND("WWHouse",command$)
- ENDPROC
- ENDSUBR
-
- DEF SUBR_PROCToggleActive
- Event -1
- Every -1
- DEF PROCToggleActive
- IF Active = TRUE THEN PROCActiveOff ELSE PROCActiveOn
- ENDPROC
- ENDSUBR
-
- DEF SUBR_PROCActiveOn
- Event -1
- Every -1
- DEF PROCActiveOn
- Active = TRUE
- BUSYON
- REDRAW(room)
- ENDPROC
- ENDSUBR
-
- DEF SUBR_PROCActiveOff
- Event -1
- Every -1
- DEF PROCActiveOff
- Active = FALSE
- BUSYOFF
- ENDPROC
- ENDSUBR
-
- DEF SUBR_PROCBallOff
- Event -1
- Every -1
- DEF PROCBallOff
- Active = FALSE
- BUSYOFF
- CLWIN(room)
- ENDPROC
- ENDSUBR
-
- DEF SUBR_PROCBallOn
- Event -1
- Every -1
- DEF PROCBallOn(X%,Y%,XV%,YV%)
- Ball_XPos% = X%
- Ball_YPos% = Y%
- Ball_XVel% = XV%
- Ball_YVel% = YV%
-
- Active = TRUE
- BUSYON
-
- PROCBallUpdate(0)
- ENDPROC
- ENDSUBR
-
- DEF SUBR_PROCPollUpdates
- Event 18
- Every -1
- DEF PROCPollUpdates(block%, action%)
- CASE action% OF
- WHEN 2 : PROCUpdateWalls
- WHEN 3 : CLOSEDOWN
- ENDCASE
- ENDPROC
- ENDSUBR
-
- DEF SUBR_PROCAAReplyHandler
- Event 14
- Every -1
- DEF PROCAAReplyHandler(task$, reference%, reply$)
- CASE reference% OF
- WHEN Hello_Ref% : IF RIGHT$(reply$,1) = "Y" THEN PROCActiveOn ELSE PROCActiveOff
- reply$=MID$(reply$,7,LEN(reply$)-8)
- SETTITLE(room,"Room "+reply$)
-
- myID% = VAL(reply$)
-
- WHEN Bounce_Ref% : IF reply$="NOBLL" THEN PROCBallOff
- ENDCASE
- ENDPROC
- ENDSUBR
-
- DEF SUBR_FNClosedown
- Event 2
- Every -1
- DEF FNClosedown
- LOCAL myRef%
- myRef% = COMMAND("WWHouse","DYING "+STR$(myID%))
- =TRUE
- ENDSUBR
-
- DEF SUBR_PROCAACommandHandler
- Event 13
- Every -1
- DEF PROCAACommandHandler(task$, reference%, command$)
- LOCAL commandName$,XPos%,YPos%,XVel%,YVel%,param$
-
- IF task$<>"WWHouse" THEN ENDPROC
-
- commandName$ = LEFT$(command$, 5)
- commandName$ += " "+STR$(VAL(MID$(command$,7)))
-
- IF commandName$ = "GETBL "+STR$(myID%) THEN
- param$ = MID$(command$, LEN(commandName$)+2)
- XPos% = VAL(FNStringToken(param$))
- YPos% = VAL(FNStringToken(param$))
- XVel% = VAL(FNStringToken(param$))
- YVel% = VAL(FNStringToken(param$))
- PROCBallOn(XPos%,YPos%,XVel%,YVel%)
- ENDIF
- ENDPROC
- ENDSUBR
-
- DEF SUBR_FNStringToken
- Event -1
- Every -1
- DEF FNStringToken(RETURN string$)
- LOCAL next$,pos%
-
- pos% = INSTR(string$," ")
- next$ = LEFT$(string$, pos%-1)
- string$ = MID$(string$, pos%+1)
- IF pos% = 0 THEN string$=""
- =next$
- ENDSUBR
-
- DEF SUBR_PROCLocateServer
- Event -1
- Every -1
- DEF PROCLocateServer
- IF myID% <> 0 THEN ENDPROC
- Hello_Ref% = COMMAND("WWHouse","HELLO")
- AFTER((50 + RND(50)),"PROCLocateServer")
- ENDPROC
- ENDSUBR
-
- DEF SUBR_PROCR
- Event -1
- Every -1
- DEF PROCR(bigTemp%, smallTemp%, xff%, yff%, window%, bbox%)
- LOCAL x%, y%
-
- ' This is the new redraw procedure - although a bit of a hack
- ' atm, with the next minor version upgrade (ie. >2.18) there will
- ' be an OFFICIAL stub through which you can add your own redraw
- ' code
-
- ' bigTemp% Block of &100-bytes for temporary use
- ' smallTemp% Block of &010-bytes for temporary use
- ' xff% X Fiddle Factor (TM) - Add this to internal window
- ' coordinates for a screen position
- ' yff% Y Fiddle Factor (TM) - Same as for XFF but vertically
- ' window% Window handle of window being redrawn
- ' bbox% Pointer to 4 word block of redraw bounding box
- ' +0 x min (inclusive)
- ' +4 y min (inclusive)
- ' +8 x max (exclusive)
- ' +12 y max (exclusive)
-
- IF Active=TRUE AND myID%>0 THEN
- SYS "ColourTrans_SetGCOL",&0080FF00
- x% = Ball_XPos%+xff%
- y% = Ball_YPos%+yff%
- SYS "OS_Plot",4,x%,y%
- SYS "OS_Plot",157,x%+Ball_Radius%,y%
- ELSE
- IF myID%=0 THEN
- SYS "ColourTrans_SetGCOL",&0000FF00
- SYS "OS_Plot",4,xff%+100,yff%-100
- PRINT "No Server Found - Load !WWHouse"
- ENDIF
- ENDIF
-
- ' As we don't use internal redraw routines don't need to call the original
- ' version of PROCR
- ENDPROC
- ENDSUBR
-
-