From 8adfd6e9486589dde8b7b5d7de858dfd7ad535f6 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Wed, 22 Aug 2012 14:04:33 +0200 Subject: [PATCH] (RMenu/PS3/Xbox 1) Add D-pad emulation setting --- console/rmenu/rmenu.c | 39 +++++++++++++++++++++++++++++++++++++++ console/rmenu/rmenu.h | 1 + ps3/ps3_input.c | 3 +++ 3 files changed, 43 insertions(+) diff --git a/console/rmenu/rmenu.c b/console/rmenu/rmenu.c index 1ce4aae83e..867e450b89 100644 --- a/console/rmenu/rmenu.c +++ b/console/rmenu/rmenu.c @@ -413,6 +413,11 @@ static void populate_setting_item(unsigned i, item *current_item) snprintf(current_item->comment, sizeof(current_item->comment), "Controller %d is currently selected.", currently_selected_controller_menu+1); snprintf(current_item->setting_text, sizeof(current_item->setting_text), "%d", currently_selected_controller_menu+1); break; + case SETTING_DPAD_EMULATION: + snprintf(current_item->text, sizeof(current_item->text), "D-Pad Emulation"); + snprintf(current_item->comment, sizeof(current_item->comment), "[%s] from Controller %d is mapped to D-pad.", rarch_dpad_emulation_name_lut[g_settings.input.dpad_emulation[currently_selected_controller_menu]], currently_selected_controller_menu+1); + snprintf(current_item->setting_text, sizeof(current_item->setting_text), "%s", rarch_dpad_emulation_name_lut[g_settings.input.dpad_emulation[currently_selected_controller_menu]]); + break; case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_B: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_Y: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_SELECT: @@ -1427,6 +1432,40 @@ static void set_setting_action(menu *current_menu, unsigned switchvalue, uint64_ if(input & (1 << RMENU_DEVICE_NAV_START)) currently_selected_controller_menu = 0; break; + case SETTING_DPAD_EMULATION: + if(input & (1 << RMENU_DEVICE_NAV_LEFT)) + { + switch(g_settings.input.dpad_emulation[currently_selected_controller_menu]) + { + case DPAD_EMULATION_NONE: + break; + case DPAD_EMULATION_LSTICK: + input_ptr.set_analog_dpad_mapping(0, DPAD_EMULATION_NONE, currently_selected_controller_menu); + break; + case DPAD_EMULATION_RSTICK: + input_ptr.set_analog_dpad_mapping(0, DPAD_EMULATION_LSTICK, currently_selected_controller_menu); + break; + } + } + + if((input & (1 << RMENU_DEVICE_NAV_RIGHT)) || (input & (1 << RMENU_DEVICE_NAV_B))) + { + switch(g_settings.input.dpad_emulation[currently_selected_controller_menu]) + { + case DPAD_EMULATION_NONE: + input_ptr.set_analog_dpad_mapping(0, DPAD_EMULATION_LSTICK, currently_selected_controller_menu); + break; + case DPAD_EMULATION_LSTICK: + input_ptr.set_analog_dpad_mapping(0, DPAD_EMULATION_RSTICK, currently_selected_controller_menu); + break; + case DPAD_EMULATION_RSTICK: + break; + } + } + + if(input & (1 << RMENU_DEVICE_NAV_START)) + input_ptr.set_analog_dpad_mapping(0, DPAD_EMULATION_LSTICK, currently_selected_controller_menu); + break; case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_UP: set_keybind_digital(RETRO_DEVICE_ID_JOYPAD_UP, input); break; diff --git a/console/rmenu/rmenu.h b/console/rmenu/rmenu.h index 8f3e975b7d..f3844cb48d 100644 --- a/console/rmenu/rmenu.h +++ b/console/rmenu/rmenu.h @@ -175,6 +175,7 @@ enum SETTING_PATH_DEFAULT_ALL, SETTING_CONTROLS_SCHEME, SETTING_CONTROLS_NUMBER, + SETTING_DPAD_EMULATION, SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_B, SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_Y, SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_SELECT, diff --git a/ps3/ps3_input.c b/ps3/ps3_input.c index a2b0a1159c..767b9d1b03 100644 --- a/ps3/ps3_input.c +++ b/ps3/ps3_input.c @@ -403,18 +403,21 @@ static void ps3_input_set_analog_dpad_mapping(unsigned device, unsigned map_dpad switch(map_dpad_enum) { case DPAD_EMULATION_NONE: + g_settings.input.dpad_emulation[controller_id] = DPAD_EMULATION_NONE; g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[PS3_DEVICE_ID_JOYPAD_UP].joykey; g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[PS3_DEVICE_ID_JOYPAD_DOWN].joykey; g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[PS3_DEVICE_ID_JOYPAD_LEFT].joykey; g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[PS3_DEVICE_ID_JOYPAD_RIGHT].joykey; break; case DPAD_EMULATION_LSTICK: + g_settings.input.dpad_emulation[controller_id] = DPAD_EMULATION_LSTICK; g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[PS3_DEVICE_ID_LSTICK_UP_DPAD].joykey; g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[PS3_DEVICE_ID_LSTICK_DOWN_DPAD].joykey; g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[PS3_DEVICE_ID_LSTICK_LEFT_DPAD].joykey; g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[PS3_DEVICE_ID_LSTICK_RIGHT_DPAD].joykey; break; case DPAD_EMULATION_RSTICK: + g_settings.input.dpad_emulation[controller_id] = DPAD_EMULATION_RSTICK; g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[PS3_DEVICE_ID_RSTICK_UP_DPAD].joykey; g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[PS3_DEVICE_ID_RSTICK_DOWN_DPAD].joykey; g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[PS3_DEVICE_ID_RSTICK_LEFT_DPAD].joykey;