commit 14ff615b8d47a4584e809ae75b92c695a21019fd
parent 2d851369ec272aff61d0f3d6c12d1e651a80fa87
Author: Devine Lu Linvega <aliceffekt@gmail.com>
Date:   Sat, 24 Aug 2024 16:31:37 -0700
(pond.tal) Added a little demo that draws circles
Diffstat:
1 file changed, 66 insertions(+), 42 deletions(-)
diff --git a/projects/examples/demos/pond.tal b/projects/examples/demos/pond.tal
@@ -6,27 +6,59 @@
 
 |000
 
-	@color $1
-	@circle [ &xc $2 &yc $2 &x $2 &y $2 &r $2 &d $2 ]
+	@circle &xc $2 &yc $2 &x $2 &y $2 &r $2 &d $2
 
 |100
 
 @on-reset ( -> )
 	( | theme )
-	#c2c2 DUP2 .System/r DEO2
+	#2c2c DUP2 .System/r DEO2
 	DUP2 .System/g DEO2
 	.System/b DEO2
 	;on-mouse .Mouse/vector DEO2
+	;on-frame .Screen/vector DEO2
 	BRK
 
 @on-mouse ( -> )
 	#c1 ;touch-chr/down ;touch-chr .Mouse/state DEI ?{ SWP2 }
 	POP2 <update-cursor>
-	.Mouse/state DEI ?{ BRK }
-	( | touch )
-	.Mouse/x DEI2 .Mouse/y DEI2 #0010 #01 <draw-circle>
 	BRK
 
+@on-frame ( -> )
+	( | 30 fps )
+	[ LIT &f $1 ] INCk ,&f STR
+	?{ BRK }
+	( | clear )
+	#0000 DUP2 .Screen/x DEO2
+	.Screen/y DEO2
+	[ LIT2 80 -Screen/pixel ] DEO
+	( | draw )
+	;particles/end ;particles
+	&>l ( -- )
+		( | animate particle )
+		DUP2 <draw-particle>
+		( | increase size )
+		DUP2 #0004 ADD2 LDA2k INC2 SWP2 STA2
+		#0006 ADD2 GTH2k ?&>l
+	POP2 POP2
+	( | add particle )
+	[ LIT &lock $1 ] DUP ?{
+		.Mouse/state DEI ?{ POP BRK }
+		( | touch )
+		.Mouse/x DEI2 #0004 ADD2 .Mouse/y DEI2 #0004 ADD2 <add-particle>
+		[ LIT2 08 _&lock ] STR
+		POP BRK }
+	#01 SUB ,&lock STR
+	BRK
+
+@<add-particle> ( x* y* -- )
+	SWP2 [ LIT2r &ptr =particles ] STH2kr INC2r INC2r STA2
+	STH2kr INC2r INC2r STA2
+	#0001 STH2kr INC2r INC2r STA2
+	STH2r DUP2 ;particles/end LTH2 ?{ POP2 ;particles }
+	,&ptr STR2
+	JMP2r
+
 @<update-cursor> ( color addr* -- )
 	;fill-icn .Screen/addr DEO2
 	#40 <draw-cursor>
@@ -42,8 +74,13 @@
 	.Screen/sprite DEOk DEO
 	JMP2r
 
-@<draw-circle> ( xc* yc* r color -- )
-	( load ) .color STZ
+@<draw-particle> ( addr* -- )
+	LDA2k ,&x STR2
+	INC2 INC2 LDA2k ,&y STR2
+	INC2 INC2 LDA2 [ LIT2 &x $2 ] [ LIT2 &y $2 ] ROT2
+	( >> )
+
+@<draw-circle> ( xc* yc* r* -- )
 	.circle/r STZ2
 	.circle/yc STZ2
 	.circle/xc STZ2
@@ -69,40 +106,25 @@
 	#8000 ADD2 SWP2 #8000 ADD2 LTH2 JMP2r
 
 @<draw-seg> ( -- )
-	.color LDZ .Screen/pixel
-	( | .. )
-	.circle/xc LDZ2 .circle/x LDZ2 ADD2 .Screen/x DEO2
-	.circle/yc LDZ2 .circle/y LDZ2 ADD2 .Screen/y DEO2
-	DEOk
-	( | .. )
-	.circle/xc LDZ2 .circle/x LDZ2 SUB2 .Screen/x DEO2
-	.circle/yc LDZ2 .circle/y LDZ2 ADD2 .Screen/y DEO2
-	DEOk
-	( | .. )
-	.circle/xc LDZ2 .circle/x LDZ2 ADD2 .Screen/x DEO2
-	.circle/yc LDZ2 .circle/y LDZ2 SUB2 .Screen/y DEO2
-	DEOk
-	( | .. )
-	.circle/xc LDZ2 .circle/x LDZ2 SUB2 .Screen/x DEO2
-	.circle/yc LDZ2 .circle/y LDZ2 SUB2 .Screen/y DEO2
-	DEOk
-	( | .. )
-	.circle/xc LDZ2 .circle/y LDZ2 ADD2 .Screen/x DEO2
-	.circle/yc LDZ2 .circle/x LDZ2 ADD2 .Screen/y DEO2
-	DEOk
-	( | .. )
-	.circle/xc LDZ2 .circle/y LDZ2 SUB2 .Screen/x DEO2
-	.circle/yc LDZ2 .circle/x LDZ2 ADD2 .Screen/y DEO2
-	DEOk
-	( | .. )
-	.circle/xc LDZ2 .circle/y LDZ2 ADD2 .Screen/x DEO2
-	.circle/yc LDZ2 .circle/x LDZ2 SUB2 .Screen/y DEO2
-	DEOk
-	( | .. )
-	.circle/xc LDZ2 .circle/y LDZ2 SUB2 .Screen/x DEO2
-	.circle/yc LDZ2 .circle/x LDZ2 SUB2 .Screen/y DEO2
-	DEO
-	JMP2r
+	.circle/xc LDZ2 .circle/x LDZ2 ADD2 .circle/yc LDZ2 .circle/y LDZ2 ADD2 <draw-pixel>
+	.circle/xc LDZ2 .circle/x LDZ2 SUB2 .circle/yc LDZ2 .circle/y LDZ2 ADD2 <draw-pixel>
+	.circle/xc LDZ2 .circle/x LDZ2 ADD2 .circle/yc LDZ2 .circle/y LDZ2 SUB2 <draw-pixel>
+	.circle/xc LDZ2 .circle/x LDZ2 SUB2 .circle/yc LDZ2 .circle/y LDZ2 SUB2 <draw-pixel>
+	.circle/xc LDZ2 .circle/y LDZ2 ADD2 .circle/yc LDZ2 .circle/x LDZ2 ADD2 <draw-pixel>
+	.circle/xc LDZ2 .circle/y LDZ2 SUB2 .circle/yc LDZ2 .circle/x LDZ2 ADD2 <draw-pixel>
+	.circle/xc LDZ2 .circle/y LDZ2 ADD2 .circle/yc LDZ2 .circle/x LDZ2 SUB2 <draw-pixel>
+	.circle/xc LDZ2 .circle/y LDZ2 SUB2 .circle/yc LDZ2 .circle/x LDZ2 SUB2
+	( >> )
+
+@<draw-pixel> ( x* y* -- )
+	DUP2 .Screen/height DEI2 GTH2 ?{
+		.Screen/y DEO2
+		DUP2 .Screen/width DEI2 GTH2 ?{
+			.Screen/x DEO2
+			[ LIT2r 01 -Screen/pixel ] DEOr
+			JMP2r }
+		POP2 JMP2r }
+	POP2 POP2 JMP2r
 
 @touch-chr [
 	0000 0000 0814 1417 0000 0000 0008 0808
@@ -119,3 +141,5 @@
 	ffff ffff ffff ffff ffff ffff ffff ffff
 	ffff ffff ffff ffff ffff ffff ffff ffff ]
 
+@particles $60 &end
+