/formats.py
import pygame
from keygraph import *
from keyhandler import *
from rotowidget import *
from fx import *
from constants import *

red = (255,30,30)
offwhite = (245,245,245)
blue = (30,30,255)
green = (30,255,30)
black = (0,0,0)
darkgray = (20,20,20)
ggray = (200,255,200)

class IIDXFormat:
	keyfile = None
	keystyle = [(1.75,red,black,ggray), (1,offwhite,darkgray,blue),
		    (0.8,blue,black,green), (1,offwhite,darkgray,blue),
		    (0.8,blue,black,green), (1,offwhite,darkgray,blue),
		    (0.8,blue,black,green), (1,offwhite,darkgray,blue)]

	def __init__(self,keyfile):
		self.keyfile = keyfile
		self.kg = (KeyGraph(keyfile,self.keystyle,1,pygame.Rect(0,0,192,400)),
			   KeyGraph(keyfile,self.keystyle,2,pygame.Rect(448,0,192,400)) )
		self.animpic = None
		self.screen = pygame.display.get_surface()
		self.roto = RotoWidget((30,430),25,1.0)
		self.songlength = keyfile.length()
		self.groove = 20.0
		self.groovetext = GlyphText((60,415))
		self.accuracy = 0
		self.nacc = 0

	def setproperties(self,properties):
		if properties.has_key('judgement'):
			j = properties['judgement']
			if j == JUDGE_FGREAT:
				self.groove += 1.0
			elif j == JUDGE_GREAT:
				self.groove += 0.7
			elif j == JUDGE_GOOD:
				self.groove += 0.2
			elif j == JUDGE_BAD:
				self.groove -= 2.0
			elif j == JUDGE_POOR:
				self.groove -= 6.0
			if self.groove > 100.0:
				self.groove = 100.0
			elif self.groove < 0.0:
				self.groove = 0.0
		if 'accuracy' in properties:
			self.accuracy += properties['accuracy']
			self.nacc += 1
			print "accuracy:", self.accuracy / float(self.nacc)
		self.kg[0].setproperties(properties)

	def draw(self, t, bmelist):
		b = self.keyfile.eval_beatfunc(t)
		for bme in bmelist:
			if bme.type == BME_BGA and bme.dataref in self.keyfile.bmps:
				self.animpic = self.keyfile.bmps[bme.dataref]
		self.screen.fill( (20,20,20) )
		for k in self.kg:
			k.t = t
			k.draw()
		if self.animpic:
	                self.screen.fill((0,0,0),(192,112,256,256))
			self.screen.blit(self.animpic,(192,112))
		self.roto.pulsev = self.groove
		self.roto.arcv = (float(t) / self.songlength) * 100
		self.roto.draw(b)
		self.groovetext.settext("%02d" % self.groove)
		self.groovetext.draw(t)
		pygame.display.update()

lightgray = (230,230,230)
graybg = (30,30,30)
yellow = (230,230,0)
yellowbg = (30,30,0)
green = (30,255,30)
greenbg = (0,30,0)
blue = (0,0,230)
bluebg = (0,0,30)
redbg = (30,0,0)

class PopnFormat:
	keyfile = None
	keystyle = [(1,lightgray,graybg), (0.7,yellow,yellowbg),
		    (1,green,greenbg), (0.7,blue,bluebg), (1,red,redbg),
		    (0.7,blue,bluebg), (1,green,greenbg), (0.7,yellow,yellowbg),
		    (1,lightgray,graybg)]

	def __init__(self,keyfile):
		self.keyfile = keyfile
		self.kg = KeyGraph(keyfile,self.keystyle,1,pygame.Rect(256,0,384,400))
		self.kg.bordercolor = black
			  
		self.animpic = None
		self.screen = pygame.display.get_surface()

	def draw(self, t, bmelist):
		for bme in bmelist:
			if bme.type == BME_BGA:
				self.animpic = self.keyfile.bmps[bme.dataref]
		self.screen.fill( (20,20,20) )
		self.kg.t = t
		self.kg.draw()
		if self.animpic:
	                self.screen.fill((0,0,0),(0,112,256,256))
			self.screen.blit(self.animpic,(0,112))
		pygame.display.update()