41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
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()
|