forked from Supernova1114/Gamepad-Input
-
Notifications
You must be signed in to change notification settings - Fork 0
/
api_example.py
217 lines (149 loc) · 4.77 KB
/
api_example.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
# Author: Cameron Rosenthal @Supernova1114
# Description: Example use of gamepad_input API
import gamepad_input
# Button DOWN callbacks
def north():
print("North")
def west():
print("West")
def south():
print("South")
gamepad_input.rumbleAll(0, 0.3, 100)
def east():
print("East")
def share():
print("Share")
def options():
print("Options")
def home():
print("Home")
def l1():
print("L1")
def r1():
print("R1")
def l3():
print("L3")
def r3():
print("R3")
# Button UP callbacks
def northUp():
print("North Up")
def westUp():
print("West Up")
def southUp():
print("South Up")
def eastUp():
print("East Up")
def shareUp():
print("Share Up")
def optionsUp():
print("Options Up")
def homeUp():
print("Home Up")
def l1Up():
print("L1 Up")
def r1Up():
print("R1 Up")
def l3Up():
print("L3 Up")
def r3Up():
print("R3 Up")
# Hat callbacks
def hatNorth():
print("Hat North")
def hatSouth():
print("Hat South")
def hatWest():
print("Hat West")
def hatEast():
print("Hat East")
def hatCentered():
print("Hat Centered")
# Connection callbacks
def onGamepadConnect():
...
def onGamepadDisconnect():
...
# Main function
def main():
# Set config file to use to lookup gamepad layouts.
# If you don't set this, default file path will be
# gamepads.config in the same directory as this file
# gamepad_input.setConfigFile("path/to/config/file")
# To get directory of current script:
# os.path.dirname(os.path.realpath(__file__))
# Set button callbacks
buttonDownEvents = [north, west, south, east, share, options, home, l1, r1, l3, r3]
buttonUpEvents = [northUp, westUp, southUp, eastUp, shareUp, optionsUp, homeUp, l1Up, r1Up, l3Up, r3Up]
# Note: You can set a callback to 'None' if you don't want to use it
# Set hat callbacks
hatEvents = [hatNorth, hatSouth, hatWest, hatEast, hatCentered]
# Set connection callbacks
connectionEvents = [onGamepadConnect, onGamepadDisconnect]
# Async loop to handle gamepad button events
gamepad_input.run_event_loop(buttonDownEvents, buttonUpEvents, hatEvents, connectionEvents)
# Note: callbacks are by default set to 'None' if not specified as arguments
# Ex: gamepad_input.run_event_loop(buttonDownEvents, buttonUpEvents)
# Ex: gamepad_input.run_event_loop(buttonDownEvents, None, None)
# You can set individual callbacks to None inside callback arrays if you do not need them
# Ex: buttonDownEvents = [north, west, None, east]
# How to get gamepad object and read axis values
axis_deadzone = 0.3 # Deadzone is 0 to 1
# Note: axis value will be 0 until you move past the deadzone
# Rumble all gamepads
# Low frequency is the heavy rumble (0 to 1)
# High frequency is the light rumble (0 to 1)
# def rumbleAll(low_frequency: float, high_frequency: float, duration: int)
# gamepad_input.rumbleAll(0, 0.3, 100)
# Stop rumble on all gamepads
# gamepad_input.stopRumbleAll()
# Safely quit program
# gamepad_input.quit()
while True:
# Get gamepad object by index
gamepad = gamepad_input.getGamepad(0)
# Get left stick axis values (axis moves from -1 to 1)
(ls_x, ls_y) = gamepad_input.getLeftStick(gamepad, axis_deadzone)
(rs_x, rs_y) = gamepad_input.getRightStick(gamepad, axis_deadzone)
# Get trigger axis values (axis moves from 0 to 1)
(l2, r2) = gamepad_input.getTriggers(gamepad, axis_deadzone)
# Get hat axis values (axis moves from -1 to 1)
# You can also use the hat callbacks from the run_event_loop() function
(hat_x, hat_y) = gamepad_input.getHat(gamepad)
# If you want to check if a button is pressed, you can use this
# or use the callback functions method from the run_event_loop() function
# Button index corresponds to the order of buttons in gamepads.config
if gamepad_input.getButtonValue(gamepad, 1):
...
# Print axis values
if ls_x > 0:
print("LS Right")
elif ls_x < 0:
print("LS Left")
if ls_y > 0:
print("LS Down")
elif ls_y < 0:
print("LS Up")
if rs_x > 0:
print("RS Right")
elif rs_x < 0:
print("RS Left")
if rs_y > 0:
print("RS Down")
elif rs_y < 0:
print("RS Up")
if l2 > 0:
print("L2")
if r2 > 0:
print("R2")
if hat_x > 0:
print("Hat East")
if hat_x < 0:
print("Hat West")
if hat_y < 0:
print("Hat South")
if hat_y > 0:
print("Hat North")
# Run the program
if __name__ == "__main__":
main()