diff --git a/console/rarch_console_input.c b/console/rarch_console_input.c index b3ebbd19ae..792b47d314 100644 --- a/console/rarch_console_input.c +++ b/console/rarch_console_input.c @@ -49,6 +49,12 @@ char rarch_default_libretro_keybind_name_lut[RARCH_FIRST_META_KEY][32] = { "RetroPad Button R3", /* RETRO_DEVICE_ID_JOYPAD_R3 */ }; +char rarch_dpad_emulation_name_lut[KEYBIND_DEFAULT][32] = { + "None", /* DPAD_EMULATION_NONE */ + "Left Stick", /* DPAD_EMULATION_LSTICK */ + "Right Stick", /* DPAD_EMULATION_RSTICK */ +}; + extern const struct platform_bind platform_keys[]; extern const unsigned int platform_keys_size; diff --git a/console/rarch_console_input.h b/console/rarch_console_input.h index 241781b7f2..7df2adb54a 100644 --- a/console/rarch_console_input.h +++ b/console/rarch_console_input.h @@ -31,7 +31,8 @@ enum { DPAD_EMULATION_NONE = 0, DPAD_EMULATION_LSTICK, - DPAD_EMULATION_RSTICK + DPAD_EMULATION_RSTICK, + DPAD_EMULATION_LAST }; enum @@ -48,6 +49,7 @@ enum extern uint64_t rarch_default_keybind_lut[RARCH_FIRST_META_KEY]; extern char rarch_default_libretro_keybind_name_lut[RARCH_FIRST_META_KEY][32]; +extern char rarch_dpad_emulation_name_lut[KEYBIND_DEFAULT][32]; const char *rarch_input_find_platform_key_label(uint64_t joykey); diff --git a/console/rgui/rgui.c b/console/rgui/rgui.c index a204fca976..75ca3cff29 100644 --- a/console/rgui/rgui.c +++ b/console/rgui/rgui.c @@ -362,6 +362,9 @@ static void render_text(rgui_handle_t *rgui) case RGUI_SETTINGS_BIND_DEVICE: snprintf(type_str, sizeof(type_str), "%s", rgui_device_labels[g_settings.input.device[port]]); break; + case RGUI_SETTINGS_BIND_DPAD_EMULATION: + snprintf(type_str, sizeof(type_str), "%s", rarch_dpad_emulation_name_lut[g_settings.input.dpad_emulation[port]]); + break; case RGUI_SETTINGS_BIND_UP: case RGUI_SETTINGS_BIND_DOWN: case RGUI_SETTINGS_BIND_LEFT: @@ -583,6 +586,17 @@ static void rgui_settings_toggle_setting(rgui_file_type_t setting, rgui_action_t rarch_input_set_default_keybinds(port); input_gx.set_analog_dpad_mapping(g_settings.input.device[port], g_settings.input.dpad_emulation[port], port); break; + case RGUI_SETTINGS_BIND_DPAD_EMULATION: + g_settings.input.dpad_emulation[port] += DPAD_EMULATION_LAST; + if (action == RGUI_ACTION_START) + g_settings.input.dpad_emulation[port] = DPAD_EMULATION_LSTICK; + else if (action == RGUI_ACTION_LEFT) + g_settings.input.dpad_emulation[port]--; + else if (action == RGUI_ACTION_RIGHT) + g_settings.input.dpad_emulation[port]++; + g_settings.input.dpad_emulation[port] %= DPAD_EMULATION_LAST; + input_gx.set_analog_dpad_mapping(g_settings.input.device[port], g_settings.input.dpad_emulation[port], port); + break; case RGUI_SETTINGS_BIND_UP: case RGUI_SETTINGS_BIND_DOWN: case RGUI_SETTINGS_BIND_LEFT: @@ -655,6 +669,7 @@ static void rgui_settings_controller_populate_entries(rgui_handle_t *rgui) rgui_list_clear(rgui->folder_buf); RGUI_MENU_ITEM("Device", RGUI_SETTINGS_BIND_DEVICE); + RGUI_MENU_ITEM("DPad Emulation", RGUI_SETTINGS_BIND_DPAD_EMULATION); RGUI_MENU_ITEM("Up", RGUI_SETTINGS_BIND_UP); RGUI_MENU_ITEM("Down", RGUI_SETTINGS_BIND_DOWN); RGUI_MENU_ITEM("Left", RGUI_SETTINGS_BIND_LEFT); diff --git a/console/rgui/rgui.h b/console/rgui/rgui.h index 287f8beaca..ffd6d6b5f4 100644 --- a/console/rgui/rgui.h +++ b/console/rgui/rgui.h @@ -57,6 +57,7 @@ typedef enum RGUI_SETTINGS_RESTART_EMULATOR, RGUI_SETTINGS_BIND_DEVICE, + RGUI_SETTINGS_BIND_DPAD_EMULATION, RGUI_SETTINGS_BIND_UP, RGUI_SETTINGS_BIND_DOWN, RGUI_SETTINGS_BIND_LEFT,