From 12a64f8626be92a9503be12dc56c90b24727c1a8 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 9 Nov 2019 17:47:47 -0800 Subject: [PATCH] Don't emulate buttons when the controller already has them --- Limelight/Input/Controller.h | 1 + Limelight/Input/ControllerSupport.m | 25 +++++++++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Limelight/Input/Controller.h b/Limelight/Input/Controller.h index 73458e9..6934697 100644 --- a/Limelight/Input/Controller.h +++ b/Limelight/Input/Controller.h @@ -14,6 +14,7 @@ @property (nonatomic) int playerIndex; @property (nonatomic) int lastButtonFlags; @property (nonatomic) int emulatingButtonFlags; +@property (nonatomic) int supportedEmulationFlags; @property (nonatomic) unsigned char lastLeftTrigger; @property (nonatomic) unsigned char lastRightTrigger; @property (nonatomic) short lastLeftStickX; diff --git a/Limelight/Input/ControllerSupport.m b/Limelight/Input/ControllerSupport.m index a0e1ce7..0327f42 100644 --- a/Limelight/Input/ControllerSupport.m +++ b/Limelight/Input/ControllerSupport.m @@ -134,15 +134,19 @@ if (controller.lastButtonFlags & PLAY_FLAG) { // If LB and start are down, trigger select if (controller.lastButtonFlags & LB_FLAG) { - controller.lastButtonFlags |= BACK_FLAG; - controller.lastButtonFlags &= ~(pressedButtons & (PLAY_FLAG | LB_FLAG)); - controller.emulatingButtonFlags |= EMULATING_SELECT; + if (controller.supportedEmulationFlags & EMULATING_SELECT) { + controller.lastButtonFlags |= BACK_FLAG; + controller.lastButtonFlags &= ~(pressedButtons & (PLAY_FLAG | LB_FLAG)); + controller.emulatingButtonFlags |= EMULATING_SELECT; + } } // If (RB or select) and start are down, trigger special else if ((controller.lastButtonFlags & RB_FLAG) || (controller.lastButtonFlags & BACK_FLAG)) { - controller.lastButtonFlags |= SPECIAL_FLAG; - controller.lastButtonFlags &= ~(pressedButtons & (PLAY_FLAG | RB_FLAG | BACK_FLAG)); - controller.emulatingButtonFlags |= EMULATING_SPECIAL; + if (controller.supportedEmulationFlags & EMULATING_SPECIAL) { + controller.lastButtonFlags |= SPECIAL_FLAG; + controller.lastButtonFlags &= ~(pressedButtons & (PLAY_FLAG | RB_FLAG | BACK_FLAG)); + controller.emulatingButtonFlags |= EMULATING_SPECIAL; + } } } @@ -387,7 +391,16 @@ limeController.playerIndex = i; } + limeController.supportedEmulationFlags = EMULATING_SPECIAL | EMULATING_SELECT; limeController.gamepad = controller; + + if (@available(iOS 13.0, tvOS 13.0, *)) { + if (controller.extendedGamepad != nil && + controller.extendedGamepad.buttonOptions != nil) { + // Disable select button emulation since we have a physical select button + limeController.supportedEmulationFlags &= ~EMULATING_SELECT; + } + } [_controllers setObject:limeController forKey:[NSNumber numberWithInteger:controller.playerIndex]];