info@shuvit.org 2 years ago
parent
commit
6974ef5f9f
6 changed files with 1253 additions and 157 deletions
  1. 2
    2
      config.txt
  2. 6
    0
      defender_scores.sco
  3. 35
    3
      lib/FSM.py
  4. 767
    0
      lib/StatesDefender.py
  5. 412
    152
      lib/StatesProg.py
  6. 31
    0
      main.py

+ 2
- 2
config.txt View File

1
-default_song = phat
2
-theme = red2
1
+default_song = snaps
2
+theme = default
3
 title = default
3
 title = default
4
 bpm = 90
4
 bpm = 90
5
 volume = 10
5
 volume = 10

+ 6
- 0
defender_scores.sco View File

1
+name1 = zilla
2
+name2 = robzilla
3
+name3 = zilla
4
+score1 = 1950
5
+score2 = 2050
6
+score3 = 2050

+ 35
- 3
lib/FSM.py View File

1
 
1
 
2
 import StatesProg
2
 import StatesProg
3
-   
3
+import StatesDefender   
4
 #====================================
4
 #====================================
5
 class Transition(object):
5
 class Transition(object):
6
     def __init__(self, toState):
6
     def __init__(self, toState):
8
     def Execute(self):
8
     def Execute(self):
9
         pass
9
         pass
10
                         
10
                         
11
-#===================================
11
+#===================================-
12
                         
12
                         
13
 class FSM(object):
13
 class FSM(object):
14
     def __init__ (self, character, owner):
14
     def __init__ (self, character, owner):
22
         self.owner = owner
22
         self.owner = owner
23
         self.name = None
23
         self.name = None
24
         self.last_state_notes = None
24
         self.last_state_notes = None
25
+        self.queued_state = None
25
         
26
         
26
     def AddTransition(self, transName, transition):
27
     def AddTransition(self, transName, transition):
27
         self.transitions[transName] = transition
28
         self.transitions[transName] = transition
88
         'Ping', 
89
         'Ping', 
89
         'Wifi',
90
         'Wifi',
90
         'Defender',
91
         'Defender',
91
-        'Update'
92
+        'Update',
93
+        'Calculator'
92
         ]
94
         ]
93
         
95
         
94
         for s in state_list:
96
         for s in state_list:
104
 
106
 
105
 #=================================== 
107
 #=================================== 
106
         
108
         
109
+class DefenderFSM(Char):
110
+    def __init__(self, owner):
111
+        self.FSM = FSM(self, owner)
112
+        self.owner = owner
113
+        
114
+        state_list = [
115
+        'Startup',
116
+        'Intro',
117
+        'Main',
118
+        'BlueFade',
119
+        'GreyFade',
120
+        'GameOver',
121
+        'HighScore',
122
+        'NewHighScore',
123
+        'EnterText'
124
+        ]
125
+        
126
+        for s in state_list:
127
+            self.FSM.AddState(s, getattr(StatesDefender, s)(self.FSM))
128
+            t = 'to' + s
129
+            self.FSM.AddTransition(t, Transition(s))
130
+        
131
+        if self.FSM.curState == None:
132
+            self.FSM.SetState('Startup')
133
+    
134
+    def Execute(self):
135
+        self.FSM.Execute(self.owner)    
136
+
137
+#=================================== 
138
+        

+ 767
- 0
lib/StatesDefender.py View File

1
+import random
2
+import time
3
+import pygame
4
+import sys
5
+import pyaudio
6
+import wave
7
+import glob
8
+import os
9
+import ast 
10
+from configobj import ConfigObj
11
+from itertools import cycle
12
+
13
+class Game:
14
+	def __init__(self, o):
15
+		self.o = o
16
+		
17
+		self.last_frame_time = time.perf_counter()	
18
+		self.bullets = []
19
+		self.bullet_speed = 80
20
+		self.delta = 0.00001
21
+		self.sidebar_width = 80
22
+		self.gw = o.width - self.sidebar_width
23
+		self.score = 0
24
+		self.time = 0
25
+		self.player = Player(o, self)
26
+		self.enemies = []
27
+		self.birth = pygame.time.get_ticks()
28
+		self.last_enemy_spawn = pygame.time.get_ticks()
29
+		self.enemy_spawn_delay = 2000
30
+		self.explodes = []
31
+		self.explode_speed = 80
32
+		self.hs_name = ""
33
+		self.speed_mult = 1.0
34
+		self.speed_mult_inc = .1
35
+		self.mult_state = 3
36
+		# self.hs_n1 = "billy"
37
+		# self.hs_n2 = "joe"
38
+		# self.hs_n3 = "robzilla"
39
+		# self.hs_s1 = 10
40
+		# self.hs_s2 = 40
41
+		# self.hs_s3 = 100
42
+		self.load_highscore()
43
+		#self.save_highscore()
44
+		self.game_over = False
45
+		
46
+		print('aaay making a game')
47
+
48
+	def update(self):
49
+		self.delta = time.perf_counter() - self.last_frame_time
50
+		self.last_frame_time = time.perf_counter()
51
+		#print(self.delta)
52
+		self.o.draw.rectangle((0, 0, self.o.width, self.o.height), outline=0, fill=self.o.blue)
53
+		#print('playing game ', self.player.posy)
54
+		self.mstime = (pygame.time.get_ticks() - self.birth)
55
+		self.time = int(self.mstime * .001)
56
+		if self.time > self.mult_state:
57
+			self.mult_state += 3
58
+			if self.speed_mult < 2.5:
59
+				self.speed_mult += self.speed_mult_inc
60
+			if self.enemy_spawn_delay > 1000:
61
+				self.enemy_spawn_delay -= 50
62
+			print('....level up ', self.speed_mult)
63
+		#print(self.mstime % 100.0)
64
+		#if self.mstime % 100.0 == 0:
65
+			#print('up level')
66
+			#self.speed_mult += self.speed_mult_inc
67
+		self.enemy_spawner()
68
+		self.draw_bullets()
69
+		self.draw_enemies()
70
+		self.draw_explodes()
71
+		self.player.update(self.delta)
72
+		self.draw_sidebar()
73
+		self.o.update_display(self.o)
74
+
75
+	def draw_bullets(self):
76
+		for x in self.bullets:
77
+			x.check_collision()
78
+			x.update()
79
+			x.draw()
80
+
81
+	def draw_enemies(self):
82
+		for x in self.enemies:
83
+			x.check_collision()
84
+			x.update()
85
+			x.draw()
86
+
87
+	def draw_explodes(self):
88
+		for x in self.explodes:
89
+			#x.check_collision()
90
+			x.update()
91
+			x.draw()
92
+
93
+	def draw_sidebar(self):
94
+		w = self.o.width - self.sidebar_width
95
+		self.o.draw.rectangle((w, 0, self.o.width, self.o.height), outline=0, fill=self.o.light_grey)
96
+		inc = 40
97
+		h = 10
98
+		self.o.center_block("Score", self.o.h2, [w, h, self.o.width, h + 10], self.o.blue)
99
+		h += inc
100
+		self.o.center_block(str(self.score), self.o.h2, [w, 15, self.o.width, h + 10], self.o.blue)
101
+		h += (inc * 2)
102
+		self.o.center_block("Time", self.o.h2, [w, 30, self.o.width, h + 10], self.o.blue)
103
+		h += inc
104
+		self.o.center_block(str(self.time), self.o.h2, [w, 40, self.o.width, h + 10], self.o.blue)
105
+
106
+	def enemy_spawner(self):
107
+		sl = pygame.time.get_ticks() - self.last_enemy_spawn
108
+		if len(self.enemies) < 1 or sl > self.enemy_spawn_delay:
109
+			new_e = Enemy(self.o, self)
110
+			self.enemies.append(new_e)
111
+			self.last_enemy_spawn = pygame.time.get_ticks()
112
+
113
+
114
+	def save_highscore(self):
115
+		base_dir = "/home/pi/zpc_ct/"
116
+		title = "defender_scores"
117
+		fname = base_dir + title + '.sco'
118
+		if os.path.exists(fname):
119
+			os.utime(fname, None)
120
+			print(fname, ' exists')
121
+		else:
122
+			print('make a damn file ', fname)
123
+			open(fname, 'a').close()			
124
+
125
+		self.sconf = ConfigObj(fname)
126
+		self.sconf['name1'] = self.hs_n1
127
+		self.sconf['name2'] = self.hs_n2
128
+		self.sconf['name3'] = self.hs_n3
129
+		self.sconf['score1'] = self.hs_s1
130
+		self.sconf['score2'] = self.hs_s2
131
+		self.sconf['score3'] = self.hs_s3
132
+		
133
+		self.sconf.write()
134
+
135
+	def load_highscore(self):
136
+		base_dir = "/home/pi/zpc_ct/"
137
+		self.sconf = ConfigObj(base_dir + 'defender_scores.sco')
138
+		self.hs_n1 = self.sconf['name1']
139
+		self.hs_n2 = self.sconf['name2']
140
+		self.hs_n3 = self.sconf['name3']
141
+		self.hs_s1 = self.sconf.as_int('score1')
142
+		self.hs_s2 = self.sconf.as_int('score2')
143
+		self.hs_s3 = self.sconf.as_int('score3')
144
+		
145
+
146
+class Player:
147
+	def __init__(self, o, game):
148
+		self.o = o
149
+		self.game = game
150
+		self.width = 28
151
+		self.height = 12
152
+		self.speed = 80
153
+		self.posx = game.gw / 2
154
+		self.posy = o.height - self.height
155
+		
156
+
157
+	def update(self, delta):
158
+		self.check_keys(delta)
159
+		self.draw_player()
160
+		#check position
161
+		#pass
162
+	def draw_player(self):
163
+		hw = self.width / 2
164
+		hh = self.height / 2
165
+		self.o.draw.rectangle(((self.posx - hw), (self.posy - hh), (self.posx + hw), (self.posy + hh)), outline=self.o.light_grey, fill=self.o.light_grey)
166
+		self.o.draw.rectangle(((self.posx - (hw/4)), (self.posy - self.height), (self.posx + (hw/4)), (self.posy + hh)), outline=self.o.light_grey, fill=self.o.light_grey)
167
+
168
+
169
+	def check_keys(self, delta):
170
+		if self.o.keyState[0] == 2:
171
+			if self.posx > 0:
172
+				self.posx -= self.speed * delta
173
+		elif self.o.keyState[3] == 2:
174
+			if self.posx < self.o.width:
175
+				self.posx += self.speed * delta
176
+
177
+		elif self.o.keyState[1] == 1 or self.o.keyState[2] == 1:
178
+			self.game.bullets.append(Bullet(self.o, self.game, self.posx))
179
+
180
+class Bullet:
181
+	def __init__(self, o, game, x):
182
+		self.o = o
183
+		self.game = game
184
+		self.posx = x
185
+		self.posy = 110
186
+		self.width = 3
187
+		self.height = 10
188
+
189
+	def draw(self):
190
+		hw = self.width / 2
191
+		hh = self.height / 2
192
+		self.o.draw.rectangle(((self.posx - hw), (self.posy - hh), (self.posx + hw), (self.posy + hh)), outline=0, fill=self.o.light_grey)		
193
+
194
+	def update(self):
195
+		self.posy -= self.game.bullet_speed * self.game.delta
196
+		if self.posy < 0:
197
+			self.game.bullets.remove(self)
198
+			#print('killing bullet ', len(self.game.bullets))
199
+		self.draw()
200
+
201
+	def check_collision(self):
202
+		pass
203
+
204
+class Enemy:
205
+	def __init__(self, o, game):
206
+		self.o = o
207
+		self.game = game
208
+		self.posx = game.gw / 2
209
+		self.posy = -20
210
+		self.width = 20
211
+		self.height = 15
212
+		self.speed = random.randrange(15, 30) * game.speed_mult
213
+		self.xspeed = random.randrange(0, 30) * game.speed_mult
214
+		self.point_value = 50
215
+
216
+		self.ydir = random.choice([-1, 1])
217
+
218
+	def draw(self):
219
+			hw = self.width / 2
220
+			hh = self.height / 2
221
+			self.o.draw.rectangle(((self.posx - hw), (self.posy - hh), (self.posx + hw), (self.posy + hh)), outline=self.o.light_grey, fill=self.o.light_grey)		
222
+			self.o.draw.rectangle(((self.posx - hw + 5), (self.posy - hh + 10), (self.posx + hw - 5), (self.posy + hh)), outline=self.o.blue, fill=self.o.blue)		
223
+			#eyes
224
+			# self.o.draw.rectangle(((self.posx - 8), (self.posy - 5), (self.posx - 5), (self.posy - 3)), outline=self.o.blue, fill=self.o.blue)		
225
+			# self.o.draw.rectangle(((self.posx + 8), (self.posy - 5), (self.posx + 5), (self.posy - 3)), outline=self.o.blue, fill=self.o.blue)		
226
+
227
+			self.o.draw.rectangle(((self.posx - 8), (self.posy - 4), (self.posx - 2), (self.posy - 3)), outline=self.o.blue, fill=self.o.blue)		
228
+			self.o.draw.rectangle(((self.posx + 8), (self.posy - 4), (self.posx + 2), (self.posy - 3)), outline=self.o.blue, fill=self.o.blue)		
229
+
230
+	def update(self):
231
+		self.posy += self.speed * self.game.delta
232
+		self.posx += (self.xspeed * self.ydir * self.game.delta)
233
+		self.check_collision()
234
+
235
+		if self.posy > self.o.height:
236
+			self.game.enemies.remove(self)
237
+			#print('killing enemy ', len(self.game.enemies))
238
+			self.game.game_over = True
239
+
240
+		if self.posx > (self.game.gw - (self.width / 2)):
241
+			self.ydir = -1
242
+		elif self.posx < (0 + (self.width / 2)):
243
+			self.ydir = 1
244
+
245
+		self.draw()
246
+
247
+	def check_collision(self):
248
+
249
+		for b in self.game.bullets:
250
+			xdist = abs(b.posx - self.posx)
251
+
252
+			if xdist < self.width / 2:
253
+				ydist = abs(b.posy - self.posy)
254
+				if ydist < self.height / 2:
255
+					#print('hit ', xdist)
256
+					self.game.score += self.point_value
257
+					if b in self.game.bullets:
258
+						self.game.bullets.remove(b)
259
+					self.die()
260
+				#else:
261
+					#print('no y hit ', ydist)
262
+			#else:
263
+				#print('no x hit ', xdist)
264
+
265
+	def die(self):
266
+		if self in self.game.enemies:
267
+			self.game.enemies.remove(self)
268
+			#print('enemy shot ', len(self.game.enemies))
269
+			self.game.explodes.append(Explode(self.o, self.game, self.posx, self.posy))
270
+
271
+class Explode:
272
+	def __init__(self, o, game, x, y):
273
+		self.o = o
274
+		self.game = game
275
+		self.posx = x
276
+		self.posy = y
277
+		self.width = 16
278
+		self.height = 14
279
+		self.gap = 5
280
+		self.scale_speed = 80
281
+
282
+	def draw(self):
283
+		hw = self.width / 2
284
+		hh = self.height / 2
285
+		c1 = [self.posx + self.gap, self.posy - self.gap]
286
+		c2 = [self.posx - self.gap, self.posy - self.gap]
287
+		c3 = [self.posx + self.gap, self.posy + self.gap]
288
+		c4 = [self.posx - self.gap, self.posy + self.gap]
289
+		
290
+		self.o.draw.rectangle(((c1[0] - hw), (c1[1] - hh), (c1[0] + hw), (c1[1] + hh)), outline=0, fill=self.o.light_grey)		
291
+		self.o.draw.rectangle(((c2[0] - hw), (c2[1] - hh), (c2[0] + hw), (c2[1] + hh)), outline=0, fill=self.o.light_grey)		
292
+		self.o.draw.rectangle(((c3[0] - hw), (c3[1] - hh), (c3[0] + hw), (c3[1] + hh)), outline=0, fill=self.o.light_grey)		
293
+		self.o.draw.rectangle(((c4[0] - hw), (c4[1] - hh), (c4[0] + hw), (c4[1] + hh)), outline=0, fill=self.o.light_grey)		
294
+
295
+	def update(self):
296
+		#self.posy -= self.game.bullet_speed * self.game.delta
297
+		self.gap += self.game.explode_speed * self.game.delta
298
+		self.width -= self.scale_speed * self.game.delta
299
+		self.height -= self.scale_speed * self.game.delta
300
+		if self.gap > 20:
301
+			self.game.explodes.remove(self)
302
+			print('killing explosion ', len(self.game.explodes))
303
+		self.draw()
304
+
305
+	def check_collision(self):
306
+		pass
307
+
308
+#====================================     
309
+
310
+State = type("State", (object,), {})
311
+#====================================     
312
+class State(object):
313
+	def __init__(self, FSM):
314
+		self.FSM = FSM
315
+		self.timer = 0
316
+		self.startTime = 0
317
+	def Enter(self):
318
+		self.timer = 0
319
+		self.startTime = 0
320
+	def Execute(self):
321
+		print('Executing')
322
+	def Exit(self):
323
+		print('Exiting')
324
+
325
+#==================================== 
326
+
327
+class Example(State):
328
+	def __init__(self,FSM):
329
+		super(Example, self).__init__(FSM)    
330
+		
331
+	def Enter(self):
332
+		self.FSM.stateLife = 1
333
+		super(Example, self).Enter()        
334
+		
335
+	def Execute(self):
336
+		self.FSM.stateLife += 1
337
+		
338
+	def Exit(self):
339
+		pass
340
+
341
+#==================================== 
342
+
343
+class Startup(State):
344
+	def __init__(self,FSM):
345
+		super(Startup, self).__init__(FSM)    
346
+		
347
+	def Enter(self):
348
+		self.FSM.stateLife = 1
349
+		self.birth = time.perf_counter()
350
+		super(Startup, self).Enter()        
351
+		
352
+	def Execute(self):
353
+		print('defender startup state')
354
+		self.FSM.ToTransition('toIntro')
355
+		
356
+	def Exit(self):
357
+		pass
358
+
359
+#==================================== 
360
+			
361
+class Intro(State):
362
+	def __init__(self,FSM):
363
+		super(Intro, self).__init__(FSM)    
364
+		
365
+	def Enter(self):
366
+		self.birth = time.perf_counter()
367
+		o = self.FSM.owner 
368
+		o.draw.rectangle((0, 0, o.width, o.height), outline=0, fill=o.blue)
369
+		o.center_block("Welcome To Defender", o.h2, [0, 0, o.width, o.height], o.light_grey)
370
+		o.update_display(0)
371
+		super(Intro, self).Enter()        
372
+		
373
+	def Execute(self):
374
+		#print('doing defender intro ', (time.perf_counter() - self.birth))
375
+		if (time.perf_counter() - self.birth) > 2:
376
+			print('time is up')
377
+			self.FSM.queued_state = "toMain"
378
+			self.FSM.ToTransition('toBlueFade')
379
+			#self.FSM.ToTransition('toMain')
380
+
381
+	def Exit(self):
382
+		pass
383
+
384
+#==================================== 
385
+
386
+#==================================== 
387
+			
388
+class Main(State):
389
+	def __init__(self,FSM):
390
+		super(Main, self).__init__(FSM)    
391
+		
392
+	def Enter(self):
393
+		print('hello defender main')
394
+		o = self.FSM.owner 
395
+		o.draw.rectangle((0, 0, o.width, o.height), outline=0, fill=o.blue)
396
+		o.update_display(0)
397
+		self.game = Game(o)
398
+		o.game = self.game
399
+
400
+		super(Main, self).Enter()        
401
+		
402
+	def Execute(self):
403
+		self.game.update()
404
+		if self.game.game_over:
405
+			
406
+			self.FSM.queued_state = "toGameOver"
407
+			self.FSM.ToTransition('toBlueFade')
408
+
409
+	def Exit(self):
410
+		pass
411
+
412
+#==================================== 
413
+
414
+class BlueFade(State):
415
+	def __init__(self,FSM):
416
+		super(BlueFade, self).__init__(FSM)    
417
+		
418
+	def Enter(self):
419
+		self.FSM.stateLife = 1
420
+		self.birth = pygame.time.get_ticks()
421
+		self.last_frame_time = time.perf_counter()	
422
+		self.o = self.FSM.owner 
423
+		self.x = self.o.width / 2
424
+		self.y = self.o.height / 2
425
+		self.xsize = 0.0
426
+		self.ysize = 0.0
427
+
428
+		super(BlueFade, self).Enter()        
429
+		
430
+	def Execute(self):
431
+		self.FSM.stateLife += 1
432
+		self.delta = time.perf_counter() - self.last_frame_time
433
+		self.last_frame_time = time.perf_counter()
434
+
435
+
436
+		self.o.draw.rectangle((self.x - self.xsize, self.y - self.ysize, self.x + self.xsize, self.y + self.ysize), outline=self.o.blue, fill=self.o.blue)
437
+		self.o.update_display(self.o)
438
+		self.xsize += self.delta * 150
439
+		self.ysize += self.delta * 125
440
+		if (pygame.time.get_ticks() - self.birth > 1000):
441
+
442
+			print('get outta fade')
443
+			if self.FSM.queued_state != None:
444
+				ns = self.FSM.queued_state 
445
+				self.FSM.queued_state = None
446
+				self.FSM.ToTransition(ns)	
447
+	def Exit(self):
448
+		pass
449
+
450
+#==================================== 
451
+
452
+
453
+class GreyFade(State):
454
+	def __init__(self,FSM):
455
+		super(GreyFade, self).__init__(FSM)    
456
+		
457
+	def Enter(self):
458
+		self.FSM.stateLife = 1
459
+		self.birth = pygame.time.get_ticks()
460
+		self.last_frame_time = time.perf_counter()	
461
+		self.o = self.FSM.owner 
462
+		self.x = self.o.width / 2
463
+		self.y = self.o.height / 2
464
+		self.xsize = 0.0
465
+		self.ysize = 0.0
466
+
467
+		super(GreyFade, self).Enter()        
468
+		
469
+	def Execute(self):
470
+		self.FSM.stateLife += 1
471
+		self.delta = time.perf_counter() - self.last_frame_time
472
+		self.last_frame_time = time.perf_counter()
473
+
474
+
475
+		self.o.draw.rectangle((self.x - self.xsize, self.y - self.ysize, self.x + self.xsize, self.y + self.ysize), outline=self.o.light_grey, fill=self.o.light_grey)
476
+		self.o.update_display(self.o)
477
+		self.xsize += self.delta * 150
478
+		self.ysize += self.delta * 125
479
+		if (pygame.time.get_ticks() - self.birth > 1000):
480
+
481
+			print('get outta fade')
482
+			if self.FSM.queued_state != None:
483
+				ns = self.FSM.queued_state 
484
+				self.FSM.queued_state = "toMain"
485
+				self.FSM.ToTransition(ns)
486
+		
487
+	def Exit(self):
488
+		pass
489
+
490
+#==================================== 
491
+
492
+class GameOver(State):
493
+	def __init__(self,FSM):
494
+		super(GameOver, self).__init__(FSM)    
495
+		
496
+	def Enter(self):
497
+		self.FSM.stateLife = 1
498
+		self.o = self.FSM.owner 
499
+		self.birth = pygame.time.get_ticks()
500
+
501
+		self.o.draw.rectangle((0, 0, self.o.width, self.o.height), outline=0, fill=self.o.blue)
502
+		self.o.center_block("Game Over", self.o.h2, [0, 0, self.o.width, self.o.height], self.o.light_grey)
503
+		self.o.center_block("Score: " + str(self.o.game.score), self.o.h2, [0, 20, self.o.width, self.o.height + 20], self.o.light_grey)
504
+		self.o.update_display(0)
505
+
506
+		super(GameOver, self).Enter()        
507
+		
508
+	def Execute(self):
509
+		#self.FSM.stateLife += 1
510
+		if self.o.keyState[0] == 1:
511
+			#self.FSM.ToTransition("toMain")
512
+			self.FSM.queued_state = "toMain"
513
+			self.FSM.ToTransition('toBlueFade')
514
+
515
+		if (pygame.time.get_ticks() - self.birth) > 3000:
516
+			if self.o.game.score > self.o.game.hs_s1:
517
+				print('this is a new high score')
518
+				self.FSM.queued_state = "toNewHighScore"
519
+			else:
520
+				print('not a new high score')				
521
+			
522
+				self.FSM.queued_state = "toHighScore"
523
+			self.FSM.ToTransition('toBlueFade')
524
+
525
+
526
+	def Exit(self):
527
+		pass
528
+
529
+#==================================== 
530
+
531
+
532
+class HighScore(State):
533
+	def __init__(self,FSM):
534
+		super(HighScore, self).__init__(FSM)    
535
+		
536
+	def Enter(self):
537
+		#self.FSM.stateLife = 1
538
+		self.o = self.FSM.owner 
539
+
540
+
541
+		self.o.draw.rectangle((0, 0, self.o.width, self.o.height), outline=0, fill=self.o.blue)
542
+		self.o.center_text("HIGH SCORES", self.o.h1, self.o.width, 25, self.o.light_grey)
543
+		self.o.center_text("----------------------", self.o.h2, self.o.width, 55, self.o.light_grey)
544
+
545
+
546
+		#self.o.draw.rectangle((0, 0, self.o.width, self.o.height), outline=0, fill=self.o.blue)
547
+		self.o.center_block(self.o.game.hs_n3 + ': ' + str(self.o.game.hs_s3), self.o.h2, [0, -20, self.o.width, self.o.height-20], self.o.light_grey)
548
+		self.o.center_block(self.o.game.hs_n2 + ': ' + str(self.o.game.hs_s2), self.o.h2, [0, 0, self.o.width, self.o.height], self.o.light_grey)
549
+		self.o.center_block(self.o.game.hs_n1 + ': ' + str(self.o.game.hs_s1), self.o.h2, [0, 20, self.o.width, self.o.height+20], self.o.light_grey)
550
+		self.o.center_block("restart", self.o.h2, [0, 50, self.o.width, self.o.height + 50], self.o.light_grey)
551
+		self.o.update_display(0)
552
+
553
+
554
+		super(HighScore, self).Enter()        
555
+		
556
+	def Execute(self):
557
+		#self.FSM.stateLife += 1
558
+		if self.o.keyState[0] == 1:
559
+			#self.FSM.ToTransition("toMain")
560
+			self.FSM.queued_state = "toMain"
561
+			self.FSM.ToTransition('toBlueFade')
562
+
563
+		
564
+	def Exit(self):
565
+		pass
566
+
567
+#==================================== 
568
+
569
+#==================================== 
570
+			
571
+class NewHighScore(State):
572
+	def __init__(self,FSM):
573
+		super(NewHighScore, self).__init__(FSM)    
574
+		
575
+	def Enter(self):
576
+		self.birth = time.perf_counter()
577
+		o = self.FSM.owner 
578
+		o.draw.rectangle((0, 0, o.width, o.height), outline=0, fill=o.blue)
579
+		o.center_block("NEW HIGH SCORE!", o.h2, [0, 0, o.width, o.height], o.light_grey)
580
+		o.update_display(0)
581
+		super(NewHighScore, self).Enter()        
582
+		
583
+	def Execute(self):
584
+		#print('doing defender intro ', (time.perf_counter() - self.birth))
585
+		if (time.perf_counter() - self.birth) > 2:
586
+			print('time is up')
587
+			self.FSM.queued_state = "toEnterText"
588
+			self.FSM.ToTransition('toBlueFade')
589
+			#self.FSM.ToTransition('toMain')
590
+
591
+	def Exit(self):
592
+		pass
593
+
594
+#==================================== 
595
+class EnterText(State):
596
+	def __init__(self,FSM):
597
+		super(EnterText, self).__init__(FSM)    
598
+		
599
+	def Enter(self):
600
+		o = self.FSM.owner 
601
+	
602
+		self.input_string = ""
603
+		
604
+		self.last_action = pygame.time.get_ticks()
605
+		self.caps = False
606
+		self.cur_but = 18
607
+		self.cur_letter = ""
608
+
609
+		self.skips = [7, 3, 11, 12, 13, 14, 15]
610
+		
611
+		self.lc_labels = [["p", "q", "r", "s"], ["t", "u", "v"], ["w", "x", "y", "z"], ["C", "A", "P", "S"], 
612
+				["g", "h", "i"], ["j", "k", "l"], ["m", "n", "o"], ["D", "E", "L"],
613
+				["_", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-"], ["a", "b", "c"], ["d", "e", "f"], ["O", "K"],
614
+				[], [], [], []]
615
+
616
+		self.uc_labels = [["P", "Q", "R", "S"], ["T", "U", "V"], ["W", "X", "Y", "Z"], ["C", "A", "P", "S"], 
617
+				["G", "H", "I"], ["J", "K", "L"], ["M", "N", "O"], ["D", "E", "L"],
618
+				["_", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-"], ["A", "B", "C"], ["D", "E", "F"], ["O", "K"],
619
+				[], [], [], []]
620
+
621
+		self.labels = self.lc_labels
622
+
623
+		#self.songCycle = cycle(self.song)
624
+		#self.curPattern = next(self.songCycle)
625
+
626
+		self.cycles = []
627
+		for l in self.labels:
628
+			self.cycles.append(cycle(l))
629
+
630
+
631
+
632
+		self.draw(o)
633
+		o.update_display(0)
634
+		super(EnterText, self).Enter()        
635
+		
636
+	def Execute(self):
637
+		o = self.FSM.owner 
638
+		y_size = o.height / 4
639
+		if o.keyState[11] == 1:
640
+			if self.input_string != 'blank':
641
+				o.game.hs_name = self.input_string
642
+				#o.bpm = o.sconf['bpm']
643
+				#o.sconf['title'] = self.input_string
644
+				
645
+
646
+				if o.game.score > o.game.hs_s3:
647
+					print('new first')
648
+					o.game.hs_s1 = o.game.hs_s2
649
+					o.game.hs_n1 = o.game.hs_n2
650
+					o.game.hs_s2 = o.game.hs_s3
651
+					o.game.hs_n2 = o.game.hs_n3
652
+					o.game.hs_s3 = o.game.score
653
+					o.game.hs_n3 = o.game.hs_name
654
+
655
+				elif o.game.score > o.game.hs_s2:
656
+					print('new second')
657
+					o.game.hs_s1 = o.game.hs_s2
658
+					o.game.hs_n1 = o.game.hs_n2
659
+					o.game.hs_s2 = o.game.score
660
+					o.game.hs_n2 = o.game.hs_name
661
+				else:
662
+					print('new third')
663
+					o.game.hs_s1 = o.game.score
664
+					o.game.hs_n1 = o.game.hs_name
665
+
666
+				print('new high score saving')
667
+				#o.save_song()
668
+				self.FSM.queued_state = 'toHighScore'		
669
+				self.FSM.ToTransition('toBlueFade')		
670
+				o.game.save_highscore()
671
+
672
+
673
+
674
+		if o.keyState[16] > 0 and o.keyState[17] > 0:
675
+			pass
676
+		else:
677
+			_iter = 0
678
+			for k in o.keyState:
679
+				if k == 1:
680
+					cur_time = pygame.time.get_ticks()
681
+					print(cur_time - self.last_action)
682
+					
683
+					#print('cur letter ', next(self.cycles[_iter]))
684
+					if _iter not in self.skips:
685
+						self.last_action = cur_time
686
+						self.cur_letter = next(self.cycles[_iter])
687
+						self.cur_but = _iter
688
+						self.draw(o)
689
+						o.center_block(self.input_string + self.cur_letter, o.h2, [0, 0, o.width, y_size], o.light_grey)
690
+
691
+					if _iter == 7:
692
+						
693
+						self.input_string = self.input_string[:-1]
694
+						#self.input_string = self.input_string.rstrip(self.input_string[-1])
695
+						print('deleting')
696
+						self.last_action = 100000000
697
+						self.draw(o)
698
+						o.center_block(self.input_string, o.h2, [0, 0, o.width, y_size], o.light_grey)
699
+
700
+					elif _iter == 3:
701
+						print('caps')
702
+						if self.caps:
703
+							self.caps = False
704
+							self.labels = self.lc_labels
705
+
706
+						else:
707
+							self.caps = True
708
+							self.labels = self.uc_labels
709
+						self.draw(o)
710
+						o.center_block(self.input_string, o.h2, [0, 0, o.width, y_size], o.light_grey)
711
+						self.cycles = []
712
+						for l in self.labels:
713
+							self.cycles.append(cycle(l))
714
+
715
+					o.update_display(0)
716
+				_iter += 1
717
+
718
+		cur_time = pygame.time.get_ticks()
719
+		delay = cur_time - self.last_action
720
+		if delay > 1000 and delay < 100000:
721
+			self.input_string += self.cur_letter
722
+			self.last_action = 100000000
723
+			self.reset_cycles()
724
+			self.draw(o)
725
+
726
+			o.center_block(self.input_string, o.h2, [0, 0, o.width, y_size], o.light_grey)
727
+			o.update_display(0)
728
+
729
+	def draw(self, o):
730
+		x_size = o.width / 4
731
+		y_size = o.height / 4
732
+		og_x = 0
733
+		o_x = og_x
734
+		o_y = o.height
735
+		text_padding = 6
736
+		
737
+		_id = 0
738
+		while _id < 16:
739
+			lab = ""
740
+			for i in self.labels[_id]:
741
+				lab += i
742
+
743
+			if _id == 8:
744
+				lab = "_12"
745
+
746
+			o.draw.rectangle((o_x, o_y, o_x + x_size, o_y - y_size), outline=0, fill=o.blue)
747
+			o.center_block(lab, o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
748
+
749
+			o_x = o_x + x_size
750
+			_id += 1
751
+			if _id % 4 == 0:
752
+				o_y -= y_size
753
+				o_x = og_x
754
+		o.draw.rectangle((0, 0, o.width, y_size), outline=0, fill=o.blue)
755
+		
756
+	def reset_cycles(self):
757
+		self.cycles = []
758
+		for l in self.labels:
759
+			self.cycles.append(cycle(l))
760
+
761
+	def Exit(self):
762
+		pass
763
+
764
+#==================================== 
765
+
766
+def timer_event():
767
+	print('timer event level upsssssssssssssssssssssssssss')

+ 412
- 152
lib/StatesProg.py View File

15
 from pathlib import Path
15
 from pathlib import Path
16
 import socket
16
 import socket
17
 import git 
17
 import git 
18
+import FSM
18
 
19
 
19
 #====================================     
20
 #====================================     
20
 
21
 
183
 			o.center_block("Vol-", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
184
 			o.center_block("Vol-", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
184
 		if _id == 9:
185
 		if _id == 9:
185
 			o.center_block("Vol+", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
186
 			o.center_block("Vol+", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
186
-		if _id == 11:
187
-			o.center_block("", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
187
+		#if _id == 11:
188
+			#o.center_block("", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
188
 		if _id == 12:
189
 		if _id == 12:
189
 			o.center_block("Play", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
190
 			o.center_block("Play", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
190
 		if _id == 13:
191
 		if _id == 13:
191
 			o.center_block("Stop", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
192
 			o.center_block("Stop", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
192
-		if _id == 14:
193
+		if _id == 10:
193
 			o.center_block("BPM-", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
194
 			o.center_block("BPM-", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
194
-		if _id == 15:
195
+		if _id == 11:
195
 			o.center_block("BPM+", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
196
 			o.center_block("BPM+", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
196
 			
197
 			
197
 
198
 
225
 		if _id == 3:
226
 		if _id == 3:
226
 			o.center_block("Load", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
227
 			o.center_block("Load", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
227
 
228
 
228
-		if _id == 4:
229
+		if _id == 8:
229
 			o.center_block("Vol-", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
230
 			o.center_block("Vol-", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
230
-		if _id == 5:
231
+		if _id == 9:
231
 			o.center_block("Vol+", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
232
 			o.center_block("Vol+", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
232
 		if _id == 6:
233
 		if _id == 6:
233
 			o.center_block("Bank-", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
234
 			o.center_block("Bank-", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
234
 		if _id == 7:
235
 		if _id == 7:
235
 			o.center_block("Bank+", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
236
 			o.center_block("Bank+", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
236
-		if _id == 8:
237
+		if _id == 10:
237
 			o.center_block("Pitch-", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
238
 			o.center_block("Pitch-", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
238
-		if _id == 9:
239
+		if _id == 11:
239
 			o.center_block("Pitch+", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
240
 			o.center_block("Pitch+", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
240
 
241
 
241
 
242
 
298
 	   
299
 	   
299
 		o.draw.rectangle((o_x, o_y, o_x + x_size, o_y - y_size), outline=0, fill=o.dark_grey)
300
 		o.draw.rectangle((o_x, o_y, o_x + x_size, o_y - y_size), outline=0, fill=o.dark_grey)
300
 
301
 
301
-		if _id == 0:
302
+		if _id == 8:
302
 			o.center_block("Vol -", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
303
 			o.center_block("Vol -", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
303
-		elif _id == 1:
304
+		elif _id == 9:
304
 			o.center_block("Vol +", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
305
 			o.center_block("Vol +", o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
305
 		elif _id == 12:
306
 		elif _id == 12:
306
 			if o.patternFollow:
307
 			if o.patternFollow:
341
 
342
 
342
 
343
 
343
 def menu1_actions(self, o):
344
 def menu1_actions(self, o):
345
+	if o.keyState[8] == 4 or o.keyState[8] == 3:
346
+		print('reset repeat from menu')
347
+		o.button_repeater(1,[])
348
+
349
+	if o.keyState[9] == 4 or o.keyState[9] == 3:
350
+		print('reset repeat from menu')
351
+		o.button_repeater(1,[])
352
+
344
 	if o.keyState[16] == 2:
353
 	if o.keyState[16] == 2:
354
+		#print('key 8 ', o.keyState[8])
355
+		#o.button_repeater(0, [8,9,14,15])
356
+
345
 		if o.keyState[0] == 1:
357
 		if o.keyState[0] == 1:
346
 			self.FSM.ToTransition('toMain')
358
 			self.FSM.ToTransition('toMain')
347
 		elif o.keyState[1] == 1:
359
 		elif o.keyState[1] == 1:
359
 			play_seq(o, [o.curPattern, 0])
371
 			play_seq(o, [o.curPattern, 0])
360
 		if o.keyState[13] == 1:
372
 		if o.keyState[13] == 1:
361
 			o.stop_playback()
373
 			o.stop_playback()
362
-		# if o.keyState[6] == 1:
363
-		# 	if o.note_bank > 0:
364
-		# 		o.note_bank -= 1
365
-		# if o.keyState[7] == 1:
366
-		# 	if o.note_bank < 3:
367
-		# 		o.note_bank += 1
374
+
375
+		if o.keyState[8] == 2:
376
+			if (o.repeater_states[8] != None and ((pygame.time.get_ticks() - o.repeater_states[8]) > 500)):
377
+				if o.volume > 0:
378
+					o.volume -= 1
379
+					text_center(o, "Master Volume", str(o.volume))
380
+					o.update_display(0)	
381
+				o.repeater_states[8] = pygame.time.get_ticks()
382
+
368
 		if o.keyState[8] == 1:
383
 		if o.keyState[8] == 1:
384
+			o.repeater_states[8] = pygame.time.get_ticks()
369
 			if o.volume > 0:
385
 			if o.volume > 0:
370
 				o.volume -= 1
386
 				o.volume -= 1
371
 				text_center(o, "Master Volume", str(o.volume))
387
 				text_center(o, "Master Volume", str(o.volume))
372
 				o.update_display(0)
388
 				o.update_display(0)
389
+
390
+		if o.keyState[9] == 2:
391
+			if (o.repeater_states[9] != None and ((pygame.time.get_ticks() - o.repeater_states[9]) > 500)):
392
+				if o.volume < 16:
393
+					o.volume += 1
394
+					text_center(o, "Master Volume", str(o.volume))
395
+					o.update_display(0)
396
+				o.repeater_states[9] = pygame.time.get_ticks()
397
+
373
 		if o.keyState[9] == 1:
398
 		if o.keyState[9] == 1:
399
+			o.repeater_states[9] = pygame.time.get_ticks()
374
 			if o.volume < 16:
400
 			if o.volume < 16:
375
 				o.volume += 1
401
 				o.volume += 1
376
 				text_center(o, "Master Volume", str(o.volume))
402
 				text_center(o, "Master Volume", str(o.volume))
378
 		if o.keyState[11] == 1:
404
 		if o.keyState[11] == 1:
379
 			#o.save_song()
405
 			#o.save_song()
380
 			pass
406
 			pass
381
-		if o.keyState[14] == 1:
407
+
408
+		if o.keyState[10] == 2:
409
+			if (o.repeater_states[10] != None and ((pygame.time.get_ticks() - o.repeater_states[10]) > 500)):
410
+				if o.bpm > 60:
411
+					o.bpm = o.bpm - o.bpm_inc
412
+					o.update_bpm()
413
+					text_center(o, "Master BPM", str(o.bpm))
414
+					o.update_display(0)
415
+				o.repeater_states[10] = pygame.time.get_ticks()
416
+
417
+		if o.keyState[10] == 1:
418
+			o.repeater_states[10] = pygame.time.get_ticks()
382
 			if o.bpm > 60:
419
 			if o.bpm > 60:
383
 				o.bpm = o.bpm - o.bpm_inc
420
 				o.bpm = o.bpm - o.bpm_inc
384
 				o.update_bpm()
421
 				o.update_bpm()
385
 				text_center(o, "Master BPM", str(o.bpm))
422
 				text_center(o, "Master BPM", str(o.bpm))
386
 				o.update_display(0)
423
 				o.update_display(0)
387
-		if o.keyState[15] == 1:
424
+
425
+		if o.keyState[11] == 2:
426
+			if (o.repeater_states[11] != None and ((pygame.time.get_ticks() - o.repeater_states[11]) > 500)):
427
+				if o.bpm < 240:
428
+					o.bpm = o.bpm + o.bpm_inc
429
+					o.update_bpm()
430
+					text_center(o, "Master BPM", str(o.bpm))
431
+					o.update_display(0)
432
+				o.repeater_states[11] = pygame.time.get_ticks()
433
+
434
+		if o.keyState[11] == 1:
435
+			o.repeater_states[11] = pygame.time.get_ticks()
388
 			if o.bpm < 240:
436
 			if o.bpm < 240:
389
 				o.bpm = o.bpm + o.bpm_inc
437
 				o.bpm = o.bpm + o.bpm_inc
390
 				o.update_bpm()
438
 				o.update_bpm()
393
 
441
 
394
 
442
 
395
 def menu2_actions_sample(self, o):
443
 def menu2_actions_sample(self, o):
444
+	if o.keyState[6] == 4 or o.keyState[6] == 3:
445
+		print('reset repeat from menu')
446
+		o.button_repeater(1,[])
447
+
448
+	if o.keyState[7] == 4 or o.keyState[7] == 3:
449
+		print('reset repeat from menu')
450
+		o.button_repeater(1,[])
451
+
452
+	if o.keyState[8] == 4 or o.keyState[8] == 3:
453
+		print('reset repeat from menu')
454
+		o.button_repeater(1,[])
455
+
456
+	if o.keyState[9] == 4 or o.keyState[9] == 3:
457
+		print('reset repeat from menu')
458
+		o.button_repeater(1,[])
459
+
460
+	if o.keyState[10] == 4 or o.keyState[10] == 3:
461
+		print('reset repeat from menu')
462
+		o.button_repeater(1,[])
463
+
464
+	if o.keyState[11] == 4 or o.keyState[11] == 3:
465
+		print('reset repeat from menu')
466
+		o.button_repeater(1,[])
467
+
396
 	if o.keyState[17] == 2:
468
 	if o.keyState[17] == 2:
397
 		if o.keyState[0] == 1:
469
 		if o.keyState[0] == 1:
398
 			if o.soundSlots[o.eSound].volume > 0:
470
 			if o.soundSlots[o.eSound].volume > 0:
399
 				print('copy')
471
 				print('copy')
400
 				o.soundClipboard = [o.soundSlots[o.eSound].file, o.soundSlots[o.eSound].volume, o.soundSlots[o.eSound].pitch]
472
 				o.soundClipboard = [o.soundSlots[o.eSound].file, o.soundSlots[o.eSound].volume, o.soundSlots[o.eSound].pitch]
401
 				print(o.soundClipboard)
473
 				print(o.soundClipboard)
402
-				#text_center(o, "Sample Volume", str(o.soundSlots[o.eSound].volume))
403
-				#o.update_display(0)
404
-		elif o.keyState[1] == 1:
405
-			
406
-			print('pasting ', o.soundClipboard)
407
-			
408
-			o.soundSlots[o.eSound].file = o.soundClipboard[0]
409
-			o.soundSlots[o.eSound].volume = o.soundClipboard[1]
410
-			o.soundSlots[o.eSound].pitch = o.soundClipboard[2]
411
-			o.soundSlots[o.eSound].create_sound()
412
-			o.soundSlots[o.eSound].set_pitch()
413
-			
414
-			#s = o.SoundSlot(o.soundClipboard[0], o.eSound, o)
415
-			#s.volume = o.soundClipboard[1]
416
-			#s.pitch = o.soundClipboard[2]
417
-			#s.notes = s.init_notes()
418
-			#o.soundSlots[o.eSound] = s
474
+
475
+		if o.keyState[1] == 1:
476
+			if o.soundClipboard != []:
477
+				print('pasting ', o.soundClipboard)				
478
+				o.soundSlots[o.eSound].file = o.soundClipboard[0]
479
+				o.soundSlots[o.eSound].volume = o.soundClipboard[1]
480
+				o.soundSlots[o.eSound].pitch = o.soundClipboard[2]
481
+				o.soundSlots[o.eSound].create_sound()
482
+				o.soundSlots[o.eSound].set_pitch()
419
 			
483
 			
420
-		elif o.keyState[2] == 1:
484
+		if o.keyState[2] == 1:
421
 			print('delete sound ', o.eSound)
485
 			print('delete sound ', o.eSound)
422
 			o.soundSlots[o.eSound].file = None
486
 			o.soundSlots[o.eSound].file = None
423
 			o.soundSlots[o.eSound].volume = 16
487
 			o.soundSlots[o.eSound].volume = 16
424
 			o.soundSlots[o.eSound].pitch = 0
488
 			o.soundSlots[o.eSound].pitch = 0
425
-		elif o.keyState[3] == 1:
489
+		if o.keyState[3] == 1:
426
 			print('load')
490
 			print('load')
427
 			o.FSM.FSM.ToTransition("toLoadSound")
491
 			o.FSM.FSM.ToTransition("toLoadSound")
428
 
492
 
429
-		elif o.keyState[4] == 1:
493
+		if o.keyState[8] == 2:
494
+			if (o.repeater_states[8] != None and ((pygame.time.get_ticks() - o.repeater_states[8]) > 500)):
495
+				if o.soundSlots[o.eSound].volume > 0:
496
+					o.soundSlots[o.eSound].volume -= 1
497
+					text_center(o, "Sample Volume", str(o.soundSlots[o.eSound].volume))
498
+					o.update_display(0)	
499
+				o.repeater_states[8] = pygame.time.get_ticks()
500
+
501
+		if o.keyState[8] == 1:
430
 			if o.soundSlots[o.eSound].volume > 0:
502
 			if o.soundSlots[o.eSound].volume > 0:
431
 				o.soundSlots[o.eSound].volume -= 1
503
 				o.soundSlots[o.eSound].volume -= 1
432
 				text_center(o, "Sample Volume", str(o.soundSlots[o.eSound].volume))
504
 				text_center(o, "Sample Volume", str(o.soundSlots[o.eSound].volume))
433
 				o.update_display(0)
505
 				o.update_display(0)
506
+			o.repeater_states[8] = pygame.time.get_ticks()
434
 
507
 
435
-		elif o.keyState[5] == 1:
508
+		if o.keyState[9] == 2:
509
+			if (o.repeater_states[9] != None and ((pygame.time.get_ticks() - o.repeater_states[9]) > 500)):
510
+				if o.soundSlots[o.eSound].volume < 16:
511
+					o.soundSlots[o.eSound].volume += 1
512
+					text_center(o, "Sample Volume", str(o.soundSlots[o.eSound].volume))
513
+					o.update_display(0)
514
+				o.repeater_states[9] = pygame.time.get_ticks()
515
+
516
+		if o.keyState[9] == 1:
436
 			if o.soundSlots[o.eSound].volume < 16:
517
 			if o.soundSlots[o.eSound].volume < 16:
437
 				o.soundSlots[o.eSound].volume += 1
518
 				o.soundSlots[o.eSound].volume += 1
438
 				text_center(o, "Sample Volume", str(o.soundSlots[o.eSound].volume))
519
 				text_center(o, "Sample Volume", str(o.soundSlots[o.eSound].volume))
439
 				o.update_display(0)
520
 				o.update_display(0)
521
+			o.repeater_states[9] = pygame.time.get_ticks()
440
 
522
 
441
-		elif o.keyState[6] == 1:
523
+		if o.keyState[6] == 2:
524
+			if (o.repeater_states[6] != None and ((pygame.time.get_ticks() - o.repeater_states[6]) > 500)):
525
+				if o.note_bank > 0:
526
+					o.note_bank -= 1
527
+					text_center(o, "Sound Bank", str(o.note_bank))
528
+					o.update_display(0)
529
+				o.repeater_states[6] = pygame.time.get_ticks()
530
+
531
+		if o.keyState[6] == 1:
442
 			if o.note_bank > 0:
532
 			if o.note_bank > 0:
443
 				o.note_bank -= 1
533
 				o.note_bank -= 1
444
 				text_center(o, "Sound Bank", str(o.note_bank))
534
 				text_center(o, "Sound Bank", str(o.note_bank))
535
+				o.repeater_states[6] = pygame.time.get_ticks()
445
 				o.update_display(0)
536
 				o.update_display(0)
446
-		elif o.keyState[7] == 1:
537
+
538
+		if o.keyState[7] == 2:
539
+			if (o.repeater_states[7] != None and ((pygame.time.get_ticks() - o.repeater_states[7]) > 500)):
540
+				if o.note_bank < 3:
541
+					o.note_bank += 1
542
+					text_center(o, "Sound Bank", str(o.note_bank))
543
+					o.update_display(0)
544
+				o.repeater_states[7] = pygame.time.get_ticks()
545
+
546
+		if o.keyState[7] == 1:
447
 			if o.note_bank < 3:
547
 			if o.note_bank < 3:
448
 				o.note_bank += 1
548
 				o.note_bank += 1
449
 				text_center(o, "Sound Bank", str(o.note_bank))
549
 				text_center(o, "Sound Bank", str(o.note_bank))
550
+				o.repeater_states[7] = pygame.time.get_ticks()
450
 				o.update_display(0)
551
 				o.update_display(0)
451
 
552
 
452
-		elif o.keyState[8] == 1:
553
+		if o.keyState[10] == 2:
554
+			if (o.repeater_states[10] != None and ((pygame.time.get_ticks() - o.repeater_states[10]) > 500)):
555
+				if o.soundSlots[o.eSound].pitch > -10:
556
+					o.soundSlots[o.eSound].pitch -= 1
557
+					text_center(o, "Sample Pitch", str(o.soundSlots[o.eSound].pitch))
558
+					o.soundSlots[o.eSound].set_pitch()
559
+					o.update_display(0)
560
+				o.repeater_states[10] = pygame.time.get_ticks()
561
+
562
+
563
+		if o.keyState[10] == 1:
453
 			if o.soundSlots[o.eSound].pitch > -10:
564
 			if o.soundSlots[o.eSound].pitch > -10:
454
 				o.soundSlots[o.eSound].pitch -= 1
565
 				o.soundSlots[o.eSound].pitch -= 1
455
 				text_center(o, "Sample Pitch", str(o.soundSlots[o.eSound].pitch))
566
 				text_center(o, "Sample Pitch", str(o.soundSlots[o.eSound].pitch))
456
 				o.soundSlots[o.eSound].set_pitch()
567
 				o.soundSlots[o.eSound].set_pitch()
568
+				o.repeater_states[10] = pygame.time.get_ticks()
457
 				o.update_display(0)
569
 				o.update_display(0)
458
-		elif o.keyState[9] == 1:
570
+
571
+		if o.keyState[11] == 2:
572
+			if (o.repeater_states[11] != None and ((pygame.time.get_ticks() - o.repeater_states[11]) > 500)):
573
+				if o.soundSlots[o.eSound].pitch < 10:
574
+					o.soundSlots[o.eSound].pitch += 1
575
+					text_center(o, "Sample Pitch", str(o.soundSlots[o.eSound].pitch))
576
+					o.soundSlots[o.eSound].set_pitch()
577
+					o.update_display(0)
578
+				o.repeater_states[11] = pygame.time.get_ticks()
579
+
580
+
581
+		if o.keyState[11] == 1:
459
 			if o.soundSlots[o.eSound].pitch < 10:
582
 			if o.soundSlots[o.eSound].pitch < 10:
460
 				o.soundSlots[o.eSound].pitch += 1
583
 				o.soundSlots[o.eSound].pitch += 1
461
 				text_center(o, "Sample Pitch", str(o.soundSlots[o.eSound].pitch))
584
 				text_center(o, "Sample Pitch", str(o.soundSlots[o.eSound].pitch))
462
 				o.soundSlots[o.eSound].set_pitch()
585
 				o.soundSlots[o.eSound].set_pitch()
586
+				o.repeater_states[11] = pygame.time.get_ticks()
463
 				o.update_display(0)
587
 				o.update_display(0)
464
-		elif o.keyState[12] == 1:
588
+
589
+		if o.keyState[12] == 1:
465
 			o.odub = not o.odub
590
 			o.odub = not o.odub
466
 			o.undo_buf = []
591
 			o.undo_buf = []
467
 			print('odub now is ', o.odub)
592
 			print('odub now is ', o.odub)
468
 			draw_menu2_sample(o)
593
 			draw_menu2_sample(o)
469
 			o.update_display(0)
594
 			o.update_display(0)
470
-		elif o.keyState[13] == 1:
595
+
596
+		if o.keyState[13] == 1:
471
 			print('undo something')
597
 			print('undo something')
472
 			for i in o.undo_buf:
598
 			for i in o.undo_buf:
473
 				o.soundSlots[i[0]].notes[i[1]][i[2]][0] = 0
599
 				o.soundSlots[i[0]].notes[i[1]][i[2]][0] = 0
483
 				notes = []
609
 				notes = []
484
 				for i in s.notes[o.ePattern]:
610
 				for i in s.notes[o.ePattern]:
485
 					notes.append([i[0], i[1]])
611
 					notes.append([i[0], i[1]])
486
-					#i[0] = 0
487
-					#i[1] = 0
488
 				o.patternClipboard.append(notes)
612
 				o.patternClipboard.append(notes)
489
 				print('adding to clip ', notes)
613
 				print('adding to clip ', notes)
490
-			# if o.soundSlots[o.eSound].volume > 0:
491
-			# 	o.soundSlots[o.eSound].volume -= 1
492
-			# 	text_center(o, "Sample Volume", str(o.soundSlots[o.eSound].volume))
493
-			# 	o.update_display(0)
614
+			
494
 		elif o.keyState[1] == 1:
615
 		elif o.keyState[1] == 1:
495
 			print('paste')
616
 			print('paste')
496
 			if o.patternClipboard != []:
617
 			if o.patternClipboard != []:
503
 						n += 1
624
 						n += 1
504
 					print('added ', o.patternClipboard[p])
625
 					print('added ', o.patternClipboard[p])
505
 					p += 1
626
 					p += 1
506
-					
507
-				
508
 			else:
627
 			else:
509
 				print('nothing to paste')
628
 				print('nothing to paste')
510
-			# if o.soundSlots[o.eSound].volume < 16:
511
-			# 	o.soundSlots[o.eSound].volume += 1
512
-			# 	text_center(o, "Sample Volume", str(o.soundSlots[o.eSound].volume))
513
-			# 	o.update_display(0)
629
+			
514
 		elif o.keyState[2] == 1:
630
 		elif o.keyState[2] == 1:
515
 			print('clear')
631
 			print('clear')
516
 			print(o.soundSlots[o.eSound].notes[o.ePattern])
632
 			print(o.soundSlots[o.eSound].notes[o.ePattern])
518
 				for i in s.notes[o.ePattern]:
634
 				for i in s.notes[o.ePattern]:
519
 					i[0] = 0
635
 					i[0] = 0
520
 					i[1] = 0
636
 					i[1] = 0
521
-			#print(o.soundSlots[o.eSound].notes[o.ePattern])
522
-			# if o.soundSlots[o.eSound].pitch > -10:
523
-			# 	o.soundSlots[o.eSound].pitch -= 1
524
-			# 	text_center(o, "Sample Pitch", str(o.soundSlots[o.eSound].pitch))
525
-			# 	o.soundSlots[o.eSound].set_pitch()
526
-			# 	o.update_display(0)
637
+			
527
 		elif o.keyState[6] == 1:
638
 		elif o.keyState[6] == 1:
528
 			if o.pat_bank > 0:
639
 			if o.pat_bank > 0:
529
 				o.pat_bank -= 1
640
 				o.pat_bank -= 1
554
 				
665
 				
555
 
666
 
556
 def menu2_actions_note(self, o):
667
 def menu2_actions_note(self, o):
668
+	if o.keyState[8] == 4 or o.keyState[8] == 3:
669
+		print('reset repeat from menu')
670
+		o.button_repeater(1,[])
671
+
672
+	if o.keyState[9] == 4 or o.keyState[9] == 3:
673
+		print('reset repeat from menu')
674
+		o.button_repeater(1,[])
675
+
557
 	if o.keyState[17] == 2:
676
 	if o.keyState[17] == 2:
558
-		if o.keyState[0] == 1:
677
+		
678
+
679
+		if o.keyState[8] == 2:
680
+			if (o.repeater_states[8] != None and ((pygame.time.get_ticks() - o.repeater_states[8]) > 500)):
681
+				if o.note_vol > 0:
682
+					o.note_vol -= 1
683
+					text_center(o, "Note Volume", str(o.note_vol))
684
+					o.update_display(0)		
685
+				o.repeater_states[8] = pygame.time.get_ticks()
686
+
687
+		if o.keyState[8] == 1:
559
 			if o.note_vol > 0:
688
 			if o.note_vol > 0:
560
 				o.note_vol -= 1
689
 				o.note_vol -= 1
561
 				text_center(o, "Note Volume", str(o.note_vol))
690
 				text_center(o, "Note Volume", str(o.note_vol))
691
+				o.repeater_states[8] = pygame.time.get_ticks()
562
 				o.update_display(0)		
692
 				o.update_display(0)		
563
 
693
 
564
-		elif o.keyState[1] == 1:
694
+		if o.keyState[9] == 2:
695
+			if (o.repeater_states[9] != None and ((pygame.time.get_ticks() - o.repeater_states[9]) > 500)):
696
+				if o.note_vol < 16:
697
+					o.note_vol += 1
698
+					text_center(o, "Note Volume", str(o.note_vol))					
699
+					o.update_display(0)
700
+				o.repeater_states[9] = pygame.time.get_ticks()
701
+
702
+		if o.keyState[9] == 1:
565
 			if o.note_vol < 16:
703
 			if o.note_vol < 16:
566
 				o.note_vol += 1
704
 				o.note_vol += 1
567
 				text_center(o, "Note Volume", str(o.note_vol))
705
 				text_center(o, "Note Volume", str(o.note_vol))
706
+				o.repeater_states[9] = pygame.time.get_ticks()
568
 				o.update_display(0)
707
 				o.update_display(0)
569
-		elif o.keyState[12] == 1:
708
+
709
+		if o.keyState[12] == 1:
570
 			if o.patternFollow:
710
 			if o.patternFollow:
571
 				o.patternFollow = False
711
 				o.patternFollow = False
572
 			else:
712
 			else:
573
 				o.patternFollow = True
713
 				o.patternFollow = True
574
-			#o.patternFollow != o.patternFollow
714
+
575
 			print('pattern follow is ', o.patternFollow)
715
 			print('pattern follow is ', o.patternFollow)
576
 			draw_menu2_note(o)
716
 			draw_menu2_note(o)
577
-			o.update_display(0)	
578
-			
579
-			
580
-		
717
+			o.update_display(0)			
581
 					
718
 					
582
 
719
 
583
 def util_command(self, o, command):
720
 def util_command(self, o, command):
587
 		self.FSM.ToTransition('toBall')		
724
 		self.FSM.ToTransition('toBall')		
588
 	elif command == "Defender":
725
 	elif command == "Defender":
589
 		self.FSM.ToTransition('toDefender')	
726
 		self.FSM.ToTransition('toDefender')	
727
+	elif command == "Calculator":
728
+		self.FSM.ToTransition('toCalculator')	
729
+
590
 	elif command == "Exit":
730
 	elif command == "Exit":
591
 		self.FSM.ToTransition('toExit')		
731
 		self.FSM.ToTransition('toExit')		
592
 	elif command == "Theme":
732
 	elif command == "Theme":
769
 		
909
 		
770
 	def Execute(self):
910
 	def Execute(self):
771
 		o = self.FSM.owner 
911
 		o = self.FSM.owner 
912
+		
913
+		# if o.keyState[16] == 2:
914
+		# 	o.button_repeater(0, [8,9,14,15])
915
+
916
+		#if o.keyState[17] == 2:
917
+		#	o.button_repeater(0, [4,5,6,7,8,9])
918
+
772
 		menu1_actions(self, o)
919
 		menu1_actions(self, o)
773
 		menu2_actions_sample(self, o)
920
 		menu2_actions_sample(self, o)
774
 		#self.FSM.ToTransition('toClock')
921
 		#self.FSM.ToTransition('toClock')
784
 			text_box2(o, "BPM", str(o.bpm))
931
 			text_box2(o, "BPM", str(o.bpm))
785
 			text_box4(o, "Bank", str(o.note_bank))
932
 			text_box4(o, "Bank", str(o.note_bank))
786
 			text_box3(o, "Pitch", str(o.soundSlots[o.eSound].pitch))
933
 			text_box3(o, "Pitch", str(o.soundSlots[o.eSound].pitch))
934
+			o.button_repeater(1, [])
787
 			o.update_display(0)
935
 			o.update_display(0)
788
 
936
 
937
+		
938
+
789
 
939
 
790
 		if o.keyState[17] == 1:
940
 		if o.keyState[17] == 1:
791
 			draw_menu2_sample(o)
941
 			draw_menu2_sample(o)
1547
 		o = self.FSM.owner 
1697
 		o = self.FSM.owner 
1548
 		o.header_text = "Utilities"
1698
 		o.header_text = "Utilities"
1549
 		o.pub.register("beat", self)
1699
 		o.pub.register("beat", self)
1550
-		self.menu = ["Clock", "Balls", "Defender", "Exit", "Shutdown", "Reboot", "Theme", "Ping", "Wifi", "Update"]
1700
+		self.menu = ["Clock", "Balls", "Defender", "Calculator", "Exit", "Shutdown", "Reboot", "Theme", "Ping", "Wifi", "Update"]
1551
 		self.cur_el = 0
1701
 		self.cur_el = 0
1552
 
1702
 
1553
 		if o.keyState[16] > 0 or o.keyState[17] > 0:
1703
 		if o.keyState[16] > 0 or o.keyState[17] > 0:
2768
 		super(Defender, self).__init__(FSM)    
2918
 		super(Defender, self).__init__(FSM)    
2769
 		
2919
 		
2770
 	def Enter(self):
2920
 	def Enter(self):
2771
-		self.ball_size = 10
2772
-		self.ballx = self.ball_size
2773
-		self.bally = self.ball_size
2774
-		
2775
-		self.ball_speed = 8
2776
-		self.ball_x_dir = 1
2777
-		self.ball_y_dir = 1
2921
+		o = self.FSM.owner 
2778
 		
2922
 		
2779
-		self.ball2x = self.ball_size + 180
2780
-		self.ball2y = self.ball_size + 70
2781
-	
2782
-		self.ball2_x_dir = -1
2783
-		self.ball2_y_dir = -1
2784
-
2785
-		self.xmult = 1.0
2923
+		self.gameFSM = FSM.DefenderFSM(o)
2786
 
2924
 
2787
-		o = self.FSM.owner 
2788
-		o.header_text = "Balls"
2789
-		o.pub.register("beat", self)
2790
-		if o.keyState[16] > 0 or o.keyState[17] > 0:
2791
-			pass
2792
-		else:
2793
-			draw_header(o)
2794
-			o.update_display(0)
2795
 		super(Defender, self).Enter()        
2925
 		super(Defender, self).Enter()        
2796
 		
2926
 		
2797
 	def Execute(self):
2927
 	def Execute(self):
2800
 		if o.keyState[16] == 1:
2930
 		if o.keyState[16] == 1:
2801
 			draw_menu1(o)
2931
 			draw_menu1(o)
2802
 			o.update_display(0)
2932
 			o.update_display(0)
2803
-		
2804
-
2805
-		if o.keyState[16] > 0 or o.keyState[17] > 0:
2933
+		elif o.keyState[16] == 4:
2934
+			#draw_header(o)
2935
+			#self.draw_footer(o)
2936
+			#self.draw_main(o)
2937
+			#o.update_display(0)		
2806
 			pass
2938
 			pass
2807
-		else:			
2808
-			now = datetime.now()
2809
-			current_time = time.strftime("%-I:%M %p")
2810
-
2811
-
2812
-			if self.ballx < (0 + self.ball_size):
2813
-				self.ball_x_dir = 1
2814
-			if self.ballx > (o.width - self.ball_size):
2815
-				self.ball_x_dir = -1
2816
-
2817
-			if self.bally < (0 + self.ball_size):
2818
-				self.ball_y_dir = 1
2819
-			if self.bally > (o.height - self.ball_size):
2820
-				self.ball_y_dir = -1
2821
-
2822
-			# if self.ballx > (o.width - self.ball_size) or self.ballx < (0 + self.ball_size):
2823
-			# 	self.ball_x_dir *= -1
2824
-			# if self.bally > (o.height - self.ball_size) or self.bally < (0 + self.ball_size):
2825
-			# 	self.ball_y_dir *= -1
2826
-
2827
-			self.ballx += self.ball_speed * self.ball_x_dir
2828
-			self.bally += self.ball_speed * self.ball_y_dir
2829
-
2830
-
2831
-			if self.ball2x < (0 + self.ball_size):
2832
-				self.ball2_x_dir = 1
2833
-				self.xmult = random.uniform(.6, 1.2)
2834
-			if self.ball2x > (o.width - self.ball_size):
2835
-				self.ball2_x_dir = -1
2836
-				self.xmult = random.uniform(.6, 1.2)
2837
-
2838
-			if self.ball2y < (0 + self.ball_size):
2839
-				self.ball2_y_dir = 1
2840
-			if self.ball2y > (o.height - self.ball_size):
2841
-				self.ball2_y_dir = -1			
2842
-
2843
-
2844
-			# if self.ball2x > (o.width - self.ball_size) or self.ball2x < (0 + self.ball_size):
2845
-			# 	self.ball2_x_dir *= -1
2846
-			# 	self.xmult = random.uniform(.8, 1.2)
2847
-			# if self.ball2y > (o.height - self.ball_size) or self.ball2y < (0 + self.ball_size):
2848
-			# 	self.ball2_y_dir *= -1
2849
 
2939
 
2850
-			self.ball2x += (self.ball_speed * self.ball2_x_dir) * self.xmult
2851
-			self.ball2y += (self.ball_speed * self.ball2_y_dir) 
2940
+		if o.keyState[16] > 0 or o.keyState[17] > 0:
2852
 
2941
 
2853
-			o.draw.rectangle((0, 0, o.width, o.height), outline=0, fill=o.blue)
2854
-			
2855
-			o.draw.ellipse((self.ballx - self.ball_size, self.bally - self.ball_size, self.ballx + self.ball_size, self.bally + self.ball_size), fill = o.light_grey, outline =o.light_grey)
2856
-			o.draw.ellipse((self.ball2x - self.ball_size, self.ball2y - self.ball_size, self.ball2x + self.ball_size, self.ball2y + self.ball_size), fill = o.light_grey, outline =o.light_grey)
2857
-			#o.center_block(current_time, o.h3, [0,0,o.width,o.height], o.pink)
2858
-			o.update_display(0)
2859
-		
2860
-	def ReceiveMessage(self, message):
2861
-		o = self.FSM.owner 
2862
-		play_seq(o, message)
2942
+		#if o.keyState[16] > 0:
2943
+			pass
2944
+		else:
2945
+			self.gameFSM.Execute()
2863
 		
2946
 		
2864
 	def Exit(self):
2947
 	def Exit(self):
2865
-		self.FSM.owner.pub.unregister("beat", self)        
2948
+		pass
2866
 
2949
 
2867
 #==================================== 
2950
 #==================================== 
2868
 #==================================== 
2951
 #==================================== 
2923
 		self.FSM.owner.pub.unregister("beat", self)        
3006
 		self.FSM.owner.pub.unregister("beat", self)        
2924
 
3007
 
2925
 #==================================== 
3008
 #==================================== 
3009
+
3010
+
3011
+
3012
+class Calculator(State):
3013
+	def __init__(self,FSM):
3014
+		super(Calculator, self).__init__(FSM)    
3015
+		
3016
+	def Enter(self):
3017
+		o = self.FSM.owner 
3018
+
3019
+		o.pub.register("beat", self)
3020
+		
3021
+		self.num1 = ''
3022
+		self.num2 = ''
3023
+		self.op = ''
3024
+		self.result = ''
3025
+
3026
+		self.labels = ['.', '0', '=', '/',
3027
+						'1', '2', '3', '*',
3028
+						'4', '5', '6', '-',
3029
+						'7', '8', '9', '+',
3030
+						'7', '8', '9', '+']
3031
+
3032
+		self.draw_main(o)
3033
+		o.update_display(0)
3034
+		print('hi calc')
3035
+
3036
+		super(Calculator, self).Enter()        
3037
+		
3038
+	def Execute(self):
3039
+		o = self.FSM.owner 
3040
+		menu1_actions(self, o)
3041
+		if o.keyState[16] == 1:
3042
+			draw_menu1(o)
3043
+			o.update_display(0)
3044
+		elif o.keyState[16] == 4:		
3045
+			self.draw_main(o)
3046
+			o.update_display(0)
3047
+
3048
+		if o.keyState[16] > 0:
3049
+			pass
3050
+		else:
3051
+			#pass
3052
+		
3053
+			if o.keyState[17] == 1:
3054
+				self.num1 = ''
3055
+				self.num2 = ''
3056
+				self.op = ''
3057
+				self.result = ''
3058
+
3059
+			self.check_keys(o)
3060
+
3061
+	def append_num(self, num):
3062
+		ops = ['+', '-', '*', '/']
3063
+		print('appending num ', num)
3064
+		if num in ops:
3065
+			if self.num1 != '':
3066
+				self.op = num
3067
+		elif num == '=':
3068
+			print('this is that')
3069
+			if self.num2 != '':
3070
+				if self.op == '+':
3071
+					self.result = float(self.num1) + float(self.num2)
3072
+					print(self.result)
3073
+				if self.op == '-':
3074
+					self.result = float(self.num1) - float(self.num2)
3075
+					print(self.result)
3076
+				if self.op == '*':
3077
+					self.result = float(self.num1) * float(self.num2)
3078
+					print(self.result)
3079
+				if self.op == '/':
3080
+					self.result = float(self.num1) / float(self.num2)
3081
+					print(self.result)
3082
+
3083
+		else:
3084
+			if self.result != '':
3085
+				self.num1 = ''
3086
+				self.num2 = ''
3087
+				self.op = ''
3088
+				self.result = ''
3089
+			if self.op == '':
3090
+				self.num1 += num
3091
+				print('---append ', num)
3092
+			else:
3093
+				self.num2 += num
3094
+				print('---append ', num)
3095
+	def check_keys(self, o):
3096
+		_iter = 0
3097
+		for k in o.keyState:
3098
+			if k == 1:
3099
+				if _iter == 0:
3100
+					if ('.' not in self.num1 and self.num2 == '') or (self.num2 != '' and '.' not in self.num2):
3101
+						self.append_num('.')
3102
+				if _iter == 1:
3103
+					self.append_num('0')
3104
+				if _iter == 2:
3105
+					self.append_num('=')
3106
+				if _iter == 3:
3107
+					self.append_num('/')
3108
+				if _iter == 4:
3109
+					self.append_num('1')
3110
+				if _iter == 5:
3111
+					self.append_num('2')
3112
+				if _iter == 6:
3113
+					self.append_num('3')
3114
+				if _iter == 7:
3115
+					self.append_num('*')
3116
+				if _iter == 8:
3117
+					self.append_num('4')
3118
+				if _iter == 9:
3119
+					self.append_num('5')
3120
+				if _iter == 10:
3121
+					self.append_num('6')
3122
+				if _iter == 11:
3123
+					self.append_num('-')
3124
+				if _iter == 12:
3125
+					self.append_num('7')
3126
+				if _iter == 13:
3127
+					self.append_num('8')
3128
+				if _iter == 14:
3129
+					self.append_num('9')
3130
+				if _iter == 15:
3131
+					self.append_num('+')
3132
+
3133
+				self.draw_main(o)
3134
+
3135
+			_iter += 1
3136
+
3137
+	def draw_main(self, o):
3138
+		print('drawing ', self.num1)
3139
+		x_size = o.width / 4
3140
+		y_size = o.height / 5
3141
+		og_x = 0
3142
+		o_x = og_x
3143
+		o_y = o.height
3144
+		text_padding = 6
3145
+		
3146
+		_id = 0
3147
+		while _id < 20:
3148
+			# lab = ""
3149
+			# for i in self.labels[_id]:
3150
+			# 	lab += i
3151
+
3152
+			lab = self.labels[_id]
3153
+
3154
+			o.draw.rectangle((o_x, o_y, o_x + x_size, o_y - y_size), outline=0, fill=o.blue)
3155
+			o.center_block(lab, o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
3156
+
3157
+			o_x = o_x + x_size
3158
+			_id += 1
3159
+			if _id % 4 == 0:
3160
+				o_y -= y_size
3161
+				o_x = og_x
3162
+		o.draw.rectangle((0, 0, o.width, y_size), outline=0, fill=o.blue)
3163
+		#o.center_block('where is my fucking text', o.h2, [0, 0, o.width, y_size], o.light_grey)
3164
+		if self.num1 != '':
3165
+			if self.result != '':
3166
+				o.center_block(str(self.result), o.h2, [0, 0, o.width, y_size], o.light_grey)
3167
+			elif self.num2 != '':
3168
+				o.center_block(str(self.num2), o.h2, [0, 0, o.width, y_size], o.light_grey)
3169
+			elif self.op != '':
3170
+				o.center_block(str(self.op), o.h2, [0, 0, o.width, y_size], o.light_grey)
3171
+			else:
3172
+				o.center_block(str(self.num1), o.h2, [0, 0, o.width, y_size], o.light_grey)
3173
+			print('fucking do something')
3174
+		else:
3175
+			print('num1 is empty')
3176
+		o.update_display(0)
3177
+
3178
+	def ReceiveMessage(self, message):
3179
+		o = self.FSM.owner 
3180
+		play_seq(o, message)
3181
+
3182
+	def Exit(self):
3183
+		self.FSM.owner.pub.unregister("beat", self)
3184
+
3185
+#==================================== 

+ 31
- 0
main.py View File

179
 		self.notes_on = []
179
 		self.notes_on = []
180
 		self.clear_notes_on()
180
 		self.clear_notes_on()
181
 
181
 
182
+		self.press_ticks_up = None
183
+		self.press_ticks_down = None
182
 
184
 
183
 		self.pub = observer.Publisher(['beat', 'the joint'])
185
 		self.pub = observer.Publisher(['beat', 'the joint'])
186
+		self.repeater_states = []
187
+		_iter = 0
188
+		while _iter < 18:
189
+			self.repeater_states.append(None)
190
+			_iter += 1
184
 
191
 
185
 		#self.song_file_name = "default.sng"
192
 		#self.song_file_name = "default.sng"
186
 		self.mconf = ConfigObj("config.txt")
193
 		self.mconf = ConfigObj("config.txt")
331
 			elif self.keyState[17] == 4:
338
 			elif self.keyState[17] == 4:
332
 				self.keyState[17] = 0
339
 				self.keyState[17] = 0
333
 
340
 
341
+	def button_repeater(self, state, enables):
342
+		if state == 0:
343
+			pass
344
+			# _iter = 0
345
+			# for b in self.keyState:
346
+			# 	if _iter in enables:
347
+			# 		if b == 2:
348
+			# 			if self.repeater_states[_iter] == None:
349
+			# 				#self.repeater_states[_iter] = pygame.time.get_ticks()
350
+			# 				pass
351
+			# 			else:
352
+			# 				t = pygame.time.get_ticks() - self.repeater_states[_iter]
353
+			# 				if t > 250:
354
+			# 					#self.repeater_states[_iter] = pygame.time.get_ticks()	
355
+			# 					#b = 0
356
+			# 					print('new tick ', _iter, ' ', b)
357
+
358
+			# 	_iter += 1
359
+			#self.repeater_states
360
+		elif state == 1:
361
+			for i in self.repeater_states:
362
+				i = None
363
+			print('reset repeater')
364
+
334
 	def update_bpm(self):
365
 	def update_bpm(self):
335
 		bpm = (60000 / self.bpm) / 4
366
 		bpm = (60000 / self.bpm) / 4
336
 		self.half_bpm = bpm / 2
367
 		self.half_bpm = bpm / 2

Loading…
Cancel
Save