From 7b3d09944960b279e18b8395201d4e975f98a598 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 22 May 2016 17:11:30 -0500 Subject: [PATCH] Use the same Controller object for player 0 and the on-screen controls so tapping on-screen buttons doesn't reset all physical controller input to 0. Fixes pressing L3 to run in some games. --- Limelight/Input/ControllerSupport.h | 1 + Limelight/Input/ControllerSupport.m | 22 ++++++++++++++++++++-- Limelight/Input/OnScreenControls.m | 3 +-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/Limelight/Input/ControllerSupport.h b/Limelight/Input/ControllerSupport.h index 1e94106..d6432f8 100644 --- a/Limelight/Input/ControllerSupport.h +++ b/Limelight/Input/ControllerSupport.h @@ -32,6 +32,7 @@ -(void) clearButtonFlag:(Controller*)controller flags:(int)flags; -(void) updateFinished:(Controller*)controller; +-(Controller*) getOscController; @property (nonatomic, strong) id connectObserver; @property (nonatomic, strong) id disconnectObserver; diff --git a/Limelight/Input/ControllerSupport.m b/Limelight/Input/ControllerSupport.m index 7571052..14960e4 100644 --- a/Limelight/Input/ControllerSupport.m +++ b/Limelight/Input/ControllerSupport.m @@ -22,6 +22,10 @@ OnScreenControls *_osc; + // This controller object is shared between on-screen controls + // and player 0 + Controller *_player0osc; + char _controllerNumbers; #define EMULATING_SELECT 0x1 @@ -275,9 +279,17 @@ for (int i = 0; i < 4; i++) { if (!(_controllerNumbers & (1 << i))) { _controllerNumbers |= (1 << i); - Controller* limeController = [[Controller alloc] init]; controller.playerIndex = i; - limeController.playerIndex = i; + + Controller* limeController; + if (i == 0) { + // Player 0 shares a controller object with the on-screen controls + limeController = _player0osc; + } else { + limeController = [[Controller alloc] init]; + limeController.playerIndex = i; + } + [_controllers setObject:limeController forKey:[NSNumber numberWithInteger:controller.playerIndex]]; Log(LOG_I, @"Assigning controller index: %d", i); @@ -286,6 +298,10 @@ } } +-(Controller*) getOscController { + return _player0osc; +} + -(id) init { self = [super init]; @@ -293,6 +309,8 @@ _controllerStreamLock = [[NSLock alloc] init]; _controllers = [[NSMutableDictionary alloc] init]; _controllerNumbers = 0; + _player0osc = [[Controller alloc] init]; + _player0osc.playerIndex = 0; Log(LOG_I, @"Number of controllers connected: %ld", (long)[[GCController controllers] count]); for (GCController* controller in [GCController controllers]) { diff --git a/Limelight/Input/OnScreenControls.m b/Limelight/Input/OnScreenControls.m index 73e44dc..c02729f 100644 --- a/Limelight/Input/OnScreenControls.m +++ b/Limelight/Input/OnScreenControls.m @@ -119,8 +119,7 @@ static float L3_Y; self = [self init]; _view = view; _controllerSupport = controllerSupport; - _controller = [[Controller alloc] init]; - _controller.playerIndex = 0; + _controller = [controllerSupport getOscController]; _edgeDelegate = swipeDelegate; _deadTouches = [[NSMutableArray alloc] init];