Add joycon-python source code
This commit is contained in:
parent
749a2a92fe
commit
3d00015607
7 changed files with 995 additions and 0 deletions
133
pycon/event.py
Normal file
133
pycon/event.py
Normal file
|
@ -0,0 +1,133 @@
|
|||
from .wrappers import PythonicJoyCon
|
||||
|
||||
|
||||
class ButtonEventJoyCon(PythonicJoyCon):
|
||||
def __init__(self, *args, track_sticks=False, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self._events_buffer = [] # TODO: perhaps use a deque instead?
|
||||
|
||||
self._event_handlers = {}
|
||||
self._event_track_sticks = track_sticks
|
||||
|
||||
self._previous_stick_l_btn = 0
|
||||
self._previous_stick_r_btn = 0
|
||||
self._previous_stick_r = self._previous_stick_l = (0, 0)
|
||||
self._previous_r = self._previous_l = 0
|
||||
self._previous_zr = self._previous_zl = 0
|
||||
self._previous_plus = self._previous_minus = 0
|
||||
self._previous_a = self._previous_right = 0
|
||||
self._previous_b = self._previous_down = 0
|
||||
self._previous_x = self._previous_up = 0
|
||||
self._previous_y = self._previous_left = 0
|
||||
self._previous_home = self._previous_capture = 0
|
||||
self._previous_right_sr = self._previous_left_sr = 0
|
||||
self._previous_right_sl = self._previous_left_sl = 0
|
||||
|
||||
if self.is_left():
|
||||
self.register_update_hook(self._event_tracking_update_hook_left)
|
||||
else:
|
||||
self.register_update_hook(self._event_tracking_update_hook_right)
|
||||
|
||||
def joycon_button_event(self, button, state): # overridable
|
||||
self._events_buffer.append((button, state))
|
||||
|
||||
def events(self):
|
||||
while self._events_buffer:
|
||||
yield self._events_buffer.pop(0)
|
||||
|
||||
@staticmethod
|
||||
def _event_tracking_update_hook_right(self):
|
||||
if self._event_track_sticks:
|
||||
pressed = self.stick_r_btn
|
||||
if self._previous_stick_r_btn != pressed:
|
||||
self._previous_stick_r_btn = pressed
|
||||
self.joycon_button_event("stick_r_btn", pressed)
|
||||
pressed = self.r
|
||||
if self._previous_r != pressed:
|
||||
self._previous_r = pressed
|
||||
self.joycon_button_event("r", pressed)
|
||||
pressed = self.zr
|
||||
if self._previous_zr != pressed:
|
||||
self._previous_zr = pressed
|
||||
self.joycon_button_event("zr", pressed)
|
||||
pressed = self.plus
|
||||
if self._previous_plus != pressed:
|
||||
self._previous_plus = pressed
|
||||
self.joycon_button_event("plus", pressed)
|
||||
pressed = self.a
|
||||
if self._previous_a != pressed:
|
||||
self._previous_a = pressed
|
||||
self.joycon_button_event("a", pressed)
|
||||
pressed = self.b
|
||||
if self._previous_b != pressed:
|
||||
self._previous_b = pressed
|
||||
self.joycon_button_event("b", pressed)
|
||||
pressed = self.x
|
||||
if self._previous_x != pressed:
|
||||
self._previous_x = pressed
|
||||
self.joycon_button_event("x", pressed)
|
||||
pressed = self.y
|
||||
if self._previous_y != pressed:
|
||||
self._previous_y = pressed
|
||||
self.joycon_button_event("y", pressed)
|
||||
pressed = self.home
|
||||
if self._previous_home != pressed:
|
||||
self._previous_home = pressed
|
||||
self.joycon_button_event("home", pressed)
|
||||
pressed = self.right_sr
|
||||
if self._previous_right_sr != pressed:
|
||||
self._previous_right_sr = pressed
|
||||
self.joycon_button_event("right_sr", pressed)
|
||||
pressed = self.right_sl
|
||||
if self._previous_right_sl != pressed:
|
||||
self._previous_right_sl = pressed
|
||||
self.joycon_button_event("right_sl", pressed)
|
||||
|
||||
@staticmethod
|
||||
def _event_tracking_update_hook_left(self):
|
||||
if self._event_track_sticks:
|
||||
pressed = self.stick_l_btn
|
||||
if self._previous_stick_l_btn != pressed:
|
||||
self._previous_stick_l_btn = pressed
|
||||
self.joycon_button_event("stick_l_btn", pressed)
|
||||
pressed = self.l
|
||||
if self._previous_l != pressed:
|
||||
self._previous_l = pressed
|
||||
self.joycon_button_event("l", pressed)
|
||||
pressed = self.zl
|
||||
if self._previous_zl != pressed:
|
||||
self._previous_zl = pressed
|
||||
self.joycon_button_event("zl", pressed)
|
||||
pressed = self.minus
|
||||
if self._previous_minus != pressed:
|
||||
self._previous_minus = pressed
|
||||
self.joycon_button_event("minus", pressed)
|
||||
pressed = self.up
|
||||
if self._previous_up != pressed:
|
||||
self._previous_up = pressed
|
||||
self.joycon_button_event("up", pressed)
|
||||
pressed = self.down
|
||||
if self._previous_down != pressed:
|
||||
self._previous_down = pressed
|
||||
self.joycon_button_event("down", pressed)
|
||||
pressed = self.left
|
||||
if self._previous_left != pressed:
|
||||
self._previous_left = pressed
|
||||
self.joycon_button_event("left", pressed)
|
||||
pressed = self.right
|
||||
if self._previous_right != pressed:
|
||||
self._previous_right = pressed
|
||||
self.joycon_button_event("right", pressed)
|
||||
pressed = self.capture
|
||||
if self._previous_capture != pressed:
|
||||
self._previous_capture = pressed
|
||||
self.joycon_button_event("capture", pressed)
|
||||
pressed = self.left_sr
|
||||
if self._previous_left_sr != pressed:
|
||||
self._previous_left_sr = pressed
|
||||
self.joycon_button_event("left_sr", pressed)
|
||||
pressed = self.left_sl
|
||||
if self._previous_left_sl != pressed:
|
||||
self._previous_left_sl = pressed
|
||||
self.joycon_button_event("left_sl", pressed)
|
Loading…
Add table
Add a link
Reference in a new issue