lanpartyplayspokemon/backend/backend/pag.py

54 lines
1.4 KiB
Python

import pyautogui
from threading import Thread
from time import sleep
from .input import KEYMAP, Input, Button, Event
class InputHandler:
def __init__(self):
self.current: Input = {button: False for button in Button}
self.previous: Input = {button: False for button in Button}
print(f"sanity check: {self.previous=}, {self.current=}")
def set(self, input: Input):
# MUST NOT BLOCK
# to be called from asyncio context
self.current = input
def get(self) -> list[Event]:
events = []
for button in Button:
match (self.previous[button], self.current[button]):
case (True, False):
events.append(Event(button, "up"))
case (False, True):
events.append(Event(button, "down"))
self.previous = self.current
return events
input = InputHandler()
class Runner(Thread):
def __init__(self):
super().__init__()
self.running = True
def stop(self):
self.running = False
def run(self):
while self.running:
events = input.get()
for event in events:
print(f"[pag] key{event.direction} {event.button}")
if event.direction == "down":
pyautogui.keyDown(KEYMAP[event.button])
else:
pyautogui.keyUp(KEYMAP[event.button])
sleep(0.05)