allow remapping of analog axis, only works axis to axis

This commit is contained in:
Toad King 2015-05-20 21:11:20 -05:00
parent 16a80243aa
commit 0cd7562fb8
7 changed files with 166 additions and 107 deletions

View File

@ -43,20 +43,29 @@ bool input_remapping_load_file(const char *path)
for (i = 0; i < MAX_USERS; i++)
{
char buf[64];
char key_ident[RARCH_FIRST_META_KEY][128];
char key_strings[RARCH_FIRST_META_KEY][128] = { "b", "y", "select", "start",
"up", "down", "left", "right", "a", "x", "l", "r", "l2", "r2", "l3", "r3", "l_x_plus", "l_x_minus", "l_y_plus", "l_y_minus", "r_x_plus", "r_x_minus", "r_y_plus", "r_y_minus"};
char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128];
char key_strings[RARCH_FIRST_CUSTOM_BIND + 4][128] = { "b", "y", "select", "start",
"up", "down", "left", "right", "a", "x", "l", "r", "l2", "r2", "l3", "r3", "l_x", "l_y", "r_x", "r_y" };
snprintf(buf, sizeof(buf), "input_player%u", i + 1);
for (j = 0; j < RARCH_FIRST_META_KEY; j++)
for (j = 0; j < RARCH_FIRST_CUSTOM_BIND + 4; j++)
{
int key_remap = -1;
snprintf(key_ident[j], sizeof(key_ident[j]), "%s_%s", buf, key_strings[j]);
if (config_get_int(conf, key_ident[j], &key_remap))
if (config_get_int(conf, key_ident[j], &key_remap) && key_remap < RARCH_FIRST_CUSTOM_BIND)
settings->input.remap_ids[i][j] = key_remap;
}
for (j = 0; j < 4; j++)
{
int key_remap = -1;
snprintf(key_ident[RARCH_FIRST_CUSTOM_BIND + j], sizeof(key_ident[RARCH_FIRST_CUSTOM_BIND + j]), "%s_%s", buf, key_strings[RARCH_FIRST_CUSTOM_BIND + j]);
if (config_get_int(conf, key_ident[RARCH_FIRST_CUSTOM_BIND + j], &key_remap) && key_remap < 4)
settings->input.remap_ids[i][RARCH_FIRST_CUSTOM_BIND + j] = key_remap;
}
}
config_file_free(conf);
@ -97,13 +106,13 @@ bool input_remapping_save_file(const char *path)
for (i = 0; i < settings->input.max_users; i++)
{
char key_ident[RARCH_FIRST_META_KEY][128];
char key_strings[RARCH_FIRST_META_KEY][128] = { "b", "y", "select", "start",
"up", "down", "left", "right", "a", "x", "l", "r", "l2", "r2", "l3", "r3", "l_x_plus" , "l_x_minus", "l_y_plus", "l_y_minus", "r_x_plus", "r_x_minus", "r_y_plus", "r_y_minus" };
char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128];
char key_strings[RARCH_FIRST_CUSTOM_BIND + 4][128] = { "b", "y", "select", "start",
"up", "down", "left", "right", "a", "x", "l", "r", "l2", "r2", "l3", "r3", "l_x", "l_y", "r_x", "r_y" };
snprintf(buf, sizeof(buf), "input_player%u", i + 1);
for (j = 0; j < RARCH_FIRST_META_KEY; j++)
for (j = 0; j < RARCH_FIRST_CUSTOM_BIND + 4; j++)
{
snprintf(key_ident[j], sizeof(key_ident[j]), "%s_%s", buf, key_strings[j]);
config_set_int(conf, key_ident[j], settings->input.remap_ids[i][j]);
@ -123,8 +132,10 @@ void input_remapping_set_defaults(void)
for (i = 0; i < MAX_USERS; i++)
{
for (j = 0; j < RARCH_BIND_LIST_END; j++)
for (j = 0; j < RARCH_FIRST_CUSTOM_BIND; j++)
settings->input.remap_ids[i][j] = settings->input.binds[i][j].id;
for (j = 0; j < 4; j++)
settings->input.remap_ids[i][RARCH_FIRST_CUSTOM_BIND + j] = j;
}
}
@ -133,6 +144,20 @@ void input_remapping_state(unsigned port,
{
settings_t *settings = config_get_ptr();
if (*id < RARCH_FIRST_META_KEY)
switch (*device)
{
case RETRO_DEVICE_JOYPAD:
if (*id < RARCH_FIRST_CUSTOM_BIND)
*id = settings->input.remap_ids[port][*id];
break;
case RETRO_DEVICE_ANALOG:
if (*idx < 2 && *id < 2)
{
unsigned new_id = RARCH_FIRST_CUSTOM_BIND + (*idx * 2 + *id);
new_id = settings->input.remap_ids[port][new_id];
*idx = (new_id & 2) >> 1;
*id = new_id & 1;
}
break;
}
}

View File

@ -36,6 +36,10 @@
#define RETRO_LBL_JOYPAD_L3 "RetroPad L3 Button"
#define RETRO_LBL_JOYPAD_R3 "RetroPad R3 Button"
#define RETRO_LBL_TURBO_ENABLE "Turbo Enable"
#define RETRO_LBL_ANALOG_LEFT_X "Left Analog X"
#define RETRO_LBL_ANALOG_LEFT_Y "Left Analog Y"
#define RETRO_LBL_ANALOG_RIGHT_X "Right Analog X"
#define RETRO_LBL_ANALOG_RIGHT_Y "Right Analog Y"
#define RETRO_LBL_ANALOG_LEFT_X_PLUS "Left Analog X +"
#define RETRO_LBL_ANALOG_LEFT_X_MINUS "Left Analog X -"
#define RETRO_LBL_ANALOG_LEFT_Y_PLUS "Left Analog Y +"

View File

@ -1523,11 +1523,16 @@ static int menu_displaylist_parse_options_remappings(menu_displaylist_info_t *in
for (p = 0; p < settings->input.max_users; p++)
{
for (retro_id = 0; retro_id < RARCH_FIRST_META_KEY; retro_id++)
for (retro_id = 0; retro_id < RARCH_FIRST_CUSTOM_BIND + 4; retro_id++)
{
char desc_label[64];
unsigned user = p + 1;
const char *description = global->system.input_desc_btn[p][retro_id];
unsigned desc_offset = retro_id;
if (desc_offset >= RARCH_FIRST_CUSTOM_BIND)
desc_offset = RARCH_FIRST_CUSTOM_BIND + (desc_offset - RARCH_FIRST_CUSTOM_BIND) * 2;
const char *description = global->system.input_desc_btn[p][desc_offset];
if (!description)
continue;

View File

@ -86,8 +86,8 @@ static int action_left_input_desc(unsigned type, const char *label,
bool wraparound)
{
unsigned inp_desc_index_offset = type - MENU_SETTINGS_INPUT_DESC_BEGIN;
unsigned inp_desc_user = inp_desc_index_offset / RARCH_FIRST_META_KEY;
unsigned inp_desc_button_index_offset = inp_desc_index_offset - (inp_desc_user * RARCH_FIRST_META_KEY);
unsigned inp_desc_user = inp_desc_index_offset / (RARCH_FIRST_CUSTOM_BIND + 4);
unsigned inp_desc_button_index_offset = inp_desc_index_offset - (inp_desc_user * (RARCH_FIRST_CUSTOM_BIND + 4));
settings_t *settings = config_get_ptr();
if (settings->input.remap_ids[inp_desc_user][inp_desc_button_index_offset] > 0)

View File

@ -21,6 +21,14 @@
#include "../performance.h"
#include "../settings.h"
#include "../intl/intl.h"
const char axis_labels[4][128] = {
RETRO_LBL_ANALOG_LEFT_X,
RETRO_LBL_ANALOG_LEFT_Y,
RETRO_LBL_ANALOG_RIGHT_X,
RETRO_LBL_ANALOG_RIGHT_Y
};
static void menu_action_setting_disp_set_label_cheat_num_passes(
file_list_t* list,
@ -346,14 +354,19 @@ static void menu_action_setting_disp_set_label_input_desc(
settings_t *settings = config_get_ptr();
unsigned inp_desc_index_offset = type - MENU_SETTINGS_INPUT_DESC_BEGIN;
unsigned inp_desc_user = inp_desc_index_offset /
RARCH_FIRST_META_KEY;
(RARCH_FIRST_CUSTOM_BIND + 4);
unsigned inp_desc_button_index_offset = inp_desc_index_offset -
(inp_desc_user * RARCH_FIRST_META_KEY);
(inp_desc_user * (RARCH_FIRST_CUSTOM_BIND + 4));
unsigned remap_id = settings->input.remap_ids
[inp_desc_user][inp_desc_button_index_offset];
if (inp_desc_button_index_offset < RARCH_FIRST_CUSTOM_BIND)
snprintf(type_str, type_str_size, "%s",
settings->input.binds[inp_desc_user][remap_id].desc);
else
snprintf(type_str, type_str_size, "%s",
axis_labels[remap_id]);
*w = 19;
strlcpy(path_buf, path, path_buf_size);
}

View File

@ -85,12 +85,20 @@ static int action_right_input_desc(unsigned type, const char *label,
bool wraparound)
{
unsigned inp_desc_index_offset = type - MENU_SETTINGS_INPUT_DESC_BEGIN;
unsigned inp_desc_user = inp_desc_index_offset / RARCH_FIRST_META_KEY;
unsigned inp_desc_button_index_offset = inp_desc_index_offset - (inp_desc_user * RARCH_FIRST_META_KEY);
unsigned inp_desc_user = inp_desc_index_offset / (RARCH_FIRST_CUSTOM_BIND + 4);
unsigned inp_desc_button_index_offset = inp_desc_index_offset - (inp_desc_user * (RARCH_FIRST_CUSTOM_BIND + 4));
settings_t *settings = config_get_ptr();
if (settings->input.remap_ids[inp_desc_user][inp_desc_button_index_offset] < RARCH_FIRST_META_KEY)
if (inp_desc_button_index_offset < RARCH_FIRST_CUSTOM_BIND)
{
if (settings->input.remap_ids[inp_desc_user][inp_desc_button_index_offset] < RARCH_FIRST_CUSTOM_BIND - 1)
settings->input.remap_ids[inp_desc_user][inp_desc_button_index_offset]++;
}
else
{
if (settings->input.remap_ids[inp_desc_user][inp_desc_button_index_offset] < 4 - 1)
settings->input.remap_ids[inp_desc_user][inp_desc_button_index_offset]++;
}
return 0;
}

View File

@ -62,13 +62,17 @@ static int action_start_input_desc(unsigned type, const char *label)
{
settings_t *settings = config_get_ptr();
unsigned inp_desc_index_offset = type - MENU_SETTINGS_INPUT_DESC_BEGIN;
unsigned inp_desc_user = inp_desc_index_offset / RARCH_FIRST_META_KEY;
unsigned inp_desc_button_index_offset = inp_desc_index_offset - (inp_desc_user * RARCH_FIRST_META_KEY);
unsigned inp_desc_user = inp_desc_index_offset / (RARCH_FIRST_CUSTOM_BIND + 4);
unsigned inp_desc_button_index_offset = inp_desc_index_offset - (inp_desc_user * (RARCH_FIRST_CUSTOM_BIND + 4));
(void)label;
if (inp_desc_button_index_offset < RARCH_FIRST_CUSTOM_BIND)
settings->input.remap_ids[inp_desc_user][inp_desc_button_index_offset] =
settings->input.binds[inp_desc_user][inp_desc_button_index_offset].id;
else
settings->input.remap_ids[inp_desc_user][inp_desc_button_index_offset] =
inp_desc_button_index_offset - RARCH_FIRST_CUSTOM_BIND;
return 0;
}