mirror of
https://github.com/libretro/RetroArch
synced 2025-04-03 10:21:31 +00:00
remap-redux part2: start adding analog remapping
This commit is contained in:
parent
06860bf704
commit
f662d9f65f
@ -53,64 +53,70 @@ bool input_remapping_load_file(void *data, const char *path)
|
|||||||
|
|
||||||
for (i = 0; i < MAX_USERS; i++)
|
for (i = 0; i < MAX_USERS; i++)
|
||||||
{
|
{
|
||||||
char s1[64], s2[64];
|
char s1[64], s2[64], s3[64];
|
||||||
|
char btn_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
|
||||||
char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
|
char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
|
||||||
char keymapper_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
|
char stk_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
|
||||||
char key_strings[RARCH_FIRST_CUSTOM_BIND + 4][128] =
|
|
||||||
{ "b", "y", "select", "start",
|
char key_strings[RARCH_FIRST_CUSTOM_BIND + 8][128] = {
|
||||||
|
"b", "y", "select", "start",
|
||||||
"up", "down", "left", "right",
|
"up", "down", "left", "right",
|
||||||
"a", "x", "l", "r", "l2", "r2",
|
"a", "x", "l", "r", "l2", "r2",
|
||||||
"l3", "r3", "l_x", "l_y", "r_x", "r_y" };
|
"l3", "r3", "l_x+", "l_x-", "l_y+", "l_y-", "r_x+", "r_x-", "r_y+", "r_y-" };
|
||||||
|
|
||||||
old_analog_dpad_mode[i] = settings->uints.input_analog_dpad_mode[i];
|
old_analog_dpad_mode[i] = settings->uints.input_analog_dpad_mode[i];
|
||||||
old_libretro_device[i] = settings->uints.input_libretro_device[i];
|
old_libretro_device[i] = settings->uints.input_libretro_device[i];
|
||||||
|
|
||||||
s1[0] = '\0';
|
s1[0] = '\0';
|
||||||
s2[0] = '\0';
|
s2[0] = '\0';
|
||||||
|
s3[0] = '\0';
|
||||||
|
|
||||||
snprintf(s1, sizeof(s1), "input_player%u_btn", i + 1);
|
snprintf(s1, sizeof(s1), "input_player%u_btn", i + 1);
|
||||||
snprintf(s2, sizeof(s2), "input_player%u_key", i + 1);
|
snprintf(s2, sizeof(s2), "input_player%u_key", i + 1);
|
||||||
|
snprintf(s3, sizeof(s3), "input_player%u_stk", i + 1);
|
||||||
|
|
||||||
for (j = 0; j < RARCH_FIRST_CUSTOM_BIND + 4; j++)
|
for (j = 0; j < RARCH_FIRST_CUSTOM_BIND; j++)
|
||||||
{
|
{
|
||||||
int btn_remap = -1;
|
int btn_remap = -1;
|
||||||
|
|
||||||
fill_pathname_join_delim(key_ident[j], s1,
|
fill_pathname_join_delim(btn_ident[j], s1,
|
||||||
key_strings[j], '_', sizeof(key_ident[j]));
|
key_strings[j], '_', sizeof(btn_ident[j]));
|
||||||
fill_pathname_join_delim(keymapper_ident[j], s2,
|
fill_pathname_join_delim(key_ident[j], s2,
|
||||||
key_strings[j], '_', sizeof(key_ident[j]));
|
key_strings[j], '_', sizeof(btn_ident[j]));
|
||||||
|
|
||||||
if (config_get_int(conf, key_ident[j], &btn_remap)
|
if (config_get_int(conf, btn_ident[j], &btn_remap)
|
||||||
&& (btn_remap < RARCH_FIRST_CUSTOM_BIND && btn_remap != -1))
|
&& (btn_remap < RARCH_FIRST_CUSTOM_BIND && btn_remap != -1))
|
||||||
settings->uints.input_remap_ids[i][j] = btn_remap;
|
settings->uints.input_remap_ids[i][j] = btn_remap;
|
||||||
else if (config_get_int(conf, key_ident[j], &btn_remap)
|
else if (config_get_int(conf, btn_ident[j], &btn_remap)
|
||||||
&& (btn_remap == -1))
|
&& (btn_remap == -1))
|
||||||
settings->uints.input_remap_ids[i][j] = RARCH_UNMAPPED;
|
settings->uints.input_remap_ids[i][j] = RARCH_UNMAPPED;
|
||||||
|
|
||||||
int key_remap = -1;
|
int key_remap = -1;
|
||||||
|
|
||||||
if (config_get_int(conf, keymapper_ident[j], &key_remap))
|
if (config_get_int(conf, key_ident[j], &key_remap))
|
||||||
settings->uints.input_keymapper_ids[i][j] = key_remap;
|
settings->uints.input_keymapper_ids[i][j] = key_remap;
|
||||||
else
|
else
|
||||||
settings->uints.input_keymapper_ids[i][j] = RETROK_UNKNOWN;
|
settings->uints.input_keymapper_ids[i][j] = RETROK_UNKNOWN;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (j = 0; j < 4; j++)
|
for (j = RARCH_FIRST_CUSTOM_BIND; j < RARCH_FIRST_CUSTOM_BIND + 8; j++)
|
||||||
{
|
{
|
||||||
int btn_remap = -1;
|
int stk_remap = -1;
|
||||||
|
|
||||||
snprintf(key_ident[RARCH_FIRST_CUSTOM_BIND + j],
|
fill_pathname_join_delim(stk_ident[j], s3,
|
||||||
sizeof(key_ident[RARCH_FIRST_CUSTOM_BIND + j]),
|
key_strings[j], '$', sizeof(stk_ident[j]));
|
||||||
|
|
||||||
|
snprintf(stk_ident[j],
|
||||||
|
sizeof(stk_ident[j]),
|
||||||
"%s_%s",
|
"%s_%s",
|
||||||
s1,
|
s3,
|
||||||
key_strings[RARCH_FIRST_CUSTOM_BIND + j]);
|
key_strings[j]);
|
||||||
|
|
||||||
if (config_get_int(conf, key_ident[RARCH_FIRST_CUSTOM_BIND + j],
|
if (config_get_int(conf, stk_ident[j],
|
||||||
&btn_remap) && (btn_remap < 4))
|
&stk_remap))
|
||||||
settings->uints.input_remap_ids[i][RARCH_FIRST_CUSTOM_BIND + j] =
|
settings->uints.input_remap_ids[i][j] =
|
||||||
btn_remap;
|
stk_remap;
|
||||||
|
RARCH_LOG("stk_ident: %s:%d\n", stk_ident[j], settings->uints.input_remap_ids[i][j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(s1, sizeof(s1), "input_player%u_analog_dpad_mode", i + 1);
|
snprintf(s1, sizeof(s1), "input_player%u_analog_dpad_mode", i + 1);
|
||||||
@ -167,50 +173,55 @@ bool input_remapping_save_file(const char *path)
|
|||||||
|
|
||||||
for (i = 0; i < max_users; i++)
|
for (i = 0; i < max_users; i++)
|
||||||
{
|
{
|
||||||
char s1[64], s2[64];
|
char s1[64], s2[64], s3[64];
|
||||||
|
char btn_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
|
||||||
char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
|
char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
|
||||||
char keymapper_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
|
char stk_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
|
||||||
char key_strings[RARCH_FIRST_CUSTOM_BIND + 4][128] = {
|
|
||||||
|
char key_strings[RARCH_FIRST_CUSTOM_BIND + 8][128] = {
|
||||||
"b", "y", "select", "start",
|
"b", "y", "select", "start",
|
||||||
"up", "down", "left", "right",
|
"up", "down", "left", "right",
|
||||||
"a", "x", "l", "r", "l2", "r2",
|
"a", "x", "l", "r", "l2", "r2",
|
||||||
"l3", "r3", "l_x", "l_y", "r_x", "r_y" };
|
"l3", "r3", "l_x+", "l_x-", "l_y+", "l_y-", "r_x+", "r_x-", "r_y+", "r_y-" };
|
||||||
|
|
||||||
s1[0] = '\0';
|
s1[0] = '\0';
|
||||||
s2[0] = '\0';
|
s2[0] = '\0';
|
||||||
|
|
||||||
snprintf(s1, sizeof(s1), "input_player%u_btn", i + 1);
|
snprintf(s1, sizeof(s1), "input_player%u_btn", i + 1);
|
||||||
snprintf(s2, sizeof(s2), "input_player%u_key", i + 1);
|
snprintf(s2, sizeof(s2), "input_player%u_key", i + 1);
|
||||||
|
snprintf(s3, sizeof(s1), "input_player%u_stk", i + 1);
|
||||||
|
|
||||||
for (j = 0; j < RARCH_FIRST_CUSTOM_BIND + 4; j++)
|
for (j = 0; j < RARCH_FIRST_CUSTOM_BIND + 4; j++)
|
||||||
{
|
{
|
||||||
fill_pathname_join_delim(key_ident[j], s1,
|
fill_pathname_join_delim(btn_ident[j], s1,
|
||||||
key_strings[j], '_', sizeof(key_ident[j]));
|
key_strings[j], '_', sizeof(btn_ident[j]));
|
||||||
fill_pathname_join_delim(keymapper_ident[j], s2,
|
fill_pathname_join_delim(key_ident[j], s2,
|
||||||
key_strings[j], '_', sizeof(key_ident[j]));
|
key_strings[j], '_', sizeof(btn_ident[j]));
|
||||||
|
|
||||||
/* only save values that have been modified */
|
/* only save values that have been modified */
|
||||||
if(j < RARCH_FIRST_CUSTOM_BIND)
|
if(j < RARCH_FIRST_CUSTOM_BIND)
|
||||||
{
|
{
|
||||||
if(settings->uints.input_remap_ids[i][j] != j && settings->uints.input_remap_ids[i][j] != RARCH_UNMAPPED)
|
if(settings->uints.input_remap_ids[i][j] != j && settings->uints.input_remap_ids[i][j] != RARCH_UNMAPPED)
|
||||||
config_set_int(conf, key_ident[j], settings->uints.input_remap_ids[i][j]);
|
config_set_int(conf, btn_ident[j], settings->uints.input_remap_ids[i][j]);
|
||||||
else if (settings->uints.input_remap_ids[i][j] != j && settings->uints.input_remap_ids[i][j] == RARCH_UNMAPPED)
|
else if (settings->uints.input_remap_ids[i][j] != j && settings->uints.input_remap_ids[i][j] == RARCH_UNMAPPED)
|
||||||
config_set_int(conf, key_ident[j], -1);
|
config_set_int(conf, btn_ident[j], -1);
|
||||||
else
|
else
|
||||||
config_unset(conf,key_ident[j]);
|
config_unset(conf,btn_ident[j]);
|
||||||
|
|
||||||
if (settings->uints.input_keymapper_ids[i][j] != RETROK_UNKNOWN)
|
if (settings->uints.input_keymapper_ids[i][j] != RETROK_UNKNOWN)
|
||||||
config_set_int(conf, keymapper_ident[j],
|
config_set_int(conf, key_ident[j],
|
||||||
settings->uints.input_keymapper_ids[i][j]);
|
settings->uints.input_keymapper_ids[i][j]);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
fill_pathname_join_delim(stk_ident[j], s3,
|
||||||
|
key_strings[j], '_', sizeof(stk_ident[j]));
|
||||||
if(settings->uints.input_remap_ids[i][j] != j - RARCH_FIRST_CUSTOM_BIND)
|
if(settings->uints.input_remap_ids[i][j] != j - RARCH_FIRST_CUSTOM_BIND)
|
||||||
config_set_int(conf, key_ident[j],
|
config_set_int(conf, stk_ident[j],
|
||||||
settings->uints.input_remap_ids[i][j]);
|
settings->uints.input_remap_ids[i][j]);
|
||||||
else
|
else
|
||||||
config_unset(conf,key_ident[j]);
|
config_unset(conf,btn_ident[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
snprintf(s1, sizeof(s1), "input_libretro_device_p%u", i + 1);
|
snprintf(s1, sizeof(s1), "input_libretro_device_p%u", i + 1);
|
||||||
@ -274,8 +285,8 @@ void input_remapping_set_defaults(bool deinit)
|
|||||||
settings->uints.input_remap_ids[i][j] = keybind->id;
|
settings->uints.input_remap_ids[i][j] = keybind->id;
|
||||||
settings->uints.input_keymapper_ids[i][j] = RETROK_UNKNOWN;
|
settings->uints.input_keymapper_ids[i][j] = RETROK_UNKNOWN;
|
||||||
}
|
}
|
||||||
for (j = 0; j < 4; j++)
|
for (j = RARCH_FIRST_CUSTOM_BIND; j < RARCH_FIRST_CUSTOM_BIND + 8; j++)
|
||||||
settings->uints.input_remap_ids[i][RARCH_FIRST_CUSTOM_BIND + j] = j;
|
settings->uints.input_remap_ids[i][j] = j;
|
||||||
|
|
||||||
if (old_analog_dpad_mode[i])
|
if (old_analog_dpad_mode[i])
|
||||||
settings->uints.input_analog_dpad_mode[i] = old_analog_dpad_mode[i];
|
settings->uints.input_analog_dpad_mode[i] = old_analog_dpad_mode[i];
|
||||||
|
@ -550,6 +550,7 @@ static void menu_action_setting_disp_set_label_input_desc(
|
|||||||
rarch_system_info_t *system = runloop_get_system_info();
|
rarch_system_info_t *system = runloop_get_system_info();
|
||||||
settings_t *settings = config_get_ptr();
|
settings_t *settings = config_get_ptr();
|
||||||
const char* descriptor = NULL;
|
const char* descriptor = NULL;
|
||||||
|
char buf[256];
|
||||||
|
|
||||||
unsigned btn_idx, user_idx, remap_idx;
|
unsigned btn_idx, user_idx, remap_idx;
|
||||||
|
|
||||||
@ -561,18 +562,27 @@ static void menu_action_setting_disp_set_label_input_desc(
|
|||||||
|
|
||||||
remap_idx =
|
remap_idx =
|
||||||
settings->uints.input_remap_ids[user_idx][btn_idx];
|
settings->uints.input_remap_ids[user_idx][btn_idx];
|
||||||
|
/*
|
||||||
if (remap_idx == RARCH_UNMAPPED)
|
if (remap_idx == RARCH_UNMAPPED)
|
||||||
settings->uints.input_remap_ids[user_idx][btn_idx] = RARCH_UNMAPPED;
|
settings->uints.input_remap_ids[user_idx][btn_idx] = RARCH_UNMAPPED;
|
||||||
|
*/
|
||||||
if (!system)
|
if (!system)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (btn_idx < RARCH_FIRST_CUSTOM_BIND)
|
descriptor = system->input_desc_btn[user_idx][remap_idx];
|
||||||
descriptor = system->input_desc_btn[user_idx][remap_idx];
|
|
||||||
|
|
||||||
if (!string_is_empty(descriptor))
|
if (!string_is_empty(descriptor) && remap_idx < RARCH_FIRST_CUSTOM_BIND)
|
||||||
strlcpy(s, descriptor, len);
|
strlcpy(s, descriptor, len);
|
||||||
|
else if (!string_is_empty(descriptor) && remap_idx >= RARCH_FIRST_CUSTOM_BIND && remap_idx % 2 == 0)
|
||||||
|
{
|
||||||
|
snprintf(buf, sizeof(buf), "%s %c", descriptor, '+');
|
||||||
|
strlcpy(s, buf, len);
|
||||||
|
}
|
||||||
|
else if (!string_is_empty(descriptor) && remap_idx >= RARCH_FIRST_CUSTOM_BIND && remap_idx % 2 != 0)
|
||||||
|
{
|
||||||
|
snprintf(buf, sizeof(buf), "%s %c", descriptor, '-');
|
||||||
|
strlcpy(s, buf, len);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
strlcpy(s, "---", len);
|
strlcpy(s, "---", len);
|
||||||
|
|
||||||
|
@ -117,8 +117,8 @@ static int action_left_input_desc(unsigned type, const char *label,
|
|||||||
|
|
||||||
/* skip the not used buttons (unless they are at the end by calling the right desc function recursively
|
/* skip the not used buttons (unless they are at the end by calling the right desc function recursively
|
||||||
also skip all the axes until analog remapping is implemented */
|
also skip all the axes until analog remapping is implemented */
|
||||||
if ((string_is_empty(system->input_desc_btn[user_idx][remap_idx]) && remap_idx < RARCH_CUSTOM_BIND_LIST_END) ||
|
if ((string_is_empty(system->input_desc_btn[user_idx][remap_idx]) && remap_idx < RARCH_CUSTOM_BIND_LIST_END) /*||
|
||||||
(remap_idx >= RARCH_FIRST_CUSTOM_BIND && remap_idx < RARCH_CUSTOM_BIND_LIST_END))
|
(remap_idx >= RARCH_FIRST_CUSTOM_BIND && remap_idx < RARCH_CUSTOM_BIND_LIST_END)*/)
|
||||||
action_left_input_desc(type, label, wraparound);
|
action_left_input_desc(type, label, wraparound);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -164,8 +164,8 @@ int action_right_input_desc(unsigned type, const char *label,
|
|||||||
|
|
||||||
/* skip the not used buttons (unless they are at the end by calling the right desc function recursively
|
/* skip the not used buttons (unless they are at the end by calling the right desc function recursively
|
||||||
also skip all the axes until analog remapping is implemented */
|
also skip all the axes until analog remapping is implemented */
|
||||||
if ((string_is_empty(system->input_desc_btn[user_idx][remap_idx]) && remap_idx < RARCH_CUSTOM_BIND_LIST_END) ||
|
if ((string_is_empty(system->input_desc_btn[user_idx][remap_idx]) && remap_idx < RARCH_CUSTOM_BIND_LIST_END) /*||
|
||||||
(remap_idx >= RARCH_FIRST_CUSTOM_BIND && remap_idx < RARCH_CUSTOM_BIND_LIST_END))
|
(remap_idx >= RARCH_FIRST_CUSTOM_BIND && remap_idx < RARCH_CUSTOM_BIND_LIST_END)*/)
|
||||||
action_right_input_desc(type, label, wraparound);
|
action_right_input_desc(type, label, wraparound);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -3250,7 +3250,7 @@ static int menu_displaylist_parse_options_remappings(
|
|||||||
if (device == RETRO_DEVICE_JOYPAD || device == RETRO_DEVICE_ANALOG)
|
if (device == RETRO_DEVICE_JOYPAD || device == RETRO_DEVICE_ANALOG)
|
||||||
{
|
{
|
||||||
/* change to RARCH_FIRST_CUSTOM_BIND + 8 once analog remapping is implemented */
|
/* change to RARCH_FIRST_CUSTOM_BIND + 8 once analog remapping is implemented */
|
||||||
for (retro_id = 0; retro_id < RARCH_FIRST_CUSTOM_BIND; retro_id++)
|
for (retro_id = 0; retro_id < RARCH_FIRST_CUSTOM_BIND + 8; retro_id++)
|
||||||
{
|
{
|
||||||
char desc_label[64];
|
char desc_label[64];
|
||||||
unsigned user = p + 1;
|
unsigned user = p + 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user