Input API (decouple input from actions, runtime key remapping, multi-device)
Current State
Input is read ad-hoc from SDL directly where needed. There is no abstraction separating raw devices from game actions, no remapping, and no multi-device support.
Goal
A reusable Input API that decouples physical input from semantic actions, supports runtime remapping, and serializes bindings to settings (#13 (closed)).
Tasks
- Raw device layer: keyboard, mouse (move/buttons/wheel), gamepad (axes/buttons/triggers), touch (later)
- Action maps: named actions bound to one or more inputs; button/axis/vector action types
- Polling API (
isPressed,wasPressed,axis,vector) and event subscription - Runtime rebinding (listen-for-next-input) and conflict handling
- Multiple devices / local players (device assignment)
- Serialize/deserialize bindings via the settings/DataAsset system
- Editor UI to view/edit action maps (can reuse #14 shortcut conflict UI)
- Expose to user scripts; wire into
examples/basic-project(Player movement)
Acceptance Criteria
- Game code reacts to actions, never raw key codes.
- Bindings can be remapped at runtime and persist across restarts.
- Keyboard + gamepad both drive the same actions.
Related
- #13 (closed) (settings), #14 (shortcuts), #9 (closed) (UI input).
Edited by Bruno Massa