3 from keyhandler import *
4 from keyfile import BMEListIter
5 from fx import ColumnPulse
6 from constants import *
9 offwhite = (245,245,245)
20 bordercolor = (255,255,255)
21 judgemapping = {JUDGE_FGREAT: ["gfx/great.png","gfx/fgreat.png"],
22 JUDGE_GREAT: ["gfx/great.png"],
23 JUDGE_GOOD: ["gfx/good.png"],
24 JUDGE_BAD: ["gfx/bad.png"],
25 JUDGE_POOR: ["gfx/poor.png"],
27 colmarkmap = {JUDGE_FGREAT: "gfx/dcircle.png",
28 JUDGE_GREAT: "gfx/circle.png",
29 JUDGE_GOOD: "gfx/triangle.png",
30 JUDGE_BAD: "gfx/cross.png",
31 JUDGE_POOR: "gfx/cross.png",
33 numberfiles = ["gfx/glyph/0.png","gfx/glyph/1.png","gfx/glyph/2.png","gfx/glyph/3.png","gfx/glyph/4.png","gfx/glyph/5.png","gfx/glyph/6.png","gfx/glyph/7.png","gfx/glyph/8.png","gfx/glyph/9.png"]
35 def __init__(self, kf, keystyle, player, disprect):
36 self.numkeys = len(keystyle)
38 self.screen = pygame.display.get_surface()
39 self.disprect = disprect
40 self.vheight = disprect.height - 5;
41 self.barrect = pygame.Rect(disprect.left,
46 self.notefilter = BME_NOTE1
48 self.notefilter = BME_NOTE2
50 print "Invalid player given to keygraph: " + kf
54 self.li = BMEListIter(self.keyfile.bmelist)
58 tw = sum(map(lambda x: x[0],keystyle))
60 self.keystyle.append((int(w),x[1],x[2]))
61 w += (x[0] / tw) * (disprect.width - 1)
62 self.keystyle.append((int(w),None,None))
66 for k in self.judgemapping.keys():
67 self.judgeimg[k] = map(lambda y: pygame.image.load(y).convert_alpha(),self.judgemapping[k])
69 for k in self.colmarkmap.keys():
70 if self.colmarkmap[k]:
71 self.colmarkimg[k] = pygame.image.load(self.colmarkmap[k]).convert_alpha()
73 self.colmarkimg[k] = None
74 self.colmarkimg[0] = None
75 self.numberimg = map(lambda y: pygame.image.load(y).convert_alpha(),self.numberfiles)
77 self.kjudgement = [0 for x in range(0,self.numkeys)]
79 self.kjudgetime = [0 for x in range(0,self.numkeys)]
82 # Initialize keypulses (they are neat)
84 for n in range(0,len(keystyle)):
85 x = self.keystyle[n][0] + 1
86 y = self.disprect.top + 0.3 * self.disprect.height
87 w = self.keystyle[n+1][0] - self.keystyle[n][0] - 1
88 h = 0.7 * self.disprect.height - 4
89 self.pulse.append(ColumnPulse(pygame.Rect(x,y,w,h),keystyle[n][3]))
93 def setproperties(self,properties):
106 self.judgement = properties['judgement']
107 self.kjudgement[self.key] = properties['judgement']
108 self.judgetime = self.t
109 self.kjudgetime[self.key] = self.t
110 if self.judgement <= JUDGE_GOOD:
118 self.accuracy = properties['accuracy']
125 imgs.append(self.numberimg[n % 10])
131 self.b = self.keyfile.eval_beatfunc(self.t)
132 for n in range(0,self.numkeys):
133 x = self.disprect.left + self.keystyle[n][0]
134 w = self.keystyle[n+1][0] - self.keystyle[n][0]
135 self.screen.fill(self.keystyle[n][2],
136 (x,self.disprect.top,w,self.disprect.height))
137 for n in range(0,self.numkeys+1):
138 pygame.draw.line(self.screen, self.bordercolor,
139 (self.disprect.left + self.keystyle[n][0], self.disprect.top),
140 (self.disprect.left + self.keystyle[n][0], self.disprect.bottom - 1) )
143 keylist = self.li.window(self.vheight / self.velocity, self.notefilter)
144 pygame.draw.rect(self.screen, (255,0,0), self.barrect)
147 y = self.disprect.top + self.vheight - int((k.beat - self.b) * (self.velocity / distortion))
148 x = self.disprect.left + self.keystyle[k.key][0] + 1
149 w = self.keystyle[k.key+1][0] - self.keystyle[k.key][0] - 1
150 pygame.draw.rect(self.screen, self.keystyle[k.key][1], (x,y,w,5) )
155 if self.t - self.judgetime > 500:
157 elif len(self.judgeimg[self.judgement]) == 0:
160 z = (self.t / 60) % len(self.judgeimg[self.judgement])
161 w = self.judgeimg[self.judgement][z].get_width()
162 x = self.disprect.left + (self.disprect.width / 2) - (w / 2)
163 y = self.disprect.top + self.disprect.height * 0.7
165 imgs = self.numimgs(self.combo)
169 x -= i.get_width() / 2
171 self.screen.blit(i,(x + w,y))
173 self.screen.blit(self.judgeimg[self.judgement][z],(x,y))
175 x = self.disprect.left + self.disprect.width / 2
181 self.screen.fill((255,0,0), (x,y,dx,3))
182 for i in range(0,self.numkeys):
183 if self.t - self.kjudgetime[i] > 300:
184 self.kjudgement[i] = 0
186 x = self.disprect.left + self.keystyle[i][0] + (self.keystyle[i+1][0] - self.keystyle[i][0] - 24) / 2
187 y = self.disprect.bottom - 30
188 if self.colmarkimg[self.kjudgement[i]]:
189 self.screen.blit(self.colmarkimg[self.kjudgement[i]],(x,y))