From 690a263648238f8b4ec4d277329f792c671c0edb Mon Sep 17 00:00:00 2001 From: Lior Halphon Date: Thu, 29 Jul 2021 22:43:55 +0300 Subject: [PATCH] Major improvements to JoyKit, fixing Xbox and 8BitDo controllers as well as analog mappings in PS controllers in some situations --- Cocoa/GBPreferencesWindow.m | 24 ++++-------- Cocoa/Preferences.xib | 4 +- JoyKit/ControllerConfiguration.inc | 8 ++-- JoyKit/JOYAxis.h | 7 ++++ JoyKit/JOYAxis.m | 45 +++++++++++++++++++++-- JoyKit/JOYButton.h | 10 +++++ JoyKit/JOYButton.m | 8 +++- JoyKit/JOYController.h | 1 - JoyKit/JOYController.m | 59 +++++++++++++++++------------- JoyKit/JOYEmulatedButton.m | 3 +- JoyKit/JOYHat.m | 2 + 11 files changed, 118 insertions(+), 53 deletions(-) diff --git a/Cocoa/GBPreferencesWindow.m b/Cocoa/GBPreferencesWindow.m index 22c60e8..47302dd 100644 --- a/Cocoa/GBPreferencesWindow.m +++ b/Cocoa/GBPreferencesWindow.m @@ -491,16 +491,12 @@ [GBUnderclock] = JOYButtonUsageR1, }; - // Todo: JoyKit might need an API to match an axis to a button if (joystick_configuration_state == GBUnderclock) { + mapping[@"AnalogUnderclock"] = nil; + double max = 0; for (JOYAxis *axis in controller.axes) { - if (axis.value > 0.5 || - (axis.usage == JOYAxisUsageL1 && button.usage == JOYButtonUsageL1) || - (axis.usage == JOYAxisUsageL2 && button.usage == JOYButtonUsageL2) || - (axis.usage == JOYAxisUsageL3 && button.usage == JOYButtonUsageL3) || - (axis.usage == JOYAxisUsageR1 && button.usage == JOYButtonUsageR1) || - (axis.usage == JOYAxisUsageR2 && button.usage == JOYButtonUsageR2) || - (axis.usage == JOYAxisUsageR3 && button.usage == JOYButtonUsageR3)) { + if ((axis.value > 0.5 || (axis.equivalentButtonUsage == button.usage)) && axis.value >= max) { + max = axis.value; mapping[@"AnalogUnderclock"] = @(axis.uniqueID); break; } @@ -508,16 +504,12 @@ } if (joystick_configuration_state == GBTurbo) { + mapping[@"AnalogTurbo"] = nil; + double max = 0; for (JOYAxis *axis in controller.axes) { - if (axis.value > 0.5 || - (axis.usage == JOYAxisUsageL1 && button.usage == JOYButtonUsageL1) || - (axis.usage == JOYAxisUsageL2 && button.usage == JOYButtonUsageL2) || - (axis.usage == JOYAxisUsageL3 && button.usage == JOYButtonUsageL3) || - (axis.usage == JOYAxisUsageR1 && button.usage == JOYButtonUsageR1) || - (axis.usage == JOYAxisUsageR2 && button.usage == JOYButtonUsageR2) || - (axis.usage == JOYAxisUsageR3 && button.usage == JOYButtonUsageR3)) { + if ((axis.value > 0.5 || (axis.equivalentButtonUsage == button.usage)) && axis.value >= max) { + max = axis.value; mapping[@"AnalogTurbo"] = @(axis.uniqueID); - break; } } } diff --git a/Cocoa/Preferences.xib b/Cocoa/Preferences.xib index b6da6ba..24e5de2 100644 --- a/Cocoa/Preferences.xib +++ b/Cocoa/Preferences.xib @@ -736,9 +736,9 @@