#!/usr/local/bin/cz --

float params[][4] =
	{4, 0, 0, 2},
	{2, 1, 0, 2},
	{2, 0, 1, 2},
	{2, 0, 1.5, 0.5},
	{6, -0.7, 1, 0},
	{4, -0.3, 0.7, 1},
#	{3, 0, 0, 2},
#	{4, 0, 0, 6},
#	{2, 5, 7, 2},

int dump = 1

use b
Main:
	int size = pow(3, 6)
	space(size, size)
	origin(w_2, h_2+2)   # why +2?  something borken!
	int n = array_size(params)
	float step = 1.0/30
#	float step = 1.0/5
	float delay = 1
	repeat:
		for(i, 0, n):
			sierpinski(0, 0, size, params[i][0], params[i])
			Paint()
			warn("delay")
			if !dump:
				Rsleep(delay)
			if dump:
				repeat(delay/step):
					dump_img_numbered()
			for(f, 0.0, 1.0-step/2, step):
				float p[4]
				int i1 = (i+1) % n
				for(j, 0, 4):
					p[j] = (1-f)*params[i][j] + f*params[i1][j]
				warn("anim")
				sierpinski(0, 0, size, p[0], p)
				Paint()
				if dump:
					dump_img_numbered()
		if dump:
			break
#			Rsleep(fps)
#	for(i, 0.0, 6, 0.5):
#		sierpinski(0, 0, size, i)
#		Paint()
#		sleep(1)

int dump_img_numbered_i = 0
dump_img_numbered:
	char file[30]
	snprintf(file, sizeof(file), "%06d.png", dump_img_numbered_i++)
	dump_img("png", file)

sierpinski(int x, int y, int r, float c, float p[4]):
	rainbow(c*360/12.0)
	rect_fill(x, y, r, r)
	if r >= 3:
		r /= 3
		float c1, c2, c3
		c1 = c+p[1]
		c2 = c+p[2]
		c3 = c+p[3]
		c1 = rmod(c1, 12)
		c2 = rmod(c2, 12)
		c3 = rmod(c3, 12)
		sierpinski(x, y, r, c1, p)
		sierpinski(x+r, y, r, c2, p)
		sierpinski(x+r*2, y, r, c1, p)
		sierpinski(x+r*2, y+r, r, c2, p)
		sierpinski(x+r*2, y+r*2, r, c1, p)
		sierpinski(x+r, y+r*2, r, c2, p)
		sierpinski(x, y+r*2, r, c1, p)
		sierpinski(x, y+r, r, c2, p)
		sierpinski(x+r, y+r, r, c3, p)
