/*

simple 2d clock style beat display
~Jeremy Wagner, July 2022
*/

sketch.default2d();
var val = 0;
var theta=-1.5707963268;
var r = 0.8;
var blink =  false;
var myfont = "Sans Serif";
var phase = 0;
var fgcolor = [1,1,1,1];
var bgcolor = [0,0,0,1];
var dir = 1;

draw();

function draw()
{
	var width = box.rect[2] - box.rect[0];
	
	with (sketch) {
		shapeslice(180,1);
		// erase background
		glclearcolor(bgcolor);
		glclear();
		moveto(0,0);
		gllinewidth(1);
		glcolor(fgcolor);
		circle(0.8);
		glcolor(bgcolor);
		circle(0.78);
		glcolor(fgcolor);
		lineto(0.8*Math.cos(theta),0.8*Math.sin(theta));
		moveto(0,0);
		lineto(0,-0.8);
		if(blink){
			blink=false;
			circle(0.2);
			glcolor(bgcolor);
			circle(.15);
		}
		glcolor(fgcolor);
		circle(0.05);
		
		moveto(0,0);
		glcolor(bgcolor);
		circle(0.3);
		glcolor(fgcolor);
		font(myfont);
		fontsize(0.3*width);
		textalign("center","center");
		text((Math.round(phase+0.5)).toString());
		
		
	}
	
}

function bang()
{
	draw();
	refresh();
	outlet(0,val);
}

function msg_float(v)
{	phase = v;
	theta = -(dir*v+.25 % 1.0) * 6.2831853072;
	if(Math.abs(v % 1.0)<0.1){
		blink = true;
	}
	notifyclients();
	bang();
}

function frgb(r,g,b,a)
{
	fgcolor = [r,g,b,a];
	draw();
	refresh();
}

function brgb(r,g,b,a)
{
	bgcolor = [r,g,b,a];
	draw();
	refresh();
}

function setfont(v)
{
	font=v;
	draw();
	refresh();
}

function direction(v)
{
	if(v==-1){
		dir=-1;
	}else{
		dir=1;
	}
	draw();
	refresh();
}

function forcesize(w,h)
{
	if (w!=h) {
		h = w;
		box.size(w,h);
	}
}
forcesize.local = 1; //private

function onresize(w,h)
{
	forcesize(w,h);
	r = 0.4*Math.min(box.rect[2] - box.rect[0], box.rect[3] - box.rect[1]);
	draw();
	refresh();
}
onresize.local = 1; //private
