Fallback to phone haptics engine if controller doesn't support it
This commit is contained in:
@@ -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];
|
||||
|
||||
Reference in New Issue
Block a user