Initial commit from version 1e-99
[beatscape.git] / formats.py
1 import pygame
2 from keygraph import *
3 from keyhandler import *
4 from rotowidget import *
5 from fx import *
6 from constants import *
7
8 red = (255,30,30)
9 offwhite = (245,245,245)
10 blue = (30,30,255)
11 green = (30,255,30)
12 black = (0,0,0)
13 darkgray = (20,20,20)
14 ggray = (200,255,200)
15
16 class IIDXFormat:
17         keyfile = None
18         keystyle = [(1.75,red,black,ggray), (1,offwhite,darkgray,blue),
19                     (0.8,blue,black,green), (1,offwhite,darkgray,blue),
20                     (0.8,blue,black,green), (1,offwhite,darkgray,blue),
21                     (0.8,blue,black,green), (1,offwhite,darkgray,blue)]
22
23         def __init__(self,keyfile):
24                 self.keyfile = keyfile
25                 self.kg = (KeyGraph(keyfile,self.keystyle,1,pygame.Rect(0,0,192,400)),
26                            KeyGraph(keyfile,self.keystyle,2,pygame.Rect(448,0,192,400)) )
27                 self.animpic = None
28                 self.screen = pygame.display.get_surface()
29                 self.roto = RotoWidget((30,430),25,1.0)
30                 self.songlength = keyfile.length()
31                 self.groove = 20.0
32                 self.groovetext = GlyphText((60,415))
33                 self.accuracy = 0
34                 self.nacc = 0
35
36         def setproperties(self,properties):
37                 if properties.has_key('judgement'):
38                         j = properties['judgement']
39                         if j == JUDGE_FGREAT:
40                                 self.groove += 1.0
41                         elif j == JUDGE_GREAT:
42                                 self.groove += 0.7
43                         elif j == JUDGE_GOOD:
44                                 self.groove += 0.2
45                         elif j == JUDGE_BAD:
46                                 self.groove -= 2.0
47                         elif j == JUDGE_POOR:
48                                 self.groove -= 6.0
49                         if self.groove > 100.0:
50                                 self.groove = 100.0
51                         elif self.groove < 0.0:
52                                 self.groove = 0.0
53                 if 'accuracy' in properties:
54                         self.accuracy += properties['accuracy']
55                         self.nacc += 1
56                         print "accuracy:", self.accuracy / float(self.nacc)
57                 self.kg[0].setproperties(properties)
58
59         def draw(self, t, bmelist):
60                 b = self.keyfile.eval_beatfunc(t)
61                 for bme in bmelist:
62                         if bme.type == BME_BGA and bme.dataref in self.keyfile.bmps:
63                                 self.animpic = self.keyfile.bmps[bme.dataref]
64                 self.screen.fill( (20,20,20) )
65                 for k in self.kg:
66                         k.t = t
67                         k.draw()
68                 if self.animpic:
69                         self.screen.fill((0,0,0),(192,112,256,256))
70                         self.screen.blit(self.animpic,(192,112))
71                 self.roto.pulsev = self.groove
72                 self.roto.arcv = (float(t) / self.songlength) * 100
73                 self.roto.draw(b)
74                 self.groovetext.settext("%02d" % self.groove)
75                 self.groovetext.draw(t)
76                 pygame.display.update()
77
78 lightgray = (230,230,230)
79 graybg = (30,30,30)
80 yellow = (230,230,0)
81 yellowbg = (30,30,0)
82 green = (30,255,30)
83 greenbg = (0,30,0)
84 blue = (0,0,230)
85 bluebg = (0,0,30)
86 redbg = (30,0,0)
87
88 class PopnFormat:
89         keyfile = None
90         keystyle = [(1,lightgray,graybg), (0.7,yellow,yellowbg),
91                     (1,green,greenbg), (0.7,blue,bluebg), (1,red,redbg),
92                     (0.7,blue,bluebg), (1,green,greenbg), (0.7,yellow,yellowbg),
93                     (1,lightgray,graybg)]
94
95         def __init__(self,keyfile):
96                 self.keyfile = keyfile
97                 self.kg = KeyGraph(keyfile,self.keystyle,1,pygame.Rect(256,0,384,400))
98                 self.kg.bordercolor = black
99                           
100                 self.animpic = None
101                 self.screen = pygame.display.get_surface()
102
103         def draw(self, t, bmelist):
104                 for bme in bmelist:
105                         if bme.type == BME_BGA:
106                                 self.animpic = self.keyfile.bmps[bme.dataref]
107                 self.screen.fill( (20,20,20) )
108                 self.kg.t = t
109                 self.kg.draw()
110                 if self.animpic:
111                         self.screen.fill((0,0,0),(0,112,256,256))
112                         self.screen.blit(self.animpic,(0,112))
113                 pygame.display.update()
114