'==== TOUCH ZONES INIT ==== 'SETTINGS GLOBAL MAX_ZONE, ZONE_PAL 'STATUS GETTERS GLOBAL CUR_ZONE, ZONE_EVENT, ZONE_IN_X, ZONE_IN_Y, ZONE_RESULT 'INTERNAL GLOBAL ZONE_LAST_X, ZONE_LAST_Y GLOBAL E_DOWN, E_UP, E_OUT, E_DRAG E_DOWN=1 E_UP=2 E_OUT=3 E_DRAG=4 MAX_ZONE=9 DIM GLOBAL ZONEX(MAX_ZONE), ZONEY(MAX_ZONE), ZONEW(MAX_ZONE), ZONEH(MAX_ZONE), ZONEP(MAX_ZONE) TOUCHSCREEN '==== EXAMPLE PROGRAM ==== GLOBAL DRAWPAL FONT 64 CALL RESETZONES BG COPY 0,0,20,16 TO 0,0 PAL 1 TEXT 0,0,"TOUCH ZONES EXAMPLE" 'HIGHLIGHT PALETTE FOR FOLLOWING SETZONE CALLS ZONE_PAL=1 CALL SETZONE(0,1,2,2,2) CALL SETZONE(1,3,2,2,2) CALL SETZONE(2,5,2,2,2) CALL SETZONE(3,15,2,2,2) 'HIGHLIGHT PALETTE FOR CLR BUTTON ZONE_PAL=3 CALL SETZONE(4,17,2,2,2) 'NO HIGHLIGHT FOR DRAW ZONE ZONE_PAL=-1 CALL SETZONE(5,1,5,18,9) DRAWPAL=0 CALL UPDATEDRAWPAL DO CALL UPDATEZONES 'INFO PAL 0 BG FILL 0,15 TO 19,15 CHAR 1 NUMBER 0,15,CUR_ZONE,2 IF ZONE_EVENT=E_DOWN THEN TEXT 3,15,"DOWN" IF ZONE_EVENT=E_DRAG THEN TEXT 3,15,"DRAG" IF ZONE_EVENT=E_UP THEN TEXT 3,15,"UP" IF ZONE_EVENT=E_OUT THEN TEXT 3,15,"OUT" NUMBER 15,15,ZONE_IN_X,2 NUMBER 18,15,ZONE_IN_Y,2 'ZONE EVENT HANDLING IF CUR_ZONE>=0 AND CUR_ZONE<=2 THEN IF ZONE_EVENT=E_UP THEN DRAWPAL=CUR_ZONE IF ZONE_EVENT=E_UP OR ZONE_EVENT=E_OUT THEN CALL UPDATEDRAWPAL ELSE IF CUR_ZONE=3 AND ZONE_EVENT=E_UP THEN PAL DRAWPAL BG FILL 1,5 TO 18,13 CHAR 17 ELSE IF CUR_ZONE=4 AND ZONE_EVENT=E_UP THEN PAL 0 BG FILL 1,5 TO 18,13 CHAR 0 ELSE IF CUR_ZONE=5 AND (ZONE_EVENT=E_DOWN OR ZONE_EVENT=E_DRAG) THEN PAL DRAWPAL CELL 1+ZONE_IN_X,5+ZONE_IN_Y,17 END IF WAIT VBL LOOP SUB UPDATEDRAWPAL FOR I=0 TO 2 CALL PAINTZONE(I,0) NEXT I CALL PAINTZONE(DRAWPAL,1) END SUB '==== TOUCH ZONES SUBPROGRAMS ==== SUB SETZONE(N,X,Y,W,H) ZONEX(N)=X ZONEY(N)=Y ZONEW(N)=W ZONEH(N)=H IF ZONE_PAL>=0 AND ZONE_PAL<8 THEN 'HIGHLIGHT AND NORMAL PALETTE P=CELL.A(X,Y) AND %111 ZONEP(N)=(ZONE_PAL*16)+P ELSE 'NO HIGHLIGHT ZONEP(N)=$FF END IF END SUB SUB CLEARZONE(N) CALL SETZONE(N,0,0,0,0) END SUB SUB RESETZONES FOR I=0 TO MAX_ZONE CALL CLEARZONE(I) NEXT I CUR_ZONE=-1 ZONE_PAL=-1 END SUB SUB UPDATEZONES CX=TOUCH.X\8 CY=TOUCH.Y\8 IF ZONE_EVENT=E_UP OR ZONE_EVENT=E_OUT THEN CUR_ZONE=-1 ZONE_EVENT=0 IF CUR_ZONE>=0 THEN CALL INSIDEZONE(CUR_ZONE,CX,CY) IF ZONE_RESULT THEN ZONE_IN_X=CX-ZONEX(CUR_ZONE) ZONE_IN_Y=CY-ZONEY(CUR_ZONE) IF NOT TOUCH THEN CALL PAINTZONE(CUR_ZONE,0) ZONE_EVENT=E_UP ELSE IF CX<>ZONE_LAST_X OR CY<>ZONE_LAST_Y THEN ZONE_EVENT=E_DRAG END IF ELSE CALL PAINTZONE(CUR_ZONE,0) ZONE_EVENT=E_OUT END IF ELSE IF TAP THEN FOR I=0 TO MAX_ZONE IF ZONEW(I)>0 THEN CALL INSIDEZONE(I,CX,CY) IF ZONE_RESULT THEN ZONE_EVENT=E_DOWN CUR_ZONE=I ZONE_IN_X=CX-ZONEX(I) ZONE_IN_Y=CY-ZONEY(I) CALL PAINTZONE(I,1) END IF END IF NEXT I END IF ZONE_LAST_X=CX ZONE_LAST_Y=CY END SUB SUB INSIDEZONE(N,CX,CY) ZONE_RESULT=(CX>=ZONEX(N) AND CX=ZONEY(N) AND CY$FF THEN IF SEL THEN P=P\16 ELSE P=P MOD 16 BG TINT ZONEX(N),ZONEY(N) TO ZONEX(N)+ZONEW(N)-1,ZONEY(N)+ZONEH(N)-1 PAL P END IF END SUB '======== #1:MAIN PALETTES 003F2A15000F05000038300000342000 003F2A15003F2A15003F2A15003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFF FF80BAA2B2A2A280007F7F7F7F7F7F7F FE0191919191D90101FFFFFFFFFFFFFF FF809AA2A2A29B80007F7F7F7F7F7F7F FE0131293129A90101FFFFFFFFFFFFFF 0101010101010101FFFFFFFFFFFFFFFF 00000000000000FFFFFFFFFFFFFFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FFFFFFFFFFFFFFFF0000000000000000 808080808080807F7F7F7F7F7F7F7FFF 01010101010101FFFFFFFFFFFFFFFFFF FF000000000000FF00FFFFFFFFFFFFFF FE0101010101010101FFFFFFFFFFFFFF FF0000000000000000FFFFFFFFFFFFFF 80808080808080807F7F7F7F7F7F7F7F 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FF8098A4BCA4A480007F7F7F7F7F7F7F FF80B8A4B8A4B880007F7F7F7F7F7F7F FF809CA0A0A09C80007F7F7F7F7F7F7F 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFF 0018181818001800FFE7E7E7E7FFE7FF 006C6C2400000000FF9393DBFFFFFFFF 00247E24247E2400FFDB81DBDB81DBFF 00083E380E3E0800FFF7C1C7F1C1F7FF 0062640810264600FF9D9BF7EFD9B9FF 001C34386E643A00FFE3CBC7919BC5FF 0018183000000000FFE7E7CFFFFFFFFF 000C183030180C00FFF3E7CFCFE7F3FF 0030180C0C183000FFCFE7F3F3E7CFFF 000024187E182400FFFFDBE781E7DBFF 000018187E181800FFFFE7E781E7E7FF 0000000018183000FFFFFFFFE7E7CFFF 000000007E000000FFFFFFFF81FFFFFF 0000000000181800FFFFFFFFFFE7E7FF 00060C1830604000FFF9F3E7CF9FBFFF 003C666E76663C00FFC399918999C3FF 0018381818187E00FFE7C7E7E7E781FF 003C660C18307E00FFC399F3E7CF81FF 003C660C06663C00FFC399F3F999C3FF 0066667E06060600FF999981F9F9F9FF 007E607C06067C00FF819F83F9F983FF 001C307C66663C00FFE3CF839999C3FF 007E060C18303000FF81F9F3E7CFCFFF 003C663C66663C00FFC399C39999C3FF 003C663E06663C00FFC399C1F999C3FF 0000001800180000FFFFFFE7FFE7FFFF 0000001800183000FFFFFFE7FFE7CFFF 00000C1830180C00FFFFF3E7CFE7F3FF 0000007E007E0000FFFFFF81FF81FFFF 000030180C183000FFFFCFE7F3E7CFFF 003C660C18001800FFC399F3E7FFE7FF 003C666E6E603C00FFC39991919FC3FF 00183C667E666600FFE7C399819999FF 007C667C66667C00FF839983999983FF 003C666060663C00FFC3999F9F99C3FF 00786C66666C7800FF879399999387FF 007E607860607E00FF819F879F9F81FF 007E607860606000FF819F879F9F9FFF 003C606E66663C00FFC39F919999C3FF 0066667E66666600FF999981999999FF 003C181818183C00FFC3E7E7E7E7C3FF 001E060606663C00FFE1F9F9F999C3FF 00666C78786C6600FF999387879399FF 0060606060607E00FF9F9F9F9F9F81FF 0042667E7E666600FFBD9981819999FF 0066767E6E666600FF998981919999FF 003C666666663C00FFC399999999C3FF 007C667C60606000FF8399839F9F9FFF 003C66666A6C3E00FFC399999593C1FF 007C667C786C6600FF839983879399FF 003E603C06067C00FFC19FC3F9F983FF 007E181818181800FF81E7E7E7E7E7FF 0066666666663C00FF9999999999C3FF 00666666663C1800FF99999999C3E7FF 0066667E7E664200FF9999818199BDFF 00663C183C666600FF99C3E7C39999FF 0066663C18181800FF9999C3E7E7E7FF 007E0C1830607E00FF81F3E7CF9F81FF 003C303030303C00FFC3CFCFCFCFC3FF 006030180C060200FF9FCFE7F3F9FDFF 003C0C0C0C0C3C00FFC3F3F3F3F3C3FF 00183C6600000000FFE7C399FFFFFFFF 0000000000007E00FFFFFFFFFFFF81FF #3:MAIN BG 00001410010101010101010101010101 01010101010101010101010101010101 01010101010101010101010116001600 16001600160016001600160016001600 16001600160016001600160016001600 16001600010021001500220015002300 15000100010001000100010001000100 01000200030004020502010001001200 13001200130012001300010001000100 01000100010001000100120013001202 13020100010007000700070007000700 07000700070007000700070007000700 07000700070007000700010006000000 00000000000000000000000000000000 00000000000000000000000000000000 00001700060000000000000000000000 00000000000000000000000000000000 00000000000000000000170006000000 00000000000000000000000000000000 00000000000000000000000000000000 00001700060000000000000000000000 00000000000000000000000000000000 00000000000000000000170006000000 00000000000000000000000000000000 00000000000000000000000000000000 00001700060000000000000000000000 00000000000000000000000000000000 00000000000000000000170006000000 00000000000000000000000000000000 00000000000000000000000000000000 00001700060000000000000000000000 00000000000000000000000000000000 00000000000000000000170006000000 00000000000000000000000000000000 00000000000000000000000000000000 00001700070014001400140014001400 14001400140014001400140014001400 14001400140014001400070001000100 01000100010001000100010001000100 01000100010001000100010001000100 01000100