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.

This commit is contained in:
Cameron Gutman
2016-05-22 17:11:30 -05:00
parent b17c45e9ca
commit 7b3d099449
3 changed files with 22 additions and 4 deletions

View File

@@ -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;

View File

@@ -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]) {

View File

@@ -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];