almost, but cant press multi keys atm

master
Bel LaPointe 2022-09-20 16:19:26 -06:00
parent 582ee7a0d2
commit f2bce26ecb
2 changed files with 25 additions and 14 deletions

View File

@ -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()

View File

@ -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: