diff options
| author | Mai <mathew1800@gmail.com> | 2022-11-24 22:59:54 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-24 22:59:54 +0000 |
| commit | 032f54d403d9d122b748050d1f11c7fa7a83bbf4 (patch) | |
| tree | d560a0748ebbf515c8fab1555e2ffca7c89310ff /Source/Core | |
| parent | 7be4c90f67e86152bebedcfada9db73fb93468fb (diff) | |
| parent | db8f08b2bb668d41a315ccfc5ca88f8212bc7243 (diff) | |
Merge pull request #11302 from tellowkrinkle/SDL226
Update SDL to 2.26
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/InputCommon/ControllerInterface/SDL/SDL.cpp | 64 | ||||
| -rw-r--r-- | Source/Core/InputCommon/ControllerInterface/SDL/SDL.h | 6 |
2 files changed, 44 insertions, 26 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/SDL/SDL.cpp b/Source/Core/InputCommon/ControllerInterface/SDL/SDL.cpp index 327002c3a3..3f0f372fa4 100644 --- a/Source/Core/InputCommon/ControllerInterface/SDL/SDL.cpp +++ b/Source/Core/InputCommon/ControllerInterface/SDL/SDL.cpp @@ -294,6 +294,27 @@ void InputBackend::PopulateDevices() #endif } +struct SDLMotionAxis +{ + std::string_view name; + int index; + ControlState scale; +}; +using SDLMotionAxisList = std::array<SDLMotionAxis, 6>; + +// clang-format off +static constexpr SDLMotionAxisList SDL_AXES_ACCELEROMETER = {{ + {"Up", 1, 1}, {"Down", 1, -1}, + {"Left", 0, -1}, {"Right", 0, 1}, + {"Forward", 2, -1}, {"Backward", 2, 1}, +}}; +static constexpr SDLMotionAxisList SDL_AXES_GYRO = {{ + {"Pitch Up", 0, 1}, {"Pitch Down", 0, -1}, + {"Roll Left", 2, 1}, {"Roll Right", 2, -1}, + {"Yaw Left", 1, 1}, {"Yaw Right", 1, -1}, +}}; +// clang-format on + Joystick::Joystick(SDL_Joystick* const joystick, const int sdl_index) : m_joystick(joystick), m_name(StripWhitespace(GetJoystickName(sdl_index))) { @@ -398,29 +419,26 @@ Joystick::Joystick(SDL_Joystick* const joystick, const int sdl_index) m_controller = SDL_GameControllerOpen(sdl_index); if (m_controller) { - if (SDL_GameControllerSetSensorEnabled(m_controller, SDL_SENSOR_ACCEL, SDL_TRUE) == 0) - { - AddInput(new MotionInput("Accel Up", m_controller, SDL_SENSOR_ACCEL, 1, 1)); - AddInput(new MotionInput("Accel Down", m_controller, SDL_SENSOR_ACCEL, 1, -1)); - - AddInput(new MotionInput("Accel Left", m_controller, SDL_SENSOR_ACCEL, 0, -1)); - AddInput(new MotionInput("Accel Right", m_controller, SDL_SENSOR_ACCEL, 0, 1)); - - AddInput(new MotionInput("Accel Forward", m_controller, SDL_SENSOR_ACCEL, 2, -1)); - AddInput(new MotionInput("Accel Backward", m_controller, SDL_SENSOR_ACCEL, 2, 1)); - } - - if (SDL_GameControllerSetSensorEnabled(m_controller, SDL_SENSOR_GYRO, SDL_TRUE) == 0) - { - AddInput(new MotionInput("Gyro Pitch Up", m_controller, SDL_SENSOR_GYRO, 0, 1)); - AddInput(new MotionInput("Gyro Pitch Down", m_controller, SDL_SENSOR_GYRO, 0, -1)); - - AddInput(new MotionInput("Gyro Roll Left", m_controller, SDL_SENSOR_GYRO, 2, 1)); - AddInput(new MotionInput("Gyro Roll Right", m_controller, SDL_SENSOR_GYRO, 2, -1)); - - AddInput(new MotionInput("Gyro Yaw Left", m_controller, SDL_SENSOR_GYRO, 1, 1)); - AddInput(new MotionInput("Gyro Yaw Right", m_controller, SDL_SENSOR_GYRO, 1, -1)); - } + auto AddSensor = [this](SDL_SensorType type, std::string_view name, + const SDLMotionAxisList& axes) { + if (SDL_GameControllerSetSensorEnabled(m_controller, type, SDL_TRUE) == 0) + { + for (const SDLMotionAxis& axis : axes) + { + AddInput(new MotionInput(fmt::format("{} {}", name, axis.name), m_controller, type, + axis.index, axis.scale)); + } + } + }; + + AddSensor(SDL_SENSOR_ACCEL, "Accel", SDL_AXES_ACCELEROMETER); + AddSensor(SDL_SENSOR_GYRO, "Gyro", SDL_AXES_GYRO); +#if SDL_VERSION_ATLEAST(2, 26, 0) + AddSensor(SDL_SENSOR_ACCEL_L, "Accel L", SDL_AXES_ACCELEROMETER); + AddSensor(SDL_SENSOR_GYRO_L, "Gyro L", SDL_AXES_GYRO); + AddSensor(SDL_SENSOR_ACCEL_R, "Accel R", SDL_AXES_ACCELEROMETER); + AddSensor(SDL_SENSOR_GYRO_R, "Gyro R", SDL_AXES_GYRO); +#endif } } #endif diff --git a/Source/Core/InputCommon/ControllerInterface/SDL/SDL.h b/Source/Core/InputCommon/ControllerInterface/SDL/SDL.h index 1b37a22b9e..74e66f05c1 100644 --- a/Source/Core/InputCommon/ControllerInterface/SDL/SDL.h +++ b/Source/Core/InputCommon/ControllerInterface/SDL/SDL.h @@ -161,16 +161,16 @@ private: class MotionInput : public Input { public: - MotionInput(const char* name, SDL_GameController* gc, SDL_SensorType type, int index, + MotionInput(std::string name, SDL_GameController* gc, SDL_SensorType type, int index, ControlState scale) - : m_name(name), m_gc(gc), m_type(type), m_index(index), m_scale(scale){}; + : m_name(std::move(name)), m_gc(gc), m_type(type), m_index(index), m_scale(scale){}; std::string GetName() const override { return m_name; }; bool IsDetectable() const override { return false; }; ControlState GetState() const override; private: - const char* m_name; + std::string m_name; SDL_GameController* const m_gc; SDL_SensorType const m_type; |
