Ignore unsupported gamepads

This commit is contained in:
Cameron Gutman
2018-05-28 15:11:23 -07:00
parent 4bafefbe16
commit 391872ddb8
+42 -7
View File
@@ -344,11 +344,30 @@
} }
#endif #endif
+(bool) isSupportedGamepad:(GCController*) controller {
return controller.extendedGamepad != nil || controller.gamepad != nil;
}
+(int) getGamepadCount {
int count = 0;
for (GCController* controller in [GCController controllers]) {
if ([ControllerSupport isSupportedGamepad:controller]) {
count++;
}
}
return count;
}
+(int) getConnectedGamepadMask { +(int) getConnectedGamepadMask {
int mask = 0; int mask = 0;
for (int i = 0; i < [[GCController controllers] count]; i++) { int i = 0;
mask |= 1 << i; for (GCController* controller in [GCController controllers]) {
if ([ControllerSupport isSupportedGamepad:controller]) {
mask |= 1 << i++;
}
} }
#if TARGET_OS_IPHONE #if TARGET_OS_IPHONE
@@ -384,17 +403,25 @@
Gamepad_detectDevices(); Gamepad_detectDevices();
#endif #endif
Log(LOG_I, @"Number of controllers connected: %ld", (long)[[GCController controllers] count]); Log(LOG_I, @"Number of supported controllers connected: %d", [ControllerSupport getGamepadCount]);
for (GCController* controller in [GCController controllers]) { for (GCController* controller in [GCController controllers]) {
[self assignController:controller]; if ([ControllerSupport isSupportedGamepad:controller]) {
[self registerControllerCallbacks:controller]; [self assignController:controller];
[self updateAutoOnScreenControlMode]; [self registerControllerCallbacks:controller];
[self updateAutoOnScreenControlMode];
}
} }
self.connectObserver = [[NSNotificationCenter defaultCenter] addObserverForName:GCControllerDidConnectNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { self.connectObserver = [[NSNotificationCenter defaultCenter] addObserverForName:GCControllerDidConnectNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
Log(LOG_I, @"Controller connected!"); Log(LOG_I, @"Controller connected!");
GCController* controller = note.object; GCController* controller = note.object;
if (![ControllerSupport isSupportedGamepad:controller]) {
// Ignore micro gamepads and motion controllers
return;
}
[self assignController:controller]; [self assignController:controller];
// Register callbacks on the new controller // Register callbacks on the new controller
@@ -407,6 +434,12 @@
Log(LOG_I, @"Controller disconnected!"); Log(LOG_I, @"Controller disconnected!");
GCController* controller = note.object; GCController* controller = note.object;
if (![ControllerSupport isSupportedGamepad:controller]) {
// Ignore micro gamepads and motion controllers
return;
}
[self unregisterControllerCallbacks:controller]; [self unregisterControllerCallbacks:controller];
self->_controllerNumbers &= ~(1 << controller.playerIndex); self->_controllerNumbers &= ~(1 << controller.playerIndex);
Log(LOG_I, @"Unassigning controller index: %ld", (long)controller.playerIndex); Log(LOG_I, @"Unassigning controller index: %ld", (long)controller.playerIndex);
@@ -428,7 +461,9 @@
[_controllers removeAllObjects]; [_controllers removeAllObjects];
_controllerNumbers = 0; _controllerNumbers = 0;
for (GCController* controller in [GCController controllers]) { for (GCController* controller in [GCController controllers]) {
[self unregisterControllerCallbacks:controller]; if ([ControllerSupport isSupportedGamepad:controller]) {
[self unregisterControllerCallbacks:controller];
}
} }
} }