(PS3) Made keybind changing code portable

This commit is contained in:
Twinaphex 2012-04-13 04:31:18 +02:00
parent 77bab1ad2d
commit 331d596940
4 changed files with 64 additions and 63 deletions

View File

@ -508,6 +508,38 @@ const char *ssnes_input_find_platform_key_label(uint64_t joykey)
return "Unknown"; return "Unknown";
} }
void ssnes_input_set_keybind(unsigned player, unsigned keybind_action, uint64_t default_retro_joypad_id)
{
uint64_t new_key;
switch(keybind_action)
{
case KEYBIND_DECREMENT:
new_key = ssnes_input_find_previous_platform_key(g_settings.input.binds[player][default_retro_joypad_id].joykey);
g_settings.input.binds[player][default_retro_joypad_id].joykey = new_key;
break;
case KEYBIND_INCREMENT:
new_key = ssnes_input_find_next_platform_key(g_settings.input.binds[player][default_retro_joypad_id].joykey);
g_settings.input.binds[player][default_retro_joypad_id].joykey = new_key;
break;
case KEYBIND_DEFAULT:
g_settings.input.binds[player][default_retro_joypad_id].id = default_retro_joypad_id;
g_settings.input.binds[player][default_retro_joypad_id].joykey = ssnes_default_keybind_lut[default_retro_joypad_id];
break;
case KEYBIND_NOACTION:
break;
}
}
void ssnes_input_set_default_keybinds(unsigned player)
{
for(unsigned i = 0; i < SSNES_FIRST_META_KEY; i++)
{
g_settings.input.binds[player][i].id = i;
g_settings.input.binds[player][i].joykey = ssnes_default_keybind_lut[i];
}
}
void ssnes_input_set_default_keybind_names_for_emulator(void) void ssnes_input_set_default_keybind_names_for_emulator(void)
{ {
struct retro_system_info info; struct retro_system_info info;

View File

@ -79,4 +79,6 @@ uint64_t ssnes_input_find_next_platform_key(uint64_t joykey);
// will need different keybind names for buttons, etc.) // will need different keybind names for buttons, etc.)
void ssnes_input_set_default_keybind_names_for_emulator(void); void ssnes_input_set_default_keybind_names_for_emulator(void);
void ssnes_input_set_keybind(unsigned player, unsigned keybind_action, uint64_t default_retro_joypad_id);
#endif #endif

View File

@ -19,6 +19,14 @@
#include "../driver.h" #include "../driver.h"
enum keybind_set_id
{
KEYBIND_NOACTION,
KEYBIND_DECREMENT,
KEYBIND_INCREMENT,
KEYBIND_DEFAULT
};
#if defined(__CELLOS_LV2__) #if defined(__CELLOS_LV2__)
#include "../ps3/ps3_input.h" #include "../ps3/ps3_input.h"
enum ps3_device_id enum ps3_device_id

View File

@ -1063,30 +1063,23 @@ static void select_directory(uint32_t menu_id)
old_state = state; old_state = state;
} }
static void set_keybind_digital(uint64_t state, uint64_t system_joypad_id, uint64_t default_snes_joypad_id) static void set_keybind_digital(uint64_t state, uint64_t default_retro_joypad_id)
{ {
uint64_t new_key; unsigned keybind_action = KEYBIND_NOACTION;
if(CTRL_LEFT(state) | CTRL_LSTICK_LEFT(state)) if(CTRL_LEFT(state) | CTRL_LSTICK_LEFT(state))
{ keybind_action = KEYBIND_DECREMENT;
new_key = ssnes_input_find_previous_platform_key(g_settings.input.binds[currently_selected_controller_menu][default_snes_joypad_id].joykey);
g_settings.input.binds[currently_selected_controller_menu][default_snes_joypad_id].joykey = new_key;
set_delay = DELAY_MEDIUM;
}
if(CTRL_RIGHT(state) || CTRL_LSTICK_RIGHT(state) || CTRL_CROSS(state)) if(CTRL_RIGHT(state) || CTRL_LSTICK_RIGHT(state) || CTRL_CROSS(state))
{ keybind_action = KEYBIND_INCREMENT;
new_key = ssnes_input_find_next_platform_key(g_settings.input.binds[currently_selected_controller_menu][default_snes_joypad_id].joykey);
g_settings.input.binds[currently_selected_controller_menu][default_snes_joypad_id].joykey = new_key;
set_delay = DELAY_MEDIUM;
}
if(CTRL_START(state)) if(CTRL_START(state))
{ keybind_action = KEYBIND_DEFAULT;
g_settings.input.binds[currently_selected_controller_menu][default_snes_joypad_id].id = default_snes_joypad_id;
g_settings.input.binds[currently_selected_controller_menu][default_snes_joypad_id].joykey = ssnes_default_keybind_lut[default_snes_joypad_id]; ssnes_input_set_keybind(currently_selected_controller_menu, keybind_action, default_retro_joypad_id);
if(keybind_action != KEYBIND_NOACTION)
set_delay = DELAY_MEDIUM; set_delay = DELAY_MEDIUM;
}
} }
static void ssnes_filename_input_and_save (unsigned filename_type) static void ssnes_filename_input_and_save (unsigned filename_type)
@ -1750,40 +1743,40 @@ static void producesettingentry(menu * menu_obj, uint64_t switchvalue)
currently_selected_controller_menu = 0; currently_selected_controller_menu = 0;
break; break;
case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_UP: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_UP:
set_keybind_digital(state, PS3_DEVICE_ID_JOYPAD_UP, RETRO_DEVICE_ID_JOYPAD_UP); set_keybind_digital(state, RETRO_DEVICE_ID_JOYPAD_UP);
break; break;
case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_DOWN: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_DOWN:
set_keybind_digital(state, PS3_DEVICE_ID_JOYPAD_DOWN, RETRO_DEVICE_ID_JOYPAD_DOWN); set_keybind_digital(state, RETRO_DEVICE_ID_JOYPAD_DOWN);
break; break;
case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_LEFT: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_LEFT:
set_keybind_digital(state, PS3_DEVICE_ID_JOYPAD_LEFT, RETRO_DEVICE_ID_JOYPAD_LEFT); set_keybind_digital(state, RETRO_DEVICE_ID_JOYPAD_LEFT);
break; break;
case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_RIGHT: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_RIGHT:
set_keybind_digital(state, PS3_DEVICE_ID_JOYPAD_RIGHT, RETRO_DEVICE_ID_JOYPAD_RIGHT); set_keybind_digital(state, RETRO_DEVICE_ID_JOYPAD_RIGHT);
break; break;
case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_A: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_A:
set_keybind_digital(state, PS3_DEVICE_ID_JOYPAD_CIRCLE, RETRO_DEVICE_ID_JOYPAD_A); set_keybind_digital(state, RETRO_DEVICE_ID_JOYPAD_A);
break; break;
case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_B: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_B:
set_keybind_digital(state, PS3_DEVICE_ID_JOYPAD_CROSS, RETRO_DEVICE_ID_JOYPAD_B); set_keybind_digital(state, RETRO_DEVICE_ID_JOYPAD_B);
break; break;
case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_X: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_X:
set_keybind_digital(state, PS3_DEVICE_ID_JOYPAD_TRIANGLE, RETRO_DEVICE_ID_JOYPAD_X); set_keybind_digital(state, RETRO_DEVICE_ID_JOYPAD_X);
break; break;
case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_Y: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_Y:
set_keybind_digital(state, PS3_DEVICE_ID_JOYPAD_SQUARE, RETRO_DEVICE_ID_JOYPAD_Y); set_keybind_digital(state, RETRO_DEVICE_ID_JOYPAD_Y);
break; break;
case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_SELECT: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_SELECT:
set_keybind_digital(state, PS3_DEVICE_ID_JOYPAD_SELECT, RETRO_DEVICE_ID_JOYPAD_SELECT); set_keybind_digital(state, RETRO_DEVICE_ID_JOYPAD_SELECT);
break; break;
case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_START: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_START:
set_keybind_digital(state, PS3_DEVICE_ID_JOYPAD_START, RETRO_DEVICE_ID_JOYPAD_START); set_keybind_digital(state, RETRO_DEVICE_ID_JOYPAD_START);
break; break;
case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_L: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_L:
set_keybind_digital(state, PS3_DEVICE_ID_JOYPAD_L1, RETRO_DEVICE_ID_JOYPAD_L); set_keybind_digital(state, RETRO_DEVICE_ID_JOYPAD_L);
break; break;
case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_R: case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_R:
set_keybind_digital(state, PS3_DEVICE_ID_JOYPAD_R1, RETRO_DEVICE_ID_JOYPAD_R); set_keybind_digital(state, RETRO_DEVICE_ID_JOYPAD_R);
break; break;
case SETTING_CONTROLS_SAVE_CUSTOM_CONTROLS: case SETTING_CONTROLS_SAVE_CUSTOM_CONTROLS:
if(CTRL_LEFT(state) || CTRL_LSTICK_LEFT(state) || CTRL_RIGHT(state) || CTRL_LSTICK_RIGHT(state) || CTRL_CROSS(state) || CTRL_START(state)) if(CTRL_LEFT(state) || CTRL_LSTICK_LEFT(state) || CTRL_RIGHT(state) || CTRL_LSTICK_RIGHT(state) || CTRL_CROSS(state) || CTRL_START(state))
@ -1794,41 +1787,7 @@ static void producesettingentry(menu * menu_obj, uint64_t switchvalue)
case SETTING_CONTROLS_DEFAULT_ALL: case SETTING_CONTROLS_DEFAULT_ALL:
if(CTRL_LEFT(state) || CTRL_LSTICK_LEFT(state) || CTRL_RIGHT(state) || CTRL_LSTICK_RIGHT(state) || CTRL_CROSS(state) || CTRL_START(state)) if(CTRL_LEFT(state) || CTRL_LSTICK_LEFT(state) || CTRL_RIGHT(state) || CTRL_LSTICK_RIGHT(state) || CTRL_CROSS(state) || CTRL_START(state))
{ {
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_UP].id = RETRO_DEVICE_ID_JOYPAD_UP; ssnes_input_set_default_keybinds(currently_selected_controller_menu);
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_UP].joykey = ssnes_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_UP];
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_DOWN].id = RETRO_DEVICE_ID_JOYPAD_DOWN;
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = ssnes_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_DOWN];
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_LEFT].id = RETRO_DEVICE_ID_JOYPAD_LEFT;
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = ssnes_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_LEFT];
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_RIGHT].id = RETRO_DEVICE_ID_JOYPAD_RIGHT;
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = ssnes_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_RIGHT];
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_A].id = RETRO_DEVICE_ID_JOYPAD_A;
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_A].joykey = ssnes_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_A];
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_B].id = RETRO_DEVICE_ID_JOYPAD_B;
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_B].joykey = ssnes_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_B];
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_X].id = RETRO_DEVICE_ID_JOYPAD_X;
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_X].joykey = ssnes_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_X];
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_Y].id = RETRO_DEVICE_ID_JOYPAD_Y;
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_Y].joykey = ssnes_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_Y];
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_L].id = RETRO_DEVICE_ID_JOYPAD_L;
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_L].joykey = ssnes_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L];
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_R].id = RETRO_DEVICE_ID_JOYPAD_R;
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_R].joykey = ssnes_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R];
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_START].id = RETRO_DEVICE_ID_JOYPAD_START;
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_START].joykey = ssnes_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_START];
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_SELECT].id = RETRO_DEVICE_ID_JOYPAD_SELECT;
g_settings.input.binds[currently_selected_controller_menu][RETRO_DEVICE_ID_JOYPAD_SELECT].joykey = ssnes_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_SELECT];
menu_reinit_settings(); menu_reinit_settings();
} }
break; break;