Forward rumble back to the guest controller (both backends)
The XInput hook used to swallow XInputSetState; now it records the requested left/right motor speeds into the status back-channel (protocol v8->v9: per-slot rumble_left/right in HookStatus). Each frame the host reads them and, only on change, drives the guest's actuator via the active backend: - XInput: XInputSetState on the guest's slot (the open question is whether Steam's RPT virtual pad accepts vibration and routes it to the guest -- needs live RPT); - Steam Input: SteamInput TriggerVibration on the slot's controller handle, with the XInput fallback for slots Steam isn't driving. InputSource gains a set_rumble(slot,left,right) hook (default no-op) implemented by both backends; SteamInputSource now tracks per-slot controller handles + which slots it drives. Verified: hook_selftest (x64 + x86) now asserts the hook records the rumble from XInputSetState into the status; full build x64 + x86 clean; ctest x64 9/9, x86 3/3. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -76,14 +76,6 @@ is removed from this list once done — so the top item is always next. The
|
||||
self-verifiable tooling / UI / input items come first; the game-pipeline items that
|
||||
need a real game (and Remote Play) to fully validate come last.
|
||||
|
||||
- **Rumble / haptics forwarding (both backends).** Currently unsupported — the XInput
|
||||
hook swallows `XInputSetState`. Add a reverse path: the hook captures the game's
|
||||
`XInputSetState` (left/right motor) and publishes it over a hook→host channel (the
|
||||
back-channel already exists), and the host drives the guest's actuators per backend —
|
||||
**XInput:** call `XInputSetState` on the guest's slot (the viability unknown is
|
||||
whether Steam's RPT virtual pad accepts vibration and routes it to the guest);
|
||||
**Steam Input:** `SteamInput()->TriggerVibration` / `Legacy_TriggerHapticPulse`.
|
||||
Map each guest slot to the right actuator.
|
||||
- **Per-backend input debug visualization.** To separate "wrong input *into* the
|
||||
tool" from "wrong input *out to* the game", show three distinct views in the
|
||||
Controllers panel (under Debug details): (a) **received via XInput** (raw
|
||||
|
||||
Reference in New Issue
Block a user