From 848c9d2f740a7ee700251bca180f5bbdf05ed3ee Mon Sep 17 00:00:00 2001 From: teascade Date: Tue, 11 Dec 2018 03:14:05 +0200 Subject: [PATCH] Add support for pressing two buttons on the same side --- input_manager.py | 37 +++++++++++++++++++++++++++++++++++-- main.py | 2 ++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/input_manager.py b/input_manager.py index b5d2bd1..3205ad7 100644 --- a/input_manager.py +++ b/input_manager.py @@ -1,4 +1,7 @@ +import time + + class InputManager: currently_pressed_keys = [] @@ -7,6 +10,13 @@ class InputManager: right_paw_keys = [] shifted_keys = {} + right_paw_repress_time = 0 + left_paw_repress_time = 0 + right_paw_repressed = False + left_paw_repressed = False + + repress_time = 0.05 + def init(self, linux): if linux: import keylist_linux_fi as keys @@ -21,12 +31,35 @@ class InputManager: for key in keys.left_paw_keys: self.left_paw_keys.append(key.lower()) + def timer_update(self): + curr_time = time.time() + update = False + if self.right_paw_repressed: + delta = curr_time - self.right_paw_repress_time + if delta > self.repress_time: + self.right_paw_repressed = False + update = True + if self.left_paw_repressed: + delta = curr_time - self.left_paw_repress_time + if delta > self.repress_time: + self.left_paw_repressed = False + update = True + if update: + self.on_update(True) + def on_update(self, down): pass def press_key(self, key): key = key.lower() if not key in self.currently_pressed_keys: + if key in self.left_paw_keys and self.left_keys_pressed(): + self.left_paw_repressed = True + self.left_paw_repress_time = time.time() + if key in self.right_paw_keys and self.right_keys_pressed(): + self.right_paw_repressed = True + self.right_paw_repress_time = time.time() + self.currently_pressed_keys.append(key) self.on_update(True) @@ -48,11 +81,11 @@ class InputManager: for key in self.currently_pressed_keys: if key in self.left_paw_keys: pressed = True - return pressed + return pressed and not self.left_paw_repressed def right_keys_pressed(self): pressed = False for key in self.currently_pressed_keys: if key in self.right_paw_keys: pressed = True - return pressed + return pressed and not self.right_paw_repressed diff --git a/main.py b/main.py index fe540a6..e745576 100644 --- a/main.py +++ b/main.py @@ -59,6 +59,8 @@ class Main: hooks_manager.cancel() sys.exit() + self.input_manager.timer_update() + font_surface = self.font.render("Pressed keys: " + str(self.input_manager.currently_pressed_keys), True, [0, 0, 0], [255, 255, 255]) textpos = font_surface.get_rect()