Files
er_ai_env/input_driver.py
Cametendo b4a3914794 Initial commit — Elden Ring RL agent
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 19:49:21 +02:00

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