Issue #25: composite Turn channel -- twin-stick gamepad turning

Gamepad players expect stick X = turn; the pod-faithful default maps it
to torso twist, and the pedal pair couldn't take a single signed axis.
New bindings channel "Turn": a signed composite that decomposes into
the pedal pair at the RIO publish (+ = right pedal, - = left), ADDING
to direct pedal bindings so mixed rigs compose, clamped 0..1 per pedal.
The default bindings.txt stays pod-faithful and documents the
twin-stick alternative inline:

    padaxis LX axis Turn
    padaxis RX axis JoystickX

Also covers the HOTAS ask (any signed axis can now drive turning).
Verified: regenerated defaults carry the doc lines; a twin-stick-edited
bindings.txt parses and boots clean.  Awaiting live pad verification.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-23 00:55:45 -05:00
co-authored by Claude Opus 4.8
parent 4e0fcbf328
commit 76eaddc4a8
3 changed files with 22 additions and 1 deletions
+10
View File
@@ -740,6 +740,16 @@ void
channelValue[PadBindingProfile::ChannelJoystickY]);
LeftPedal = (Scalar)channelValue[PadBindingProfile::ChannelLeftPedal];
RightPedal = (Scalar)channelValue[PadBindingProfile::ChannelRightPedal];
// issue #25: the composite Turn channel decomposes into the pedal pair
// (signed: + = right, - = left); it ADDS to any direct pedal bindings so
// mixed rigs (stick turn + trigger pedals) compose.
{
float turn = channelValue[PadBindingProfile::ChannelTurn];
if (turn > 0.0f) RightPedal += (Scalar)turn;
else if (turn < 0.0f) LeftPedal += (Scalar)(-turn);
if (LeftPedal > 1.0f) LeftPedal = 1.0f;
if (RightPedal > 1.0f) RightPedal = 1.0f;
}
//
// The analog heartbeat: tells the manager to run the five-scalar