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