mirror of
https://github.com/libretro/RetroArch
synced 2025-02-28 22:13:51 +00:00
(Android) Refactor axis functions
This commit is contained in:
parent
f8d6cea02a
commit
cb5b22b6ac
@ -1315,8 +1315,6 @@ static void android_input_poll_memcpy(android_input_t *android)
|
||||
|
||||
static bool android_input_key_pressed(android_input_t *android, int key)
|
||||
{
|
||||
uint64_t joykey;
|
||||
uint32_t joyaxis;
|
||||
rarch_joypad_info_t joypad_info;
|
||||
joypad_info.joy_idx = 0;
|
||||
joypad_info.auto_binds = input_autoconf_binds[0];
|
||||
@ -1327,21 +1325,12 @@ static bool android_input_key_pressed(android_input_t *android, int key)
|
||||
&& android_keyboard_port_input_pressed(input_config_binds[0],
|
||||
key))
|
||||
return true;
|
||||
|
||||
joykey =
|
||||
(input_config_binds[0][key].joykey != NO_BTN)
|
||||
? input_config_binds[0][key].joykey
|
||||
: joypad_info.auto_binds[key].joykey;
|
||||
joyaxis =
|
||||
(input_config_binds[0][key].joyaxis != AXIS_NONE)
|
||||
? input_config_binds[0][key].joyaxis
|
||||
: joypad_info.auto_binds[key].joyaxis;
|
||||
|
||||
if ((uint16_t)joykey != NO_BTN && android->joypad->button(joypad_info.joy_idx, (uint16_t)joykey))
|
||||
return true;
|
||||
if (((float)abs(android->joypad->axis(joypad_info.joy_idx, joyaxis)) / 0x8000) > joypad_info.axis_threshold)
|
||||
return true;
|
||||
return false;
|
||||
return button_is_pressed(
|
||||
android->joypad,
|
||||
&joypad_info,
|
||||
&input_config_binds[0],
|
||||
joypad_info.joy_idx,
|
||||
key);
|
||||
}
|
||||
|
||||
/* Handle all events. If our activity is in pause state,
|
||||
|
@ -1399,9 +1399,6 @@ static int16_t btstack_hid_joypad_axis(void *data, unsigned port, uint32_t joyax
|
||||
btstack_hid_t *hid = (btstack_hid_t*)data;
|
||||
int16_t val = 0;
|
||||
|
||||
if (joyaxis == AXIS_NONE)
|
||||
return 0;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < 4)
|
||||
{
|
||||
val += pad_connection_get_axis(&hid->slots[port], port, AXIS_NEG_GET(joyaxis));
|
||||
|
@ -218,9 +218,6 @@ static int16_t iohidmanager_hid_joypad_axis(void *data,
|
||||
iohidmanager_hid_t *hid = (iohidmanager_hid_t*)data;
|
||||
int16_t val = 0;
|
||||
|
||||
if (joyaxis == AXIS_NONE)
|
||||
return 0;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < 11)
|
||||
{
|
||||
val += hid->axes[port][AXIS_NEG_GET(joyaxis)];
|
||||
|
@ -493,9 +493,6 @@ static int16_t libusb_hid_joypad_axis(void *data,
|
||||
libusb_hid_t *hid = (libusb_hid_t*)data;
|
||||
int16_t val = 0;
|
||||
|
||||
if (joyaxis == AXIS_NONE)
|
||||
return 0;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < 4)
|
||||
{
|
||||
val = pad_connection_get_axis(&hid->slots[port],
|
||||
|
@ -581,9 +581,6 @@ static int16_t wiiusb_hid_joypad_axis(void *data,
|
||||
int16_t val = 0;
|
||||
wiiusb_hid_t *hid = (wiiusb_hid_t*)data;
|
||||
|
||||
if (joyaxis == AXIS_NONE)
|
||||
return 0;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < 4)
|
||||
{
|
||||
val = pad_connection_get_axis(&hid->connections[port],
|
||||
|
@ -75,7 +75,7 @@ static int16_t android_joypad_button(unsigned port, uint16_t joykey)
|
||||
}
|
||||
else if (i < LAST_KEYCODE)
|
||||
if (BIT_GET(buf, i))
|
||||
ret |= (1 << i):
|
||||
ret |= (1 << i);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@ -86,9 +86,6 @@ static int16_t android_joypad_axis(unsigned port, uint32_t joyaxis)
|
||||
int val = 0;
|
||||
struct android_app *android_app = (struct android_app*)g_android;
|
||||
|
||||
if (joyaxis == AXIS_NONE)
|
||||
return 0;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < MAX_AXIS)
|
||||
{
|
||||
val = android_app->analog_state[port][AXIS_NEG_GET(joyaxis)];
|
||||
|
@ -88,7 +88,7 @@ static int16_t ctr_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
||||
bool is_neg = false;
|
||||
bool is_pos = false;
|
||||
|
||||
if (joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS)
|
||||
if (port_num >= DEFAULT_MAX_PADS)
|
||||
return 0;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < 4)
|
||||
|
@ -531,16 +531,12 @@ static int16_t dinput_joypad_button(unsigned port_num, uint16_t joykey)
|
||||
|
||||
static int16_t dinput_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
||||
{
|
||||
const struct dinput_joypad_data *pad = NULL;
|
||||
int val = 0;
|
||||
int axis = -1;
|
||||
bool is_neg = false;
|
||||
bool is_pos = false;
|
||||
const struct dinput_joypad_data *pad = &g_pads[port_num];
|
||||
|
||||
if (joyaxis == AXIS_NONE)
|
||||
return 0;
|
||||
|
||||
pad = &g_pads[port_num];
|
||||
if (!pad->joypad)
|
||||
return 0;
|
||||
|
||||
|
@ -188,7 +188,7 @@ static int16_t dos_joypad_button(unsigned port_num, uint16_t joykey)
|
||||
break;
|
||||
case RETRO_DEVICE_ID_JOYPAD_X:
|
||||
if (buf[DOSKEY_s])
|
||||
ret |= (1 << i):
|
||||
ret |= (1 << i);
|
||||
break;
|
||||
case RETRO_DEVICE_ID_JOYPAD_Y:
|
||||
if (buf[DOSKEY_a])
|
||||
@ -204,7 +204,7 @@ static int16_t dos_joypad_button(unsigned port_num, uint16_t joykey)
|
||||
break;
|
||||
case RETRO_DEVICE_ID_JOYPAD_UP:
|
||||
if (buf[DOSKEY_UP])
|
||||
ret |= (1 << i):
|
||||
ret |= (1 << i);
|
||||
break;
|
||||
case RETRO_DEVICE_ID_JOYPAD_DOWN:
|
||||
if (buf[DOSKEY_DOWN])
|
||||
|
@ -275,7 +275,7 @@ static int16_t gx_joypad_axis(unsigned port, uint32_t joyaxis)
|
||||
bool is_neg = false;
|
||||
bool is_pos = false;
|
||||
|
||||
if (joyaxis == AXIS_NONE || port >= DEFAULT_MAX_PADS)
|
||||
if (port >= DEFAULT_MAX_PADS)
|
||||
return 0;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < 4)
|
||||
|
@ -335,12 +335,8 @@ static void linuxraw_joypad_get_buttons(unsigned port, input_bits_t *state)
|
||||
static int16_t linuxraw_joypad_axis(unsigned port, uint32_t joyaxis)
|
||||
{
|
||||
int16_t val = 0;
|
||||
const struct linuxraw_joypad *pad = NULL;
|
||||
|
||||
if (joyaxis == AXIS_NONE)
|
||||
return 0;
|
||||
|
||||
pad = (const struct linuxraw_joypad*)&linuxraw_pads[port];
|
||||
const struct linuxraw_joypad *pad = (const struct linuxraw_joypad*)
|
||||
&linuxraw_pads[port];
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < NUM_AXES)
|
||||
{
|
||||
|
@ -361,16 +361,14 @@ static void apple_gamecontroller_joypad_get_buttons(unsigned port,
|
||||
BITS_COPY16_PTR(state, mfi_buttons[port]);
|
||||
}
|
||||
|
||||
static int16_t apple_gamecontroller_joypad_axis(unsigned port, uint32_t joyaxis)
|
||||
static int16_t apple_gamecontroller_joypad_axis(
|
||||
unsigned port, uint32_t joyaxis)
|
||||
{
|
||||
int16_t val = 0;
|
||||
int16_t axis = -1;
|
||||
bool is_neg = false;
|
||||
bool is_pos = false;
|
||||
|
||||
if (joyaxis == AXIS_NONE)
|
||||
return 0;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < 4)
|
||||
{
|
||||
axis = AXIS_NEG_GET(joyaxis);
|
||||
|
@ -111,7 +111,7 @@ static int16_t ps2_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
||||
bool is_neg = false;
|
||||
bool is_pos = false;
|
||||
|
||||
if (joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS)
|
||||
if (port_num >= DEFAULT_MAX_PADS)
|
||||
return 0;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < 4)
|
||||
|
@ -93,7 +93,7 @@ static int16_t ps3_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
||||
bool is_neg = false;
|
||||
bool is_pos = false;
|
||||
|
||||
if (joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS)
|
||||
if (port_num >= DEFAULT_MAX_PADS)
|
||||
return 0;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < 4)
|
||||
|
@ -151,7 +151,7 @@ static int16_t psp_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
||||
bool is_neg = false;
|
||||
bool is_pos = false;
|
||||
|
||||
if (joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS)
|
||||
if (port_num >= DEFAULT_MAX_PADS)
|
||||
return 0;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < 4)
|
||||
|
@ -74,7 +74,7 @@ static int16_t qnx_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
||||
bool is_pos = false;
|
||||
qnx_input_t *qnx = (qnx_input_t*)input_driver_get_data();
|
||||
|
||||
if (!qnx || joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS)
|
||||
if (!qnx || port_num >= DEFAULT_MAX_PADS)
|
||||
return 0;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < 4)
|
||||
|
@ -144,13 +144,8 @@ static void rwebpad_joypad_get_buttons(unsigned port_num, input_bits_t *state)
|
||||
static int16_t rwebpad_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
||||
{
|
||||
EmscriptenGamepadEvent gamepad_state;
|
||||
EMSCRIPTEN_RESULT r;
|
||||
int16_t val = 0;
|
||||
|
||||
if (joyaxis == 0xFFFFFFFF)
|
||||
return 0;
|
||||
|
||||
r = emscripten_get_gamepad_status(port_num, &gamepad_state);
|
||||
EMSCRIPTEN_RESULT r = emscripten_get_gamepad_status(port_num, &gamepad_state);
|
||||
|
||||
if (r == EMSCRIPTEN_RESULT_SUCCESS)
|
||||
{
|
||||
|
@ -353,13 +353,8 @@ static int16_t sdl_joypad_button(unsigned port, uint16_t joykey)
|
||||
|
||||
static int16_t sdl_joypad_axis(unsigned port, uint32_t joyaxis)
|
||||
{
|
||||
sdl_joypad_t *pad;
|
||||
int16_t val = 0;
|
||||
|
||||
if (joyaxis == AXIS_NONE)
|
||||
return 0;
|
||||
|
||||
pad = (sdl_joypad_t*)&sdl_pads[port];
|
||||
sdl_joypad_t *pad = (sdl_joypad_t*)&sdl_pads[port];
|
||||
if (!pad->joypad)
|
||||
return false;
|
||||
|
||||
|
@ -119,7 +119,7 @@ static int16_t switch_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
||||
|
||||
#if 0
|
||||
/* TODO/FIXME - implement */
|
||||
if (joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS) { }
|
||||
if (port_num >= DEFAULT_MAX_PADS) { }
|
||||
#endif
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < 4)
|
||||
|
@ -655,11 +655,8 @@ static void udev_joypad_get_buttons(unsigned port, input_bits_t *state)
|
||||
static int16_t udev_joypad_axis(unsigned port, uint32_t joyaxis)
|
||||
{
|
||||
int16_t val = 0;
|
||||
const struct udev_joypad *pad;
|
||||
if (joyaxis == AXIS_NONE)
|
||||
return 0;
|
||||
|
||||
pad = (const struct udev_joypad*)&udev_pads[port];
|
||||
const struct udev_joypad *pad = (const struct udev_joypad*)
|
||||
&udev_pads[port];
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) < NUM_AXES)
|
||||
{
|
||||
|
@ -325,7 +325,7 @@ static int16_t wpad_axis(unsigned pad, uint32_t axis)
|
||||
axis_data data;
|
||||
VPADChan channel;
|
||||
|
||||
if (!wpad_query_pad(pad) || axis == AXIS_NONE)
|
||||
if (!wpad_query_pad(pad))
|
||||
return 0;
|
||||
|
||||
channel = to_gamepad_channel(pad);
|
||||
|
@ -203,7 +203,7 @@ static int16_t xdk_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
||||
bool is_pos = false;
|
||||
XINPUT_GAMEPAD *pad = NULL;
|
||||
|
||||
if (joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS)
|
||||
if (port_num >= DEFAULT_MAX_PADS)
|
||||
return 0;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) <= 3)
|
||||
|
@ -479,17 +479,12 @@ static int16_t xinput_joypad_button(unsigned port_num, uint16_t joykey)
|
||||
|
||||
static int16_t xinput_joypad_axis (unsigned port_num, uint32_t joyaxis)
|
||||
{
|
||||
int xuser;
|
||||
int16_t val = 0;
|
||||
int axis = -1;
|
||||
bool is_neg = false;
|
||||
bool is_pos = false;
|
||||
XINPUT_GAMEPAD* pad = NULL;
|
||||
|
||||
if (joyaxis == AXIS_NONE)
|
||||
return 0;
|
||||
|
||||
xuser = pad_index_to_xuser_index(port_num);
|
||||
int xuser = pad_index_to_xuser_index(port_num);
|
||||
|
||||
#ifdef HAVE_DINPUT
|
||||
if (xuser == -1)
|
||||
|
61
retroarch.c
61
retroarch.c
@ -3539,17 +3539,26 @@ static void menu_input_key_bind_poll_bind_get_rested_axes(
|
||||
|
||||
/* poll only the relevant port */
|
||||
for (a = 0; a < MENU_MAX_AXES; a++)
|
||||
{
|
||||
if (AXIS_POS(a) != AXIS_NONE)
|
||||
state->axis_state[port].rested_axes[a] =
|
||||
joypad->axis(port, AXIS_POS(a)) +
|
||||
joypad->axis(port, AXIS_POS(a));
|
||||
if (AXIS_NEG(a) != AXIS_NONE)
|
||||
state->axis_state[port].rested_axes[a] +=
|
||||
joypad->axis(port, AXIS_NEG(a));
|
||||
}
|
||||
|
||||
if (sec_joypad)
|
||||
{
|
||||
/* poll only the relevant port */
|
||||
for (a = 0; a < MENU_MAX_AXES; a++)
|
||||
state->axis_state[port].rested_axes[a] =
|
||||
sec_joypad->axis(port, AXIS_POS(a)) +
|
||||
sec_joypad->axis(port, AXIS_NEG(a));
|
||||
{
|
||||
if (AXIS_POS(a) != AXIS_NONE)
|
||||
state->axis_state[port].rested_axes[a] = sec_joypad->axis(port, AXIS_POS(a));
|
||||
|
||||
if (AXIS_NEG(a) != AXIS_NONE)
|
||||
state->axis_state[port].rested_axes[a] += sec_joypad->axis(port, AXIS_NEG(a));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3571,9 +3580,13 @@ static void menu_input_key_bind_poll_bind_state_internal(
|
||||
state->state[port].buttons[b] = joypad->button(port, b);
|
||||
|
||||
for (a = 0; a < MENU_MAX_AXES; a++)
|
||||
state->state[port].axes[a] =
|
||||
joypad->axis(port, AXIS_POS(a)) +
|
||||
joypad->axis(port, AXIS_NEG(a));
|
||||
{
|
||||
if (AXIS_POS(a) != AXIS_NONE)
|
||||
state->state[port].axes[a] = joypad->axis(port, AXIS_POS(a));
|
||||
|
||||
if (AXIS_NEG(a) != AXIS_NONE)
|
||||
state->state[port].axes[a] += joypad->axis(port, AXIS_NEG(a));
|
||||
}
|
||||
|
||||
for (h = 0; h < MENU_MAX_HATS; h++)
|
||||
{
|
||||
@ -24111,7 +24124,7 @@ static int16_t input_joypad_axis(
|
||||
settings_t *settings = p_rarch->configuration_settings;
|
||||
float input_analog_deadzone = settings->floats.input_analog_deadzone;
|
||||
float input_analog_sensitivity = settings->floats.input_analog_sensitivity;
|
||||
int16_t val = drv->axis(port, joyaxis);
|
||||
int16_t val = (joyaxis != AXIS_NONE) ? drv->axis(port, joyaxis) : 0;
|
||||
|
||||
if (input_analog_deadzone)
|
||||
{
|
||||
@ -26117,7 +26130,8 @@ int16_t button_is_pressed(
|
||||
if ((uint16_t)joykey != NO_BTN && joypad->button(
|
||||
joypad_info->joy_idx, (uint16_t)joykey))
|
||||
return 1;
|
||||
if (((float)abs(joypad->axis(joypad_info->joy_idx, joyaxis))
|
||||
if (joyaxis != AXIS_NONE &&
|
||||
((float)abs(joypad->axis(joypad_info->joy_idx, joyaxis))
|
||||
/ 0x8000) > joypad_info->axis_threshold)
|
||||
return 1;
|
||||
return 0;
|
||||
@ -26165,8 +26179,13 @@ static int16_t input_joypad_analog_button(
|
||||
|
||||
/* Analog button. */
|
||||
if (input_analog_deadzone)
|
||||
normal_mag = fabs((1.0f / 0x7fff) * drv->axis(
|
||||
joypad_info->joy_idx, axis));
|
||||
{
|
||||
int16_t mult = 0;
|
||||
if (axis != AXIS_NONE)
|
||||
mult = drv->axis(
|
||||
joypad_info->joy_idx, axis);
|
||||
normal_mag = fabs((1.0f / 0x7fff) * mult);
|
||||
}
|
||||
res = abs(input_joypad_axis(p_rarch, drv,
|
||||
joypad_info->joy_idx, axis, normal_mag));
|
||||
|
||||
@ -26251,6 +26270,8 @@ static int16_t input_joypad_analog_axis(
|
||||
* radial deadzone */
|
||||
if (input_analog_deadzone)
|
||||
{
|
||||
float x = 0.0f;
|
||||
float y = 0.0f;
|
||||
uint32_t x_axis_minus = (bind_x_minus->joyaxis == AXIS_NONE)
|
||||
? joypad_info->auto_binds[ident_x_minus].joyaxis
|
||||
: bind_x_minus->joyaxis;
|
||||
@ -26264,12 +26285,18 @@ static int16_t input_joypad_analog_axis(
|
||||
? joypad_info->auto_binds[ident_y_plus].joyaxis
|
||||
: bind_y_plus->joyaxis;
|
||||
/* normalized magnitude for radial scaled analog deadzone */
|
||||
float x = drv->axis(
|
||||
joypad_info->joy_idx, x_axis_plus)
|
||||
+ drv->axis(joypad_info->joy_idx, x_axis_minus);
|
||||
float y = drv->axis(
|
||||
joypad_info->joy_idx, y_axis_plus)
|
||||
+ drv->axis(joypad_info->joy_idx, y_axis_minus);
|
||||
if (x_axis_plus != AXIS_NONE)
|
||||
x = drv->axis(
|
||||
joypad_info->joy_idx, x_axis_plus);
|
||||
if (x_axis_minus != AXIS_NONE)
|
||||
x += drv->axis(joypad_info->joy_idx,
|
||||
x_axis_minus);
|
||||
if (y_axis_plus != AXIS_NONE)
|
||||
y = drv->axis(
|
||||
joypad_info->joy_idx, y_axis_plus);
|
||||
if (y_axis_minus != AXIS_NONE)
|
||||
y += drv->axis(
|
||||
joypad_info->joy_idx, y_axis_minus);
|
||||
normal_mag = (1.0f / 0x7fff) * sqrt(x * x + y * y);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user