from evdev import UInput, ecodes as e import time class EldenController: def __init__(self): self.cap = { e.EV_KEY: [ e.KEY_W, e.KEY_A, e.KEY_S, e.KEY_D, e.KEY_SPACE, e.KEY_E, e.KEY_R, e.KEY_Q, e.KEY_DOWN, e.BTN_LEFT, e.BTN_RIGHT ], e.EV_REL: [e.REL_X, e.REL_Y] } self.ui = UInput(self.cap, name='EldenAI-DualController') def move(self, direction): for key in [e.KEY_W, e.KEY_A, e.KEY_S, e.KEY_D]: self.ui.write(e.EV_KEY, key, 0) if direction == 1: self.ui.write(e.EV_KEY, e.KEY_W, 1) elif direction == 2: self.ui.write(e.EV_KEY, e.KEY_S, 1) elif direction == 3: self.ui.write(e.EV_KEY, e.KEY_A, 1) elif direction == 4: self.ui.write(e.EV_KEY, e.KEY_D, 1) self.ui.syn() def look(self, x, y): self.ui.write(e.EV_REL, e.REL_X, int(x)) self.ui.write(e.EV_REL, e.REL_Y, int(y)) self.ui.syn() def dodge(self): self.press(e.KEY_SPACE) def attack(self): self.press(e.BTN_LEFT) def use_item(self): self.press(e.KEY_R) def switch_item(self): self.press(e.KEY_DOWN) def press(self, key, duration=0.05): self.ui.write(e.EV_KEY, key, 1) self.ui.syn() time.sleep(duration) self.ui.write(e.EV_KEY, key, 0) self.ui.syn()