almost, but cant press multi keys atm
parent
582ee7a0d2
commit
f2bce26ecb
|
|
@ -19,10 +19,10 @@ def main():
|
||||||
ap.add_argument("--simulated-annealing-nothing-penalty", default=100, type=int)
|
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("--simulated-annealing-decay-rate", default=5, type=int)
|
||||||
ap.add_argument("--translation", default=json.dumps({
|
ap.add_argument("--translation", default=json.dumps({
|
||||||
"up": {"key": "w", "weight": 20},
|
"up": {"key": "w", "weight": 20, "hold": False},
|
||||||
"down": {"key": "s", "weight": 1},
|
"down": {"key": "s", "weight": 1, "hold": True},
|
||||||
"left": {"key": "a", "weight": 1},
|
"left": {"key": "a", "weight": 1, "hold": True},
|
||||||
"right": {"key": "d", "weight": 20},
|
"right": {"key": "d", "weight": 20, "hold": True},
|
||||||
}))
|
}))
|
||||||
args = ap.parse_args()
|
args = ap.parse_args()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,7 @@ class Writer:
|
||||||
def write(self, v):
|
def write(self, v):
|
||||||
latest = Line(v)
|
latest = Line(v)
|
||||||
chosen = self.chooser.choose(self.previous, latest)
|
chosen = self.chooser.choose(self.previous, latest)
|
||||||
if chosen.v != self.previous.v:
|
self.writer.write(chosen)
|
||||||
self.writer.write(chosen)
|
|
||||||
self.previous = chosen
|
self.previous = chosen
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
|
|
@ -31,14 +30,19 @@ class MultiWriter:
|
||||||
w.write(v)
|
w.write(v)
|
||||||
|
|
||||||
class StdoutWriter:
|
class StdoutWriter:
|
||||||
|
def __init__(self):
|
||||||
|
self.last = ""
|
||||||
def write(self, v):
|
def write(self, v):
|
||||||
|
if str(v) == self.last:
|
||||||
|
return
|
||||||
|
self.last = str(v)
|
||||||
print(v)
|
print(v)
|
||||||
|
|
||||||
class PyAutoGUIWriter:
|
class PyAutoGUIWriter:
|
||||||
def __init__(self, optional_translation):
|
def __init__(self, translation):
|
||||||
pyautogui.FAILSAFE = False
|
pyautogui.FAILSAFE = False
|
||||||
self.keys_down = set()
|
self.keys_down = set()
|
||||||
self.translation = optional_translation
|
self.translation = translation
|
||||||
log.info(json.dumps(self.translation, indent=" "))
|
log.info(json.dumps(self.translation, indent=" "))
|
||||||
|
|
||||||
def write(self, v):
|
def write(self, v):
|
||||||
|
|
@ -48,24 +52,31 @@ class PyAutoGUIWriter:
|
||||||
if got:
|
if got:
|
||||||
to_push.add(got)
|
to_push.add(got)
|
||||||
for key in [k for k in self.keys_down]:
|
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)
|
self.release(key)
|
||||||
for key in to_push:
|
for key in to_push:
|
||||||
self.push(key)
|
self.push(key[0], key[1])
|
||||||
log.info("PUSHING", self.keys_down)
|
log.info("PUSHING", self.keys_down)
|
||||||
|
|
||||||
# https://pyautogui.readthedocs.io/en/latest/keyboard.html#keyboard-keys
|
# https://pyautogui.readthedocs.io/en/latest/keyboard.html#keyboard-keys
|
||||||
def translate(self, v):
|
def translate(self, v):
|
||||||
result = self.translation.get(v, {}).get("key")
|
result = self.translation.get(v, {})
|
||||||
if result:
|
key = result.get("key")
|
||||||
return result
|
hold = result.get("hold")
|
||||||
|
if key:
|
||||||
|
return (key, hold)
|
||||||
|
|
||||||
def push(self, k):
|
def push(self, k, hold):
|
||||||
self.keys_down.add(k)
|
self.keys_down.add(k)
|
||||||
pyautogui.keyDown(k)
|
pyautogui.keyDown(k)
|
||||||
|
if not hold:
|
||||||
|
self._release(k)
|
||||||
|
|
||||||
def release(self, k):
|
def release(self, k):
|
||||||
self.keys_down.remove(k)
|
self.keys_down.remove(k)
|
||||||
|
self._release(k)
|
||||||
|
|
||||||
|
def _release(self, k):
|
||||||
pyautogui.keyUp(k)
|
pyautogui.keyUp(k)
|
||||||
|
|
||||||
class Line:
|
class Line:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue