Fallback to phone haptics engine if controller doesn't support it

This commit is contained in:
Rex Xiong
2025-09-27 13:13:26 -07:00
parent 7dce11b4c4
commit eeff9b74da
+19 -5
View File
@@ -84,18 +84,32 @@
}
-(id) initWithGamepad:(GCController*)gamepad locality:(GCHapticsLocality)locality API_AVAILABLE(ios(14.0), tvos(14.0)) {
bool needFallBackToPhoneHaptics = false;
if (gamepad.haptics == nil) {
Log(LOG_W, @"Controller %d does not support haptics", gamepad.playerIndex);
return nil;
needFallBackToPhoneHaptics = true;
}
else if (![[gamepad.haptics supportedLocalities] containsObject:locality]) {
Log(LOG_W, @"Controller %d does not support haptic locality: %@", gamepad.playerIndex, locality);
needFallBackToPhoneHaptics = true;
}
if (![[gamepad.haptics supportedLocalities] containsObject:locality]) {
Log(LOG_W, @"Controller %d does not support haptic locality: %@", gamepad.playerIndex, locality);
return nil;
if (needFallBackToPhoneHaptics) {
if (@available(iOS 13.0, *)) {
Log(LOG_W, @"Controller %d falls back to use iPhone Haptics for locality: %@", gamepad.playerIndex, locality);
NSError *error = nil;
_hapticEngine = [[CHHapticEngine alloc] initAndReturnError:&error];
}
else {
return nil;
}
}
else {
_hapticEngine = [gamepad.haptics createEngineWithLocality:locality];
}
_playerIndex = gamepad.playerIndex;
_hapticEngine = [gamepad.haptics createEngineWithLocality:locality];
NSError* error;
[_hapticEngine startAndReturnError:&error];