|
|
|
@ -2,6 +2,7 @@
|
|
|
|
// SPDX-License-Identifier: CC-BY-NC-ND-4.0
|
|
|
|
// SPDX-License-Identifier: CC-BY-NC-ND-4.0
|
|
|
|
|
|
|
|
|
|
|
|
#include "analog_joystick.h"
|
|
|
|
#include "analog_joystick.h"
|
|
|
|
|
|
|
|
#include "controller_helpers.h"
|
|
|
|
#include "system.h"
|
|
|
|
#include "system.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "util/imgui_manager.h"
|
|
|
|
#include "util/imgui_manager.h"
|
|
|
|
@ -112,30 +113,30 @@ void AnalogJoystick::SetBindState(u32 index, float value)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
case HalfAxis::LLeft:
|
|
|
|
case HalfAxis::LLeft:
|
|
|
|
case HalfAxis::LRight:
|
|
|
|
case HalfAxis::LRight:
|
|
|
|
m_axis_state[static_cast<u8>(Axis::LeftX)] =
|
|
|
|
m_axis_state[static_cast<u8>(Axis::LeftX)] = ControllerHelpers::MergeHalfAxes(
|
|
|
|
MergeHalfAxes(m_half_axis_state[static_cast<size_t>(HalfAxis::LLeft)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::LLeft)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::LRight)], (m_invert_left_stick & 1));
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::LRight)], (m_invert_left_stick & 1));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case HalfAxis::LDown:
|
|
|
|
case HalfAxis::LDown:
|
|
|
|
case HalfAxis::LUp:
|
|
|
|
case HalfAxis::LUp:
|
|
|
|
m_axis_state[static_cast<u8>(Axis::LeftY)] =
|
|
|
|
m_axis_state[static_cast<u8>(Axis::LeftY)] = ControllerHelpers::MergeHalfAxes(
|
|
|
|
MergeHalfAxes(m_half_axis_state[static_cast<size_t>(HalfAxis::LUp)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::LUp)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::LDown)], (m_invert_left_stick & 2));
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::LDown)], (m_invert_left_stick & 2));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case HalfAxis::RLeft:
|
|
|
|
case HalfAxis::RLeft:
|
|
|
|
case HalfAxis::RRight:
|
|
|
|
case HalfAxis::RRight:
|
|
|
|
m_axis_state[static_cast<u8>(Axis::RightX)] =
|
|
|
|
m_axis_state[static_cast<u8>(Axis::RightX)] = ControllerHelpers::MergeHalfAxes(
|
|
|
|
MergeHalfAxes(m_half_axis_state[static_cast<size_t>(HalfAxis::RLeft)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::RLeft)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::RRight)], (m_invert_right_stick & 1));
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::RRight)], (m_invert_right_stick & 1));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case HalfAxis::RDown:
|
|
|
|
case HalfAxis::RDown:
|
|
|
|
case HalfAxis::RUp:
|
|
|
|
case HalfAxis::RUp:
|
|
|
|
m_axis_state[static_cast<u8>(Axis::RightY)] =
|
|
|
|
m_axis_state[static_cast<u8>(Axis::RightY)] = ControllerHelpers::MergeHalfAxes(
|
|
|
|
MergeHalfAxes(m_half_axis_state[static_cast<size_t>(HalfAxis::RUp)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::RUp)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::RDown)], (m_invert_right_stick & 2));
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::RDown)], (m_invert_right_stick & 2));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
@ -147,24 +148,24 @@ void AnalogJoystick::SetBindState(u32 index, float value)
|
|
|
|
float pos_x, pos_y;
|
|
|
|
float pos_x, pos_y;
|
|
|
|
if (static_cast<HalfAxis>(sub_index) < HalfAxis::RLeft)
|
|
|
|
if (static_cast<HalfAxis>(sub_index) < HalfAxis::RLeft)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
pos_x =
|
|
|
|
pos_x = ControllerHelpers::MergeHalfAxesToFloat(m_half_axis_state[static_cast<size_t>(HalfAxis::LLeft)],
|
|
|
|
MergeHalfAxesToFloat(m_half_axis_state[static_cast<size_t>(HalfAxis::LLeft)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::LRight)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::LRight)], (m_invert_left_stick & 1));
|
|
|
|
(m_invert_left_stick & 1));
|
|
|
|
pos_y =
|
|
|
|
pos_y = ControllerHelpers::MergeHalfAxesToFloat(m_half_axis_state[static_cast<size_t>(HalfAxis::LUp)],
|
|
|
|
MergeHalfAxesToFloat(m_half_axis_state[static_cast<size_t>(HalfAxis::LUp)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::LDown)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::LDown)], (m_invert_left_stick & 2));
|
|
|
|
(m_invert_left_stick & 2));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
pos_x =
|
|
|
|
pos_x = ControllerHelpers::MergeHalfAxesToFloat(m_half_axis_state[static_cast<size_t>(HalfAxis::RLeft)],
|
|
|
|
MergeHalfAxesToFloat(m_half_axis_state[static_cast<size_t>(HalfAxis::RLeft)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::RRight)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::RRight)], (m_invert_right_stick & 1));
|
|
|
|
(m_invert_right_stick & 1));
|
|
|
|
pos_y =
|
|
|
|
pos_y = ControllerHelpers::MergeHalfAxesToFloat(m_half_axis_state[static_cast<size_t>(HalfAxis::RUp)],
|
|
|
|
MergeHalfAxesToFloat(m_half_axis_state[static_cast<size_t>(HalfAxis::RUp)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::RDown)],
|
|
|
|
m_half_axis_state[static_cast<size_t>(HalfAxis::RDown)], (m_invert_right_stick & 2));
|
|
|
|
(m_invert_right_stick & 2));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (InCircularDeadzone(m_analog_deadzone, pos_x, pos_y))
|
|
|
|
if (ControllerHelpers::InCircularDeadzone(m_analog_deadzone, pos_x, pos_y))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (static_cast<HalfAxis>(sub_index) < HalfAxis::RLeft)
|
|
|
|
if (static_cast<HalfAxis>(sub_index) < HalfAxis::RLeft)
|
|
|
|
m_axis_state[static_cast<u8>(Axis::LeftX)] = m_axis_state[static_cast<u8>(Axis::LeftY)] = AXIS_CENTER;
|
|
|
|
m_axis_state[static_cast<u8>(Axis::LeftX)] = m_axis_state[static_cast<u8>(Axis::LeftY)] = AXIS_CENTER;
|
|
|
|
|