mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-03-20 15:51:07 +01:00
Fixed the SI GameCube dual stage trigger button mapping
Also moved the second touchpad button to the end of the misc buttons
This commit is contained in:
@@ -806,12 +806,14 @@ static inline void SDL_SInputStylesMapExtraction(SDL_SInputStyles_t* styles, cha
|
||||
int current_button = 0;
|
||||
int current_axis = 0;
|
||||
int misc_buttons = 0;
|
||||
int misc_button, misc_end;
|
||||
bool digital_triggers = false;
|
||||
bool dualstage_triggers = false;
|
||||
int bumpers = 0;
|
||||
bool left_stick = false;
|
||||
bool right_stick = false;
|
||||
int paddle_pairs = 0;
|
||||
char misc_label[32];
|
||||
|
||||
// Determine how many misc buttons are used
|
||||
switch (styles->misc_style) {
|
||||
@@ -834,6 +836,9 @@ static inline void SDL_SInputStylesMapExtraction(SDL_SInputStyles_t* styles, cha
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// The share button is reserved as misc1, additional buttons start at misc2
|
||||
misc_button = 2;
|
||||
misc_end = misc_button + misc_buttons;
|
||||
|
||||
// Analog joysticks (always come first in axis mapping)
|
||||
switch (styles->analog_style) {
|
||||
@@ -945,29 +950,14 @@ static inline void SDL_SInputStylesMapExtraction(SDL_SInputStyles_t* styles, cha
|
||||
SDL_ADD_BUTTON_MAPPING("righttrigger", current_button++, mapping_string_len);
|
||||
} else if (dualstage_triggers) {
|
||||
// Dual-stage trigger buttons are appended as MISC buttons
|
||||
// but only if we have the space to use them.
|
||||
if (misc_buttons <= 2) {
|
||||
switch (misc_buttons) {
|
||||
case 0:
|
||||
SDL_ADD_BUTTON_MAPPING("misc3", current_button++, mapping_string_len);
|
||||
SDL_ADD_BUTTON_MAPPING("misc4", current_button++, mapping_string_len);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
SDL_ADD_BUTTON_MAPPING("misc4", current_button++, mapping_string_len);
|
||||
SDL_ADD_BUTTON_MAPPING("misc5", current_button++, mapping_string_len);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
SDL_ADD_BUTTON_MAPPING("misc5", current_button++, mapping_string_len);
|
||||
SDL_ADD_BUTTON_MAPPING("misc6", current_button++, mapping_string_len);
|
||||
break;
|
||||
|
||||
default:
|
||||
// We do not overwrite other misc buttons if they are used.
|
||||
break;
|
||||
}
|
||||
// By convention the trigger buttons are misc3 and misc4 for GameCube style controllers
|
||||
if (misc_end < 3) {
|
||||
misc_end = 3;
|
||||
}
|
||||
SDL_snprintf(misc_label, sizeof(misc_label), "misc%d", misc_end++);
|
||||
SDL_ADD_BUTTON_MAPPING(misc_label, current_button++, mapping_string_len);
|
||||
SDL_snprintf(misc_label, sizeof(misc_label), "misc%d", misc_end++);
|
||||
SDL_ADD_BUTTON_MAPPING(misc_label, current_button++, mapping_string_len);
|
||||
}
|
||||
|
||||
// Paddle 1/2
|
||||
@@ -1016,38 +1006,18 @@ static inline void SDL_SInputStylesMapExtraction(SDL_SInputStyles_t* styles, cha
|
||||
|
||||
case SINPUT_TOUCHSTYLE_DOUBLE:
|
||||
SDL_ADD_BUTTON_MAPPING("touchpad", current_button++, mapping_string_len);
|
||||
SDL_ADD_BUTTON_MAPPING("misc2", current_button++, mapping_string_len);
|
||||
// Add the second touchpad button at the end of the misc buttons
|
||||
SDL_snprintf(misc_label, sizeof(misc_label), "misc%d", misc_end++);
|
||||
SDL_ADD_BUTTON_MAPPING(misc_label, current_button++, mapping_string_len);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (misc_buttons) {
|
||||
case 1:
|
||||
SDL_ADD_BUTTON_MAPPING("misc3", current_button++, mapping_string_len);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
SDL_ADD_BUTTON_MAPPING("misc3", current_button++, mapping_string_len);
|
||||
SDL_ADD_BUTTON_MAPPING("misc4", current_button++, mapping_string_len);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
SDL_ADD_BUTTON_MAPPING("misc3", current_button++, mapping_string_len);
|
||||
SDL_ADD_BUTTON_MAPPING("misc4", current_button++, mapping_string_len);
|
||||
SDL_ADD_BUTTON_MAPPING("misc5", current_button++, mapping_string_len);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
SDL_ADD_BUTTON_MAPPING("misc3", current_button++, mapping_string_len);
|
||||
SDL_ADD_BUTTON_MAPPING("misc4", current_button++, mapping_string_len);
|
||||
SDL_ADD_BUTTON_MAPPING("misc5", current_button++, mapping_string_len);
|
||||
SDL_ADD_BUTTON_MAPPING("misc6", current_button++, mapping_string_len);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
for (int i = 0; i < misc_buttons; ++i) {
|
||||
SDL_snprintf(misc_label, sizeof(misc_label), "misc%d", misc_button++);
|
||||
SDL_ADD_BUTTON_MAPPING(misc_label, current_button++, mapping_string_len);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user