From 3e1423ff46cef028395e9265d88c2ebb0cfd837f Mon Sep 17 00:00:00 2001 From: True Zhuanjia Date: Tue, 14 Apr 2026 10:45:50 +0800 Subject: [PATCH] multi gamepad input fixes --- VoidLink/Input/ControllerSupport.m | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/VoidLink/Input/ControllerSupport.m b/VoidLink/Input/ControllerSupport.m index 7b7246ee..9416a660 100644 --- a/VoidLink/Input/ControllerSupport.m +++ b/VoidLink/Input/ControllerSupport.m @@ -631,7 +631,7 @@ static const double MOUSE_SPEED_DIVISOR = 1.25; //NSLog(@"gamepadMask: %@", [self binaryRepresentationOfInteger:buttonFlags]); // we got the pressed OSC buttons here. - // Player 1 is always present for OSC + // Player 0 is always present for OSC LiSendMultiControllerEvent(_multiController ? controller.playerIndex : 0, [self getActiveGamepadMask], buttonFlags, leftTrigger, rightTrigger, leftStickX, leftStickY, rightStickX, rightStickY); @@ -1149,7 +1149,7 @@ double rc_expo(double x, double expo) { for(NSNumber* buttonFlagId in buttonDict){ GCControllerButtonInput * button = (GCControllerButtonInput *)buttonDict[buttonFlagId]; - if(self->_mapControllerToMouse){ + if(self->_mapControllerToMouse && voidController.playerIndex==0){ if(button.pressed){ if(buttonFlagId.intValue == self->_controllerMouseSwitch){ self->_mouseSwitchButtonPressed = true; @@ -1577,9 +1577,17 @@ double rc_expo(double x, double expo) { } } - // If this is player 0, it shares state with the OSC - voidController.mergedWithController = _oscController; - _oscController.mergedWithController = voidController; + // Only player 0 shares state with the OSC. + if (voidController.playerIndex == 0) { + voidController.mergedWithController = _oscController; + _oscController.mergedWithController = voidController; + } + else { + voidController.mergedWithController = nil; + if (_oscController.mergedWithController == voidController) { + _oscController.mergedWithController = nil; + } + } if (@available(iOS 13.0, tvOS 13.0, *)) { if (controller.extendedGamepad != nil &&