diff options
Diffstat (limited to 'src/input_common/main.cpp')
| -rw-r--r-- | src/input_common/main.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp index ff23230f0..18d7d8817 100644 --- a/src/input_common/main.cpp +++ b/src/input_common/main.cpp | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #include <memory> | 5 | #include <memory> |
| 6 | #include <thread> | 6 | #include <thread> |
| 7 | #include "common/param_package.h" | 7 | #include "common/param_package.h" |
| 8 | #include "common/settings.h" | ||
| 8 | #include "input_common/analog_from_button.h" | 9 | #include "input_common/analog_from_button.h" |
| 9 | #include "input_common/gcadapter/gc_adapter.h" | 10 | #include "input_common/gcadapter/gc_adapter.h" |
| 10 | #include "input_common/gcadapter/gc_poller.h" | 11 | #include "input_common/gcadapter/gc_poller.h" |
| @@ -13,6 +14,8 @@ | |||
| 13 | #include "input_common/motion_from_button.h" | 14 | #include "input_common/motion_from_button.h" |
| 14 | #include "input_common/mouse/mouse_input.h" | 15 | #include "input_common/mouse/mouse_input.h" |
| 15 | #include "input_common/mouse/mouse_poller.h" | 16 | #include "input_common/mouse/mouse_poller.h" |
| 17 | #include "input_common/tas/tas_input.h" | ||
| 18 | #include "input_common/tas/tas_poller.h" | ||
| 16 | #include "input_common/touch_from_button.h" | 19 | #include "input_common/touch_from_button.h" |
| 17 | #include "input_common/udp/client.h" | 20 | #include "input_common/udp/client.h" |
| 18 | #include "input_common/udp/udp.h" | 21 | #include "input_common/udp/udp.h" |
| @@ -60,6 +63,12 @@ struct InputSubsystem::Impl { | |||
| 60 | Input::RegisterFactory<Input::MotionDevice>("mouse", mousemotion); | 63 | Input::RegisterFactory<Input::MotionDevice>("mouse", mousemotion); |
| 61 | mousetouch = std::make_shared<MouseTouchFactory>(mouse); | 64 | mousetouch = std::make_shared<MouseTouchFactory>(mouse); |
| 62 | Input::RegisterFactory<Input::TouchDevice>("mouse", mousetouch); | 65 | Input::RegisterFactory<Input::TouchDevice>("mouse", mousetouch); |
| 66 | |||
| 67 | tas = std::make_shared<TasInput::Tas>(); | ||
| 68 | tasbuttons = std::make_shared<TasButtonFactory>(tas); | ||
| 69 | Input::RegisterFactory<Input::ButtonDevice>("tas", tasbuttons); | ||
| 70 | tasanalog = std::make_shared<TasAnalogFactory>(tas); | ||
| 71 | Input::RegisterFactory<Input::AnalogDevice>("tas", tasanalog); | ||
| 63 | } | 72 | } |
| 64 | 73 | ||
| 65 | void Shutdown() { | 74 | void Shutdown() { |
| @@ -94,6 +103,12 @@ struct InputSubsystem::Impl { | |||
| 94 | mouseanalog.reset(); | 103 | mouseanalog.reset(); |
| 95 | mousemotion.reset(); | 104 | mousemotion.reset(); |
| 96 | mousetouch.reset(); | 105 | mousetouch.reset(); |
| 106 | |||
| 107 | Input::UnregisterFactory<Input::ButtonDevice>("tas"); | ||
| 108 | Input::UnregisterFactory<Input::AnalogDevice>("tas"); | ||
| 109 | |||
| 110 | tasbuttons.reset(); | ||
| 111 | tasanalog.reset(); | ||
| 97 | } | 112 | } |
| 98 | 113 | ||
| 99 | [[nodiscard]] std::vector<Common::ParamPackage> GetInputDevices() const { | 114 | [[nodiscard]] std::vector<Common::ParamPackage> GetInputDevices() const { |
| @@ -101,6 +116,10 @@ struct InputSubsystem::Impl { | |||
| 101 | Common::ParamPackage{{"display", "Any"}, {"class", "any"}}, | 116 | Common::ParamPackage{{"display", "Any"}, {"class", "any"}}, |
| 102 | Common::ParamPackage{{"display", "Keyboard/Mouse"}, {"class", "keyboard"}}, | 117 | Common::ParamPackage{{"display", "Keyboard/Mouse"}, {"class", "keyboard"}}, |
| 103 | }; | 118 | }; |
| 119 | if (Settings::values.tas_enable) { | ||
| 120 | devices.emplace_back( | ||
| 121 | Common::ParamPackage{{"display", "TAS Controller"}, {"class", "tas"}}); | ||
| 122 | } | ||
| 104 | #ifdef HAVE_SDL2 | 123 | #ifdef HAVE_SDL2 |
| 105 | auto sdl_devices = sdl->GetInputDevices(); | 124 | auto sdl_devices = sdl->GetInputDevices(); |
| 106 | devices.insert(devices.end(), sdl_devices.begin(), sdl_devices.end()); | 125 | devices.insert(devices.end(), sdl_devices.begin(), sdl_devices.end()); |
| @@ -120,6 +139,9 @@ struct InputSubsystem::Impl { | |||
| 120 | if (params.Get("class", "") == "gcpad") { | 139 | if (params.Get("class", "") == "gcpad") { |
| 121 | return gcadapter->GetAnalogMappingForDevice(params); | 140 | return gcadapter->GetAnalogMappingForDevice(params); |
| 122 | } | 141 | } |
| 142 | if (params.Get("class", "") == "tas") { | ||
| 143 | return tas->GetAnalogMappingForDevice(params); | ||
| 144 | } | ||
| 123 | #ifdef HAVE_SDL2 | 145 | #ifdef HAVE_SDL2 |
| 124 | if (params.Get("class", "") == "sdl") { | 146 | if (params.Get("class", "") == "sdl") { |
| 125 | return sdl->GetAnalogMappingForDevice(params); | 147 | return sdl->GetAnalogMappingForDevice(params); |
| @@ -136,6 +158,9 @@ struct InputSubsystem::Impl { | |||
| 136 | if (params.Get("class", "") == "gcpad") { | 158 | if (params.Get("class", "") == "gcpad") { |
| 137 | return gcadapter->GetButtonMappingForDevice(params); | 159 | return gcadapter->GetButtonMappingForDevice(params); |
| 138 | } | 160 | } |
| 161 | if (params.Get("class", "") == "tas") { | ||
| 162 | return tas->GetButtonMappingForDevice(params); | ||
| 163 | } | ||
| 139 | #ifdef HAVE_SDL2 | 164 | #ifdef HAVE_SDL2 |
| 140 | if (params.Get("class", "") == "sdl") { | 165 | if (params.Get("class", "") == "sdl") { |
| 141 | return sdl->GetButtonMappingForDevice(params); | 166 | return sdl->GetButtonMappingForDevice(params); |
| @@ -174,9 +199,12 @@ struct InputSubsystem::Impl { | |||
| 174 | std::shared_ptr<MouseAnalogFactory> mouseanalog; | 199 | std::shared_ptr<MouseAnalogFactory> mouseanalog; |
| 175 | std::shared_ptr<MouseMotionFactory> mousemotion; | 200 | std::shared_ptr<MouseMotionFactory> mousemotion; |
| 176 | std::shared_ptr<MouseTouchFactory> mousetouch; | 201 | std::shared_ptr<MouseTouchFactory> mousetouch; |
| 202 | std::shared_ptr<TasButtonFactory> tasbuttons; | ||
| 203 | std::shared_ptr<TasAnalogFactory> tasanalog; | ||
| 177 | std::shared_ptr<CemuhookUDP::Client> udp; | 204 | std::shared_ptr<CemuhookUDP::Client> udp; |
| 178 | std::shared_ptr<GCAdapter::Adapter> gcadapter; | 205 | std::shared_ptr<GCAdapter::Adapter> gcadapter; |
| 179 | std::shared_ptr<MouseInput::Mouse> mouse; | 206 | std::shared_ptr<MouseInput::Mouse> mouse; |
| 207 | std::shared_ptr<TasInput::Tas> tas; | ||
| 180 | }; | 208 | }; |
| 181 | 209 | ||
| 182 | InputSubsystem::InputSubsystem() : impl{std::make_unique<Impl>()} {} | 210 | InputSubsystem::InputSubsystem() : impl{std::make_unique<Impl>()} {} |
| @@ -207,6 +235,14 @@ const MouseInput::Mouse* InputSubsystem::GetMouse() const { | |||
| 207 | return impl->mouse.get(); | 235 | return impl->mouse.get(); |
| 208 | } | 236 | } |
| 209 | 237 | ||
| 238 | TasInput::Tas* InputSubsystem::GetTas() { | ||
| 239 | return impl->tas.get(); | ||
| 240 | } | ||
| 241 | |||
| 242 | const TasInput::Tas* InputSubsystem::GetTas() const { | ||
| 243 | return impl->tas.get(); | ||
| 244 | } | ||
| 245 | |||
| 210 | std::vector<Common::ParamPackage> InputSubsystem::GetInputDevices() const { | 246 | std::vector<Common::ParamPackage> InputSubsystem::GetInputDevices() const { |
| 211 | return impl->GetInputDevices(); | 247 | return impl->GetInputDevices(); |
| 212 | } | 248 | } |
| @@ -287,6 +323,22 @@ const MouseTouchFactory* InputSubsystem::GetMouseTouch() const { | |||
| 287 | return impl->mousetouch.get(); | 323 | return impl->mousetouch.get(); |
| 288 | } | 324 | } |
| 289 | 325 | ||
| 326 | TasButtonFactory* InputSubsystem::GetTasButtons() { | ||
| 327 | return impl->tasbuttons.get(); | ||
| 328 | } | ||
| 329 | |||
| 330 | const TasButtonFactory* InputSubsystem::GetTasButtons() const { | ||
| 331 | return impl->tasbuttons.get(); | ||
| 332 | } | ||
| 333 | |||
| 334 | TasAnalogFactory* InputSubsystem::GetTasAnalogs() { | ||
| 335 | return impl->tasanalog.get(); | ||
| 336 | } | ||
| 337 | |||
| 338 | const TasAnalogFactory* InputSubsystem::GetTasAnalogs() const { | ||
| 339 | return impl->tasanalog.get(); | ||
| 340 | } | ||
| 341 | |||
| 290 | void InputSubsystem::ReloadInputDevices() { | 342 | void InputSubsystem::ReloadInputDevices() { |
| 291 | if (!impl->udp) { | 343 | if (!impl->udp) { |
| 292 | return; | 344 | return; |