// VoicePrintDonut.vtx
// Author - MrC
// Based on VoicePrint.r4 by Gordon Williams

VoicePrint	vp;
Map map;
float time = 0;
float minX;

float rx,rxamt,ry,ryamt;

void Init()
{
	vp.LoadColourMap("huemap.jpg");
	vp.SetSpeed(0.5);

	for (int y=0;y<24;y=y+1)
	{
		for (int x=0;x<32;x=x+1)
		{
			float dx = (x-16)/16.0;
			float dy = (y-12)/12.0;
			float s = (Mag(dx,dy))-1.5;
			map.SetValues(x, y, dx*s, dy*s, 1, 1, 1);
		}
	}
	
}

void Render()
{
	gfxPushMatrix();
	minX = 0.75f - BASS;
	if (minX<0.5f) minX=0.5f;
	if (minX>0.99f) minX=0.99f;

	vp.SetRect(minX, 0, 0.5, 0.99);

	vp.Render();

	gfxSetRenderTarget(map);
	gfxSetTexture(vp);
	gfxSetAspect(0);
	gfxTranslate(0, 0, 2.414);
	gfxTexRect(-1, 1, 1, -1);

	map.Render();
	gfxSetRenderTarget(0);
	gfxSetTexture(map);
	gfxTexRect(-1, 1, 1, -1);

	gfxPopMatrix();

	time += TIMEPASS;

	gfxSetTexture(vp);
	gfxTranslate(0, 0, 2.0f-(BASS* 0.5f));

	if (BASS>0.3) rxamt = 1;
	if (BASS<-0.3) rxamt = -1;
	if (TREBLE>0.3) ryamt = 1;
	if (TREBLE<-0.3) ryamt = -1;
	rx = rx + (rxamt*TIMEPASS);
	ry = ry + (ryamt*TIMEPASS);

	gfxRotate(-70+(Sin(time)*12),1,0,0);
	gfxRotate(rx*90,0,0,1);
	gfxRotate(ry*90,0,1,0);

	gfxColour(1, 1, 1, 1);
	gfxSetAspect(1);
	gfxCube(-0.25f, -0.25f, -0.25f, 0.25f, 0.25f, 0.25f);
	
}