diff --git a/src/main.py b/src/main.py index e79fff6..fe5628e 100644 --- a/src/main.py +++ b/src/main.py @@ -19,10 +19,10 @@ def main(): ap.add_argument("--simulated-annealing-nothing-penalty", default=100, type=int) ap.add_argument("--simulated-annealing-decay-rate", default=5, type=int) ap.add_argument("--translation", default=json.dumps({ - "up": {"key": "w", "weight": 20}, - "down": {"key": "s", "weight": 1}, - "left": {"key": "a", "weight": 1}, - "right": {"key": "d", "weight": 20}, + "up": {"key": "w", "weight": 20, "hold": False}, + "down": {"key": "s", "weight": 1, "hold": True}, + "left": {"key": "a", "weight": 1, "hold": True}, + "right": {"key": "d", "weight": 20, "hold": True}, })) args = ap.parse_args() diff --git a/src/writer.py b/src/writer.py index dbdd586..2b97214 100644 --- a/src/writer.py +++ b/src/writer.py @@ -14,8 +14,7 @@ class Writer: def write(self, v): latest = Line(v) chosen = self.chooser.choose(self.previous, latest) - if chosen.v != self.previous.v: - self.writer.write(chosen) + self.writer.write(chosen) self.previous = chosen def close(self): @@ -31,14 +30,19 @@ class MultiWriter: w.write(v) class StdoutWriter: + def __init__(self): + self.last = "" def write(self, v): + if str(v) == self.last: + return + self.last = str(v) print(v) class PyAutoGUIWriter: - def __init__(self, optional_translation): + def __init__(self, translation): pyautogui.FAILSAFE = False self.keys_down = set() - self.translation = optional_translation + self.translation = translation log.info(json.dumps(self.translation, indent=" ")) def write(self, v): @@ -48,24 +52,31 @@ class PyAutoGUIWriter: if got: to_push.add(got) for key in [k for k in self.keys_down]: - if not key in to_push: + if not key in [i[0] for i in to_push]: self.release(key) for key in to_push: - self.push(key) + self.push(key[0], key[1]) log.info("PUSHING", self.keys_down) # https://pyautogui.readthedocs.io/en/latest/keyboard.html#keyboard-keys def translate(self, v): - result = self.translation.get(v, {}).get("key") - if result: - return result + result = self.translation.get(v, {}) + key = result.get("key") + hold = result.get("hold") + if key: + return (key, hold) - def push(self, k): + def push(self, k, hold): self.keys_down.add(k) pyautogui.keyDown(k) + if not hold: + self._release(k) def release(self, k): self.keys_down.remove(k) + self._release(k) + + def _release(self, k): pyautogui.keyUp(k) class Line: