Moved analog direction logic to sdl_impl
This commit is contained in:
parent
231d9c10f3
commit
635deb70d4
3 changed files with 47 additions and 8 deletions
|
@ -15,6 +15,13 @@
|
||||||
|
|
||||||
namespace Input {
|
namespace Input {
|
||||||
|
|
||||||
|
enum class AnalogDirection : u8 {
|
||||||
|
RIGHT,
|
||||||
|
LEFT,
|
||||||
|
UP,
|
||||||
|
DOWN,
|
||||||
|
};
|
||||||
|
|
||||||
/// An abstract class template for an input device (a button, an analog input, etc.).
|
/// An abstract class template for an input device (a button, an analog input, etc.).
|
||||||
template <typename StatusType>
|
template <typename StatusType>
|
||||||
class InputDevice {
|
class InputDevice {
|
||||||
|
@ -23,6 +30,9 @@ public:
|
||||||
virtual StatusType GetStatus() const {
|
virtual StatusType GetStatus() const {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
virtual bool GetAnalogDirectionStatus(AnalogDirection direction) const {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// An abstract class template for a factory that can create input devices.
|
/// An abstract class template for a factory that can create input devices.
|
||||||
|
|
|
@ -274,15 +274,28 @@ void Controller_NPad::RequestPadStateUpdate(u32 npad_id) {
|
||||||
pad_state.d_right.Assign(button_state[DRight - BUTTON_HID_BEGIN]->GetStatus());
|
pad_state.d_right.Assign(button_state[DRight - BUTTON_HID_BEGIN]->GetStatus());
|
||||||
pad_state.d_down.Assign(button_state[DDown - BUTTON_HID_BEGIN]->GetStatus());
|
pad_state.d_down.Assign(button_state[DDown - BUTTON_HID_BEGIN]->GetStatus());
|
||||||
|
|
||||||
pad_state.l_stick_right.Assign(stick_l_x_f > 0.3f);
|
pad_state.l_stick_right.Assign(
|
||||||
pad_state.l_stick_left.Assign(stick_l_x_f < -0.3f);
|
analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus(
|
||||||
pad_state.l_stick_up.Assign(stick_l_y_f > 0.3f);
|
Input::AnalogDirection::RIGHT));
|
||||||
pad_state.l_stick_down.Assign(stick_l_y_f < -0.3f);
|
pad_state.l_stick_left.Assign(
|
||||||
|
analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus(
|
||||||
|
Input::AnalogDirection::LEFT));
|
||||||
|
pad_state.l_stick_up.Assign(
|
||||||
|
analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus(
|
||||||
|
Input::AnalogDirection::UP));
|
||||||
|
pad_state.l_stick_down.Assign(
|
||||||
|
analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus(
|
||||||
|
Input::AnalogDirection::DOWN));
|
||||||
|
|
||||||
pad_state.r_stick_right.Assign(stick_r_x_f > 0.3f);
|
pad_state.r_stick_up.Assign(analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)]
|
||||||
pad_state.r_stick_left.Assign(stick_r_x_f < -0.3f);
|
->GetAnalogDirectionStatus(Input::AnalogDirection::RIGHT));
|
||||||
pad_state.r_stick_up.Assign(stick_r_y_f > 0.3f);
|
pad_state.r_stick_left.Assign(analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)]
|
||||||
pad_state.r_stick_down.Assign(stick_r_y_f < -0.3f);
|
->GetAnalogDirectionStatus(Input::AnalogDirection::LEFT));
|
||||||
|
pad_state.r_stick_right.Assign(
|
||||||
|
analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)]
|
||||||
|
->GetAnalogDirectionStatus(Input::AnalogDirection::UP));
|
||||||
|
pad_state.r_stick_down.Assign(analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)]
|
||||||
|
->GetAnalogDirectionStatus(Input::AnalogDirection::DOWN));
|
||||||
|
|
||||||
pad_state.left_sl.Assign(button_state[SL - BUTTON_HID_BEGIN]->GetStatus());
|
pad_state.left_sl.Assign(button_state[SL - BUTTON_HID_BEGIN]->GetStatus());
|
||||||
pad_state.left_sr.Assign(button_state[SR - BUTTON_HID_BEGIN]->GetStatus());
|
pad_state.left_sr.Assign(button_state[SR - BUTTON_HID_BEGIN]->GetStatus());
|
||||||
|
|
|
@ -342,6 +342,22 @@ public:
|
||||||
return std::make_tuple<float, float>(0.0f, 0.0f);
|
return std::make_tuple<float, float>(0.0f, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GetAnalogDirectionStatus(Input::AnalogDirection direction) const override {
|
||||||
|
const auto [x, y] = GetStatus();
|
||||||
|
const float directional_deadzone = 0.4f;
|
||||||
|
switch (direction) {
|
||||||
|
case Input::AnalogDirection::RIGHT:
|
||||||
|
return x > directional_deadzone;
|
||||||
|
case Input::AnalogDirection::LEFT:
|
||||||
|
return x < -directional_deadzone;
|
||||||
|
case Input::AnalogDirection::UP:
|
||||||
|
return y > directional_deadzone;
|
||||||
|
case Input::AnalogDirection::DOWN:
|
||||||
|
return y < -directional_deadzone;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<SDLJoystick> joystick;
|
std::shared_ptr<SDLJoystick> joystick;
|
||||||
const int axis_x;
|
const int axis_x;
|
||||||
|
|
Loading…
Reference in a new issue