Mercurial > circuitpython-lameboy
annotate menu.py @ 14:8239a9ade11d draft default tip
Add a license
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Fri, 23 Feb 2018 12:07:23 +0100 |
| parents | 46a5abc02fd1 |
| children |
| rev | line source |
|---|---|
|
11
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
1 import sys |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
2 import os |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
3 import time |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
4 import pew |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
5 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
6 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
7 def scroll(pix, dx=1): |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
8 x = 0 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
9 while True: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
10 for x in range(x, pix.width, dx): |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
11 screen.blit(pix, -x, 1) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
12 yield x |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
13 x = -8 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
14 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
15 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
16 def change(pix, next_pix, x, dy): |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
17 for y in range(1, 1 + 8 * dy, dy): |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
18 screen.box(0) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
19 screen.blit(pix, -x, y) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
20 screen.blit(next_pix, 0, y - 7 * dy) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
21 yield |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
22 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
23 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
24 def hold_keys(): |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
25 global hold |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
26 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
27 try: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
28 keys = pew.keys() |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
29 except pew.GameOver: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
30 keys = 0 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
31 if keys: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
32 hold = 0 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
33 while pew.keys() and time.monotonic() - hold < 0.25: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
34 return 0 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
35 hold = time.monotonic() |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
36 return keys |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
37 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
38 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
39 def menu(entries): |
| 13 | 40 brightness = 0 |
|
11
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
41 pew.brightness(brightness) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
42 selected = 0 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
43 pix = pew.Pix.from_text(entries[selected]) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
44 x = 0 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
45 animation = scroll(pix) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
46 while True: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
47 keys = hold_keys() |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
48 if keys & pew.K_O: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
49 return |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
50 if keys & pew.K_RIGHT: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
51 brightness = min(brightness + 1, 15) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
52 pew.brightness(brightness) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
53 if keys & pew.K_LEFT: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
54 brightness = max(brightness - 1, 0) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
55 pew.brightness(brightness) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
56 if keys & pew.K_UP: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
57 selected = (selected - 1) % len(entries) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
58 next_pix = pew.Pix.from_text(entries[selected]) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
59 yield from change(pix, next_pix, x, 1) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
60 hold_keys() |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
61 pix = next_pix |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
62 animation = scroll(pix) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
63 keys = 0 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
64 if keys & pew.K_DOWN: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
65 selected = (selected + 1) % len(entries) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
66 next_pix = pew.Pix.from_text(entries[selected]) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
67 yield from change(pix, next_pix, x, -1) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
68 hold_keys() |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
69 pix = next_pix |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
70 animation = scroll(pix) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
71 keys = 0 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
72 x = next(animation) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
73 yield selected |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
74 yield selected |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
75 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
76 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
77 pew.init() |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
78 pew.init() |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
79 while True: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
80 hold = 0 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
81 screen = pew.Pix() |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
82 files = [name[:-3] for name in os.listdir() |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
83 if name.endswith('.py') and name not in { |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
84 'main.py', 'boot.py', 'menu.py', 'pew.py', 'lameboy.py' |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
85 }] |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
86 m = menu(files) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
87 selected = 0 |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
88 try: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
89 while pew.keys(): |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
90 pew.tick(1/24) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
91 except pew.GameOver: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
92 pass |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
93 while True: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
94 try: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
95 selected = next(m) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
96 except StopIteration: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
97 break |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
98 pew.show(screen) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
99 pew.tick(1/24) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
100 screen.box(0) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
101 pew.show(screen) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
102 game = files[selected] |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
103 del screen |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
104 del m |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
105 del files |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
106 try: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
107 __import__(game) |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
108 except pew.GameOver: |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
109 continue |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
110 del sys.modules[game] |
|
464aa1a9f0f8
Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
111 |
