Browse Source

slight tweak to gamepad input code

Thomas Buck 7 months ago
parent
commit
c70d975e83
8 changed files with 47 additions and 115 deletions
  1. 1
    14
      breakout.py
  2. 40
    17
      gamepad.py
  3. 1
    14
      mapper.py
  4. 1
    14
      pico.py
  5. 1
    14
      runner.py
  6. 1
    14
      snake.py
  7. 1
    14
      tetris.py
  8. 1
    14
      weather.py

+ 1
- 14
breakout.py View File

@@ -81,20 +81,7 @@ class Breakout:
81 81
 
82 82
         self.place()
83 83
 
84
-        self.old_keys = {
85
-            "left": False,
86
-            "right": False,
87
-            "up": False,
88
-            "down": False,
89
-            "a": False,
90
-            "b": False,
91
-            "x": False,
92
-            "y": False,
93
-            "l": False,
94
-            "r": False,
95
-            "start": False,
96
-            "select": False,
97
-        }
84
+        self.old_keys = self.input.empty() # TODO support missing input
98 85
 
99 86
     def finished(self):
100 87
         if self.input == None:

+ 40
- 17
gamepad.py View File

@@ -17,20 +17,7 @@ class InputWrapper:
17 17
     def __init__(self):
18 18
         self.devices = []
19 19
         self.selector = DefaultSelector()
20
-        self.keys = {
21
-            "left": False,
22
-            "right": False,
23
-            "up": False,
24
-            "down": False,
25
-            "a": False,
26
-            "b": False,
27
-            "x": False,
28
-            "y": False,
29
-            "l": False,
30
-            "r": False,
31
-            "start": False,
32
-            "select": False,
33
-        }
20
+        self.keys = self.empty()
34 21
 
35 22
         devices = [InputDevice(path) for path in list_devices()]
36 23
         for device in devices:
@@ -58,6 +45,24 @@ class InputWrapper:
58 45
             self.devices.append(d)
59 46
             self.selector.register(d, EVENT_READ)
60 47
 
48
+    def empty(self):
49
+        return {
50
+            "left": False,
51
+            "right": False,
52
+            "up": False,
53
+            "down": False,
54
+            "a": False,
55
+            "b": False,
56
+            "x": False,
57
+            "y": False,
58
+            "l": False,
59
+            "r": False,
60
+            "start": False,
61
+            "select": False,
62
+            "l2": False,
63
+            "r2": False,
64
+        }
65
+
61 66
     def get(self, verbose = False):
62 67
         for key, mask in self.selector.select(0):
63 68
             device = key.fileobj
@@ -87,6 +92,10 @@ class InputWrapper:
87 92
                         self.keys["r"] = v
88 93
                     elif (event.code == ecodes.BTN_TOP2) or (event.code == ecodes.KEY_A):
89 94
                         self.keys["l"] = v
95
+                    elif event.code == ecodes.BTN_BASE:
96
+                        self.keys["r2"] = v
97
+                    elif event.code == ecodes.BTN_BASE2:
98
+                        self.keys["l2"] = v
90 99
                     elif (event.code == ecodes.BTN_BASE4) or (event.code == ecodes.KEY_BACKSPACE):
91 100
                         self.keys["start"] = v
92 101
                     elif event.code == ecodes.BTN_BASE3:
@@ -113,9 +122,13 @@ class InputWrapper:
113 122
                         else:
114 123
                             self.keys["down"] = False
115 124
                             self.keys["up"] = False
125
+                elif event.type == ecodes.EV_SYN:
126
+                    continue # don't print sync events
116 127
 
117 128
                 if verbose:
118
-                    print(categorize(event), event)
129
+                    print(categorize(event))
130
+                    print(event)
131
+                    print()
119 132
 
120 133
         return self.keys
121 134
 
@@ -123,13 +136,23 @@ if __name__ == "__main__":
123 136
     from pprint import pprint
124 137
     import sys
125 138
 
126
-    if len(sys.argv) > 1:
139
+    if (len(sys.argv) > 1) and (sys.argv[1] == "list"):
127 140
         devices = [InputDevice(path) for path in list_devices()]
128 141
         for device in devices:
129 142
             print(device.path, device.name, device.phys)
130 143
             pprint(device.capabilities(verbose=True))
131 144
             print()
132
-    else:
145
+    elif (len(sys.argv) > 1) and (sys.argv[1] == "events"):
133 146
         i = InputWrapper()
147
+        last_keys = None
134 148
         while True:
135 149
             i.get(True)
150
+    else:
151
+        i = InputWrapper()
152
+        last_keys = None
153
+        while True:
154
+            keys = i.get()
155
+            if (last_keys == None) or (keys != last_keys):
156
+                pprint(keys)
157
+                print()
158
+                last_keys = keys.copy()

+ 1
- 14
mapper.py View File

@@ -109,20 +109,7 @@ class MapperReduceBrightness(MapperNull):
109 109
         self.refresh = 60 * 60 * 6
110 110
         self.factor = 1.0
111 111
         self.user_mod = None
112
-        self.old_keys = {
113
-            "left": False,
114
-            "right": False,
115
-            "up": False,
116
-            "down": False,
117
-            "a": False,
118
-            "b": False,
119
-            "x": False,
120
-            "y": False,
121
-            "l": False,
122
-            "r": False,
123
-            "start": False,
124
-            "select": False,
125
-        }
112
+        self.old_keys = self.input.empty() # TODO support missing input
126 113
 
127 114
     def fetch(self):
128 115
         if useNTP:

+ 1
- 14
pico.py View File

@@ -291,20 +291,7 @@ class PicoBatt:
291 291
 class PicoInput:
292 292
     def __init__(self):
293 293
         self.gui = None
294
-        self.keys = {
295
-            "left": False,
296
-            "right": False,
297
-            "up": False,
298
-            "down": False,
299
-            "a": False,
300
-            "b": False,
301
-            "x": False,
302
-            "y": False,
303
-            "l": False,
304
-            "r": False,
305
-            "start": False,
306
-            "select": False,
307
-        }
294
+        self.keys = self.input.empty() # TODO support missing input
308 295
 
309 296
     def get(self):
310 297
         if self.gui != None:

+ 1
- 14
runner.py View File

@@ -40,20 +40,7 @@ class TunnelRun:
40 40
 
41 41
         self.player = [ int(self.gui.width / 2), int(self.gui.height / 2) ]
42 42
 
43
-        self.old_keys = {
44
-            "left": False,
45
-            "right": False,
46
-            "up": False,
47
-            "down": False,
48
-            "a": False,
49
-            "b": False,
50
-            "x": False,
51
-            "y": False,
52
-            "l": False,
53
-            "r": False,
54
-            "start": False,
55
-            "select": False,
56
-        }
43
+        self.old_keys = self.input.empty() # TODO support missing input
57 44
 
58 45
     def finished(self):
59 46
         if self.input == None:

+ 1
- 14
snake.py View File

@@ -49,20 +49,7 @@ class Snake:
49 49
         DrawText = util.getTextDrawer()
50 50
         self.text = DrawText(self.gui, self.text_c)
51 51
 
52
-        self.old_keys = {
53
-            "left": False,
54
-            "right": False,
55
-            "up": False,
56
-            "down": False,
57
-            "a": False,
58
-            "b": False,
59
-            "x": False,
60
-            "y": False,
61
-            "l": False,
62
-            "r": False,
63
-            "start": False,
64
-            "select": False,
65
-        }
52
+        self.old_keys = self.input.empty() # TODO support missing input
66 53
 
67 54
         self.placeDot()
68 55
 

+ 1
- 14
tetris.py View File

@@ -145,20 +145,7 @@ class Tetris:
145 145
         self.data = [[self.bg for y in range(self.height)] for x in range(self.width)]
146 146
         self.piece = None
147 147
         self.next_piece = None
148
-        self.old_keys = {
149
-            "left": False,
150
-            "right": False,
151
-            "up": False,
152
-            "down": False,
153
-            "a": False,
154
-            "b": False,
155
-            "x": False,
156
-            "y": False,
157
-            "l": False,
158
-            "r": False,
159
-            "start": False,
160
-            "select": False,
161
-        }
148
+        self.old_keys = self.input.empty() # TODO support missing input
162 149
         self.pause = False
163 150
 
164 151
     def finished(self):

+ 1
- 14
weather.py View File

@@ -85,20 +85,7 @@ class WeatherScreen:
85 85
 
86 86
     def restart(self):
87 87
         self.state = 0
88
-        self.old_keys = {
89
-            "left": False,
90
-            "right": False,
91
-            "up": False,
92
-            "down": False,
93
-            "a": False,
94
-            "b": False,
95
-            "x": False,
96
-            "y": False,
97
-            "l": False,
98
-            "r": False,
99
-            "start": False,
100
-            "select": False,
101
-        }
88
+        self.old_keys = self.input.empty() # TODO support missing input
102 89
         self.done = False
103 90
         self.last = time.time()
104 91
 

Loading…
Cancel
Save