diff options
Diffstat (limited to 'src/input_common')
-rw-r--r-- | src/input_common/drivers/mouse.cpp | 35 | ||||
-rw-r--r-- | src/input_common/drivers/mouse.h | 2 | ||||
-rw-r--r-- | src/input_common/drivers/sdl_driver.cpp | 12 | ||||
-rw-r--r-- | src/input_common/drivers/sdl_driver.h | 2 | ||||
-rw-r--r-- | src/input_common/drivers/tas_input.cpp | 7 | ||||
-rw-r--r-- | src/input_common/input_engine.cpp | 2 | ||||
-rw-r--r-- | src/input_common/input_mapping.cpp | 13 |
7 files changed, 64 insertions, 9 deletions
diff --git a/src/input_common/drivers/mouse.cpp b/src/input_common/drivers/mouse.cpp index aa69216c8..d8ae7f0c1 100644 --- a/src/input_common/drivers/mouse.cpp +++ b/src/input_common/drivers/mouse.cpp @@ -16,6 +16,7 @@ constexpr int mouse_axis_x = 0; constexpr int mouse_axis_y = 1; constexpr int wheel_axis_x = 2; constexpr int wheel_axis_y = 3; +constexpr int motion_wheel_y = 4; constexpr int touch_axis_x = 10; constexpr int touch_axis_y = 11; constexpr PadIdentifier identifier = { @@ -30,8 +31,9 @@ Mouse::Mouse(std::string input_engine_) : InputEngine(std::move(input_engine_)) PreSetAxis(identifier, mouse_axis_y); PreSetAxis(identifier, wheel_axis_x); PreSetAxis(identifier, wheel_axis_y); + PreSetAxis(identifier, motion_wheel_y); PreSetAxis(identifier, touch_axis_x); - PreSetAxis(identifier, touch_axis_x); + PreSetAxis(identifier, touch_axis_y); update_thread = std::jthread([this](std::stop_token stop_token) { UpdateThread(stop_token); }); } @@ -48,6 +50,8 @@ void Mouse::UpdateThread(std::stop_token stop_token) { SetAxis(identifier, mouse_axis_y, -last_mouse_change.y * sensitivity); } + SetAxis(identifier, motion_wheel_y, 0.0f); + if (mouse_panning_timout++ > 20) { StopPanning(); } @@ -136,6 +140,7 @@ void Mouse::MouseWheelChange(int x, int y) { wheel_position.y += y; SetAxis(identifier, wheel_axis_x, static_cast<f32>(wheel_position.x)); SetAxis(identifier, wheel_axis_y, static_cast<f32>(wheel_position.y)); + SetAxis(identifier, motion_wheel_y, static_cast<f32>(y) / 100.0f); } void Mouse::ReleaseAllButtons() { @@ -171,13 +176,39 @@ AnalogMapping Mouse::GetAnalogMappingForDevice( return mapping; } +Common::Input::ButtonNames Mouse::GetUIButtonName(const Common::ParamPackage& params) const { + const auto button = static_cast<MouseButton>(params.Get("button", 0)); + switch (button) { + case MouseButton::Left: + return Common::Input::ButtonNames::ButtonLeft; + case MouseButton::Right: + return Common::Input::ButtonNames::ButtonRight; + case MouseButton::Wheel: + return Common::Input::ButtonNames::ButtonMouseWheel; + case MouseButton::Backward: + return Common::Input::ButtonNames::ButtonBackward; + case MouseButton::Forward: + return Common::Input::ButtonNames::ButtonForward; + case MouseButton::Task: + return Common::Input::ButtonNames::ButtonTask; + case MouseButton::Extra: + return Common::Input::ButtonNames::ButtonExtra; + case MouseButton::Undefined: + default: + return Common::Input::ButtonNames::Undefined; + } +} + Common::Input::ButtonNames Mouse::GetUIName(const Common::ParamPackage& params) const { if (params.Has("button")) { - return Common::Input::ButtonNames::Value; + return GetUIButtonName(params); } if (params.Has("axis")) { return Common::Input::ButtonNames::Value; } + if (params.Has("axis_x") && params.Has("axis_y") && params.Has("axis_z")) { + return Common::Input::ButtonNames::Engine; + } return Common::Input::ButtonNames::Invalid; } diff --git a/src/input_common/drivers/mouse.h b/src/input_common/drivers/mouse.h index 040446178..c5833b8ed 100644 --- a/src/input_common/drivers/mouse.h +++ b/src/input_common/drivers/mouse.h @@ -69,6 +69,8 @@ private: void UpdateThread(std::stop_token stop_token); void StopPanning(); + Common::Input::ButtonNames GetUIButtonName(const Common::ParamPackage& params) const; + Common::Vec2<int> mouse_origin; Common::Vec2<int> last_mouse_position; Common::Vec2<float> last_mouse_change; diff --git a/src/input_common/drivers/sdl_driver.cpp b/src/input_common/drivers/sdl_driver.cpp index 0cda9df62..ed6281772 100644 --- a/src/input_common/drivers/sdl_driver.cpp +++ b/src/input_common/drivers/sdl_driver.cpp @@ -198,9 +198,15 @@ public: if (sdl_controller) { switch (SDL_GameControllerGetType(sdl_controller.get())) { case SDL_CONTROLLER_TYPE_XBOX360: - return "XBox 360 Controller"; + return "Xbox 360 Controller"; case SDL_CONTROLLER_TYPE_XBOXONE: - return "XBox One Controller"; + return "Xbox One Controller"; + case SDL_CONTROLLER_TYPE_PS3: + return "DualShock 3 Controller"; + case SDL_CONTROLLER_TYPE_PS4: + return "DualShock 4 Controller"; + case SDL_CONTROLLER_TYPE_PS5: + return "DualSense Controller"; default: break; } @@ -663,6 +669,7 @@ ButtonBindings SDLDriver::GetDefaultButtonBinding() const { {Settings::NativeButton::SL, SDL_CONTROLLER_BUTTON_LEFTSHOULDER}, {Settings::NativeButton::SR, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER}, {Settings::NativeButton::Home, SDL_CONTROLLER_BUTTON_GUIDE}, + {Settings::NativeButton::Screenshot, SDL_CONTROLLER_BUTTON_MISC1}, }; } @@ -699,6 +706,7 @@ ButtonBindings SDLDriver::GetNintendoButtonBinding( {Settings::NativeButton::SL, sl_button}, {Settings::NativeButton::SR, sr_button}, {Settings::NativeButton::Home, SDL_CONTROLLER_BUTTON_GUIDE}, + {Settings::NativeButton::Screenshot, SDL_CONTROLLER_BUTTON_MISC1}, }; } diff --git a/src/input_common/drivers/sdl_driver.h b/src/input_common/drivers/sdl_driver.h index e9a5d2e26..4cde3606f 100644 --- a/src/input_common/drivers/sdl_driver.h +++ b/src/input_common/drivers/sdl_driver.h @@ -24,7 +24,7 @@ namespace InputCommon { class SDLJoystick; using ButtonBindings = - std::array<std::pair<Settings::NativeButton::Values, SDL_GameControllerButton>, 17>; + std::array<std::pair<Settings::NativeButton::Values, SDL_GameControllerButton>, 18>; using ZButtonBindings = std::array<std::pair<Settings::NativeButton::Values, SDL_GameControllerAxis>, 2>; diff --git a/src/input_common/drivers/tas_input.cpp b/src/input_common/drivers/tas_input.cpp index d78228b50..944e141bf 100644 --- a/src/input_common/drivers/tas_input.cpp +++ b/src/input_common/drivers/tas_input.cpp @@ -23,7 +23,7 @@ enum class Tas::TasAxis : u8 { }; // Supported keywords and buttons from a TAS file -constexpr std::array<std::pair<std::string_view, TasButton>, 20> text_to_tas_button = { +constexpr std::array<std::pair<std::string_view, TasButton>, 18> text_to_tas_button = { std::pair{"KEY_A", TasButton::BUTTON_A}, {"KEY_B", TasButton::BUTTON_B}, {"KEY_X", TasButton::BUTTON_X}, @@ -40,8 +40,9 @@ constexpr std::array<std::pair<std::string_view, TasButton>, 20> text_to_tas_but {"KEY_DDOWN", TasButton::BUTTON_DOWN}, {"KEY_SL", TasButton::BUTTON_SL}, {"KEY_SR", TasButton::BUTTON_SR}, - {"KEY_CAPTURE", TasButton::BUTTON_CAPTURE}, - {"KEY_HOME", TasButton::BUTTON_HOME}, + // These buttons are disabled to avoid TAS input from activating hotkeys + // {"KEY_CAPTURE", TasButton::BUTTON_CAPTURE}, + // {"KEY_HOME", TasButton::BUTTON_HOME}, {"KEY_ZL", TasButton::TRIGGER_ZL}, {"KEY_ZR", TasButton::TRIGGER_ZR}, }; diff --git a/src/input_common/input_engine.cpp b/src/input_common/input_engine.cpp index b57330e51..0508b408d 100644 --- a/src/input_common/input_engine.cpp +++ b/src/input_common/input_engine.cpp @@ -173,7 +173,7 @@ void InputEngine::ResetButtonState() { SetButton(controller.first, button.first, false); } for (const auto& button : controller.second.hat_buttons) { - SetHatButton(controller.first, button.first, false); + SetHatButton(controller.first, button.first, 0); } } } diff --git a/src/input_common/input_mapping.cpp b/src/input_common/input_mapping.cpp index 6e0024b2d..475257f42 100644 --- a/src/input_common/input_mapping.cpp +++ b/src/input_common/input_mapping.cpp @@ -143,6 +143,19 @@ void MappingFactory::RegisterMotion(const MappingData& data) { } new_input.Set("port", static_cast<int>(data.pad.port)); new_input.Set("pad", static_cast<int>(data.pad.pad)); + + // If engine is mouse map the mouse position as 3 axis motion + if (data.engine == "mouse") { + new_input.Set("axis_x", 1); + new_input.Set("invert_x", "-"); + new_input.Set("axis_y", 0); + new_input.Set("axis_z", 4); + new_input.Set("range", 1.0f); + new_input.Set("deadzone", 0.0f); + input_queue.Push(new_input); + return; + } + switch (data.type) { case EngineInputType::Button: case EngineInputType::HatButton: |