uxn-utils/gui/teatime/teatime.tal

188 lines
4.1 KiB
Tal
Raw Normal View History

2024-07-24 13:40:14 -04:00
( teatimer )
|00 @System &vector $2 &expansion $2 &wst $1 &rst $1 &metadata $2 &r $2 &g $2 &b $2 &debug $1 &state $1
|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
|80 @Controller &vector $2 &button $1 &key $1
2024-07-24 14:30:30 -04:00
|90 @Mouse &vector $2 &x $2 &y $1 &ylb $1 &state $1 &chord $1 &pad $4 &scrolly &scrolly-hb $1 &scrolly-lb $1
2024-07-24 13:40:14 -04:00
|c0 @DateTime &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1
|000
2024-07-24 17:18:32 -04:00
( | 15 minutes = 900 seconds, or 0x384 )
( | 0x384 / 2 = 0x1c2 )
2024-07-24 17:29:27 -04:00
( | each minute is 4 bars, of 15 seconds each )
( | 15 minutes )
2024-07-24 13:40:14 -04:00
@remaining-seconds $2
2024-07-24 17:18:32 -04:00
@height $2
2024-07-24 13:40:14 -04:00
2024-07-24 13:46:14 -04:00
|100
@on-reset ( -> )
2024-07-24 13:40:14 -04:00
( | meta )
;meta #06 DEO2
( | theme )
2024-07-24 17:18:32 -04:00
#f0f7 .System/r DEO2
2024-07-24 15:33:30 -04:00
#f0fc .System/g DEO2
2024-07-24 17:18:32 -04:00
#f0f8 .System/b DEO2
2024-07-24 13:40:14 -04:00
( | vector )
;on-frame .Screen/vector DEO2
;on-mouse .Mouse/vector DEO2
( | screen size )
2024-07-24 14:48:24 -04:00
#0148 .Screen/width DEO2
2024-07-24 14:30:30 -04:00
#0110 .Screen/height DEO2
<redraw>
2024-07-24 13:46:14 -04:00
BRK
2024-07-24 13:40:14 -04:00
2024-07-24 15:00:19 -04:00
@on-frame-freeze ( -> )
[ LIT &lock $1 ] INCk ,&lock STR
?{ ;on-frame .Screen/vector DEO2 }
2024-07-24 13:40:14 -04:00
BRK
2024-07-24 15:00:19 -04:00
@on-frame ( -> )
.remaining-seconds LDZ2 ORAk ?{ POP2 BRK }
[ LIT2 40 &f $1 ] INCk ,&f STR
NEQ ?{
[ LIT2 00 _&f ] STR
2024-07-24 15:02:59 -04:00
DUP2 #0001 SUB2 <set-seconds> }
2024-07-24 15:00:19 -04:00
POP2 BRK
2024-07-24 13:40:14 -04:00
@on-mouse ( -> )
2024-07-24 14:30:30 -04:00
#4100 [ LIT2 00 -Mouse/state ] DEI NEQ #30 SFT2 ;hand-icn ADD2 <update-cursor>
.Mouse/state DEI ?{ BRK }
( | down )
2024-07-24 15:00:19 -04:00
<freeze-timer>
2024-07-24 17:29:27 -04:00
.Mouse/y DEI2 #0010 SUB2 DUP2 #00f0 GTH2 ?{ DUP2 #22 SFT2 <set-height> }
2024-07-24 15:33:30 -04:00
POP2 BRK
2024-07-24 13:40:14 -04:00
2024-07-24 13:46:14 -04:00
@meta 00
2024-07-24 17:18:32 -04:00
( name ) "Teatime 0a
( details ) "A 20 "Countdown 20 "Timer 0a
2024-07-24 13:46:14 -04:00
( author ) "By 20 "Dave 20 "Van 20 "Ee 0a
2024-07-24 17:18:32 -04:00
( date ) "24 20 "Jul 20 "2024 $1
2024-07-24 13:46:14 -04:00
( elements ) 00
2024-07-24 13:40:14 -04:00
2024-07-24 14:30:30 -04:00
(
@|core )
2024-07-24 15:00:19 -04:00
@<freeze-timer> ( -- )
;on-frame-freeze .Screen/vector DEO2
#c0 ;on-frame-freeze/lock STA
JMP2r
2024-07-24 15:33:30 -04:00
@<set-height> ( distance* -- )
2024-07-24 17:49:30 -04:00
#00f0 SWP2 SUB2 #02 SFT2 #001f MUL2
2024-07-24 15:02:59 -04:00
2024-07-24 15:33:30 -04:00
@<set-seconds> ( seconds* -- )
2024-07-24 17:18:32 -04:00
DUP2 .remaining-seconds LDZ2 EQU2 ?{ .remaining-seconds STZ2 !<redraw-bar> }
2024-07-24 15:33:30 -04:00
POP2 JMP2r
2024-07-24 14:30:30 -04:00
2024-07-24 13:40:14 -04:00
(
@|drawing )
2024-07-24 13:46:14 -04:00
2024-07-24 14:30:30 -04:00
@<redraw> ( -- )
2024-07-24 14:48:24 -04:00
<redraw-bar>
2024-07-24 17:18:32 -04:00
<draw-markers>
JMP2r
2024-07-24 14:48:24 -04:00
( | markers )
;tick-icn .Screen/addr DEO2
[ LIT2 f1 -Screen/auto ] DEO
#0030 .Screen/x DEO2
#0010 .Screen/y DEO2
2024-07-24 15:33:30 -04:00
[ LIT2r 0f -Screen/sprite ] DEOkr
2024-07-24 14:48:24 -04:00
[ LIT2 d1 -Screen/auto ] DEO
#0030 .Screen/x DEO2
#0090 .Screen/y DEO2
DEOr
( | labels )
2024-07-24 15:33:30 -04:00
#003a .Screen/x DEO2
2024-07-24 14:48:24 -04:00
#000c .Screen/y DEO2
[ LIT2 02 -Screen/auto ] DEO
[ LIT2r =label-tilemap ] #1f00
2024-07-24 15:02:59 -04:00
&>l ( -- )
2024-07-24 14:48:24 -04:00
LDAkr #00 STHr INC2r ;digits ADD2 .Screen/addr DEO2
[ LIT2 05 -Screen/sprite ] DEO
2024-07-24 15:02:59 -04:00
INC GTHk ?&>l
2024-07-24 14:48:24 -04:00
POP2
( | labels, cont )
2024-07-24 15:33:30 -04:00
#0042 .Screen/x DEO2
2024-07-24 14:48:24 -04:00
#000c .Screen/y DEO2
#1f00
2024-07-24 15:02:59 -04:00
&>ll ( -- )
2024-07-24 14:48:24 -04:00
LDAkr #00 STHr INC2r ;digits ADD2 .Screen/addr DEO2
[ LIT2 05 -Screen/sprite ] DEO
2024-07-24 15:02:59 -04:00
INC GTHk ?&>ll
2024-07-24 14:48:24 -04:00
POP2 POP2r JMP2r
2024-07-24 14:30:30 -04:00
2024-07-24 17:18:32 -04:00
@<draw-markers> ( -- )
#00 .Screen/auto DEO
2024-07-24 17:29:27 -04:00
#00f1 #0000
2024-07-24 17:18:32 -04:00
&>l ( -- )
( | every 5th )
DUP #03 AND ?{
DUP2 #0009 ADD2 .Screen/y DEO2
#0030 .Screen/x DEO2
2024-07-24 17:29:27 -04:00
DUP #02 SFT #03 AND #00 EQU #00 SWP #30 SFT2 ;mark-icn ADD2 .Screen/addr DEO2
2024-07-24 17:18:32 -04:00
#05 .Screen/sprite DEO }
INC2 GTH2k ?&>l
POP2 POP2 JMP2r
2024-07-24 14:30:30 -04:00
@<redraw-bar> ( -- )
2024-07-24 17:18:32 -04:00
;halftone-icn .Screen/addr DEO2
2024-07-24 14:30:30 -04:00
( | top )
#0010 .Screen/x DEO2
#0010 .Screen/y DEO2
[ LIT2 f1 -Screen/auto ] DEO
2024-07-24 17:18:32 -04:00
[ LIT2 01 -Screen/sprite ] DEOk DEOk DEOk DEO
2024-07-24 14:30:30 -04:00
( | bottom )
#0010 .Screen/x DEO2
#0090 .Screen/y DEO2
2024-07-24 17:29:27 -04:00
[ LIT2 d1 -Screen/auto ] DEO
2024-07-24 17:18:32 -04:00
[ LIT2 01 -Screen/sprite ] DEOk DEOk DEOk DEO
2024-07-24 14:30:30 -04:00
( >> )
@<draw-bar> ( -- )
2024-07-24 17:49:30 -04:00
( y2 ) .Screen/height DEI2 #0010 SUB2
( y1 ) #0100 .remaining-seconds LDZ2 #001f DIV2 #20 SFT2 SUB2
( | paint )
2024-07-24 17:18:32 -04:00
[ LIT2 32 -Screen/auto ] DEO
;line-icn .Screen/addr DEO2
2024-07-24 14:30:30 -04:00
#0010 .Screen/x DEO2
2024-07-24 17:49:30 -04:00
( | fill )
[ LIT2r 05 -Screen/sprite ]
2024-07-24 14:30:30 -04:00
&>l ( -- )
DUP2 .Screen/y DEO2
DEOkr
INC2 GTH2k ?&>l
POP2 POP2 POP2r JMP2r
2024-07-24 13:40:14 -04:00
2024-07-24 14:30:30 -04:00
@<update-cursor> ( color addr* -- )
[ LIT2 00 -Screen/auto ] DEO
;fill-icn .Screen/addr DEO2
#40 <draw-cursor>
.Screen/addr DEO2
.Mouse/x DEI2 ,<draw-cursor>/x STR2
.Mouse/y DEI2 ,<draw-cursor>/y STR2
( >> )
@<draw-cursor> ( color -- )
[ LIT2 &x $2 ] .Screen/x DEO2
[ LIT2 &y $2 ] .Screen/y DEO2
.Screen/sprite DEO
JMP2r
(
@|stdlib )
@<phex> ( short* -: )
SWP /b
&b ( byte -: )
DUP #04 SFT /c
&c ( byte -: )
#0f AND DUP #09 GTH #27 MUL ADD [ LIT "0 ] ADD #18 DEO
JMP2r
2024-07-24 13:40:14 -04:00
(
@|assets )
2024-07-24 17:18:32 -04:00
~assets.tal
2024-07-24 13:46:14 -04:00