Configure the game controller input module
Settings are edited in HEAT Capture’s module settings UI, under HEAT.GameControllerInput.
Device selection
| Setting | Type | Default | What it controls |
|---|---|---|---|
DeviceId | string (GUID) | empty (“Default Device”) | Restricts capture to one specific device. Left empty, every connected device matching DeviceTypes (and every XInput slot, if UseXInput is on) is captured at once. The settings UI offers a dropdown populated from currently connected devices, refreshed when DeviceTypes changes; the value is either a real DirectInput instance GUID or a synthetic GUID identifying an XInput player slot. |
DeviceTypes | set of DirectInput device types | Gamepad, Joystick, Driving, Flight | Which DirectInput device categories to enumerate. Does not affect XInput, which is a separate path controlled by UseXInput below. |
UseXInput | boolean | true | Also polls up to four XInput player slots. Required for Xbox One/Series controllers to deliver data at all - see Troubleshooting. |
A controller that appears under both DirectInput and XInput (most Xbox-class pads do) is listed
twice in the DeviceId dropdown; picking one entry captures only that path for that physical
device, not both.
Polling and output
| Setting | Type | Default | What it controls |
|---|---|---|---|
PollIntervalMs | integer (ms) | 4 | How often the background poll thread reads every device (about 250Hz at the default) into an in-memory cache. This does not by itself control how often data is published - see the warning below. |
TrackEdgeDetection | boolean | true | Intended to control button-state (Down/Hold/Released) event computation. At this source revision the module computes and publishes those events regardless of this setting. See Data produced for the state meanings and Hold repetition. |
SendAxisData | boolean | true | Publishes a ControllerAxes event every tick for every active DirectInput device, even when no axis has moved. In this release, XInput axis events continue even when this setting is false. See Data produced for the two field schemas. |
DebugLogs | boolean | false | Logs every poll error and device acquisition at a verbose level, not only the first occurrence of each. |
This module also exposes the generic settings every HEAT Capture module has (Enabled,
Interval, OverrideNodeId/NodeId, Timeout) - see
Manage capture modules. Unlike the modules
that override it, this one leaves Interval at the SDK-wide default of 1000 ms - and here it
matters more than usual: button edges and axis values are only computed and published when HEAT
Capture calls this module at its Interval cadence, not at the faster PollIntervalMs cadence.
A press and release that both happen inside one Interval window can be missed entirely, not
only delayed, because edge detection only compares the state at this call against the state at
the previous one. If a scenario needs to catch brief button taps reliably, lower Interval to
something closer to PollIntervalMs, not the other way round.