diff options
| author | 2022-11-28 09:19:01 -0500 | |
|---|---|---|
| committer | 2022-11-28 10:00:37 -0500 | |
| commit | 2ec7d0b5fda0fe6cbafcc235e3d8cc91b0dc81e0 (patch) | |
| tree | c61fdcf120b96a0487e24f16c6f48b5fb44fafb5 /src/input_common/main.cpp | |
| parent | common/input: Pass ParamPackage by const reference in CreateDevice (diff) | |
| download | yuzu-2ec7d0b5fda0fe6cbafcc235e3d8cc91b0dc81e0.tar.gz yuzu-2ec7d0b5fda0fe6cbafcc235e3d8cc91b0dc81e0.tar.xz yuzu-2ec7d0b5fda0fe6cbafcc235e3d8cc91b0dc81e0.zip | |
common/input: Add helpers functions for creating input and output devices
Avoids the redundancy of needing to explictly specify the common
namespace and the type.
Diffstat (limited to 'src/input_common/main.cpp')
| -rw-r--r-- | src/input_common/main.cpp | 102 |
1 files changed, 43 insertions, 59 deletions
diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp index 76df133f3..baeed2e02 100644 --- a/src/input_common/main.cpp +++ b/src/input_common/main.cpp | |||
| @@ -33,129 +33,113 @@ struct InputSubsystem::Impl { | |||
| 33 | keyboard->SetMappingCallback(mapping_callback); | 33 | keyboard->SetMappingCallback(mapping_callback); |
| 34 | keyboard_factory = std::make_shared<InputFactory>(keyboard); | 34 | keyboard_factory = std::make_shared<InputFactory>(keyboard); |
| 35 | keyboard_output_factory = std::make_shared<OutputFactory>(keyboard); | 35 | keyboard_output_factory = std::make_shared<OutputFactory>(keyboard); |
| 36 | Common::Input::RegisterFactory<Common::Input::InputDevice>(keyboard->GetEngineName(), | 36 | Common::Input::RegisterInputFactory(keyboard->GetEngineName(), keyboard_factory); |
| 37 | keyboard_factory); | 37 | Common::Input::RegisterOutputFactory(keyboard->GetEngineName(), keyboard_output_factory); |
| 38 | Common::Input::RegisterFactory<Common::Input::OutputDevice>(keyboard->GetEngineName(), | ||
| 39 | keyboard_output_factory); | ||
| 40 | 38 | ||
| 41 | mouse = std::make_shared<Mouse>("mouse"); | 39 | mouse = std::make_shared<Mouse>("mouse"); |
| 42 | mouse->SetMappingCallback(mapping_callback); | 40 | mouse->SetMappingCallback(mapping_callback); |
| 43 | mouse_factory = std::make_shared<InputFactory>(mouse); | 41 | mouse_factory = std::make_shared<InputFactory>(mouse); |
| 44 | mouse_output_factory = std::make_shared<OutputFactory>(mouse); | 42 | mouse_output_factory = std::make_shared<OutputFactory>(mouse); |
| 45 | Common::Input::RegisterFactory<Common::Input::InputDevice>(mouse->GetEngineName(), | 43 | Common::Input::RegisterInputFactory(mouse->GetEngineName(), mouse_factory); |
| 46 | mouse_factory); | 44 | Common::Input::RegisterOutputFactory(mouse->GetEngineName(), mouse_output_factory); |
| 47 | Common::Input::RegisterFactory<Common::Input::OutputDevice>(mouse->GetEngineName(), | ||
| 48 | mouse_output_factory); | ||
| 49 | 45 | ||
| 50 | touch_screen = std::make_shared<TouchScreen>("touch"); | 46 | touch_screen = std::make_shared<TouchScreen>("touch"); |
| 51 | touch_screen_factory = std::make_shared<InputFactory>(touch_screen); | 47 | touch_screen_factory = std::make_shared<InputFactory>(touch_screen); |
| 52 | Common::Input::RegisterFactory<Common::Input::InputDevice>(touch_screen->GetEngineName(), | 48 | Common::Input::RegisterInputFactory(touch_screen->GetEngineName(), touch_screen_factory); |
| 53 | touch_screen_factory); | ||
| 54 | 49 | ||
| 55 | gcadapter = std::make_shared<GCAdapter>("gcpad"); | 50 | gcadapter = std::make_shared<GCAdapter>("gcpad"); |
| 56 | gcadapter->SetMappingCallback(mapping_callback); | 51 | gcadapter->SetMappingCallback(mapping_callback); |
| 57 | gcadapter_input_factory = std::make_shared<InputFactory>(gcadapter); | 52 | gcadapter_input_factory = std::make_shared<InputFactory>(gcadapter); |
| 58 | gcadapter_output_factory = std::make_shared<OutputFactory>(gcadapter); | 53 | gcadapter_output_factory = std::make_shared<OutputFactory>(gcadapter); |
| 59 | Common::Input::RegisterFactory<Common::Input::InputDevice>(gcadapter->GetEngineName(), | 54 | Common::Input::RegisterInputFactory(gcadapter->GetEngineName(), gcadapter_input_factory); |
| 60 | gcadapter_input_factory); | 55 | Common::Input::RegisterOutputFactory(gcadapter->GetEngineName(), gcadapter_output_factory); |
| 61 | Common::Input::RegisterFactory<Common::Input::OutputDevice>(gcadapter->GetEngineName(), | ||
| 62 | gcadapter_output_factory); | ||
| 63 | 56 | ||
| 64 | udp_client = std::make_shared<CemuhookUDP::UDPClient>("cemuhookudp"); | 57 | udp_client = std::make_shared<CemuhookUDP::UDPClient>("cemuhookudp"); |
| 65 | udp_client->SetMappingCallback(mapping_callback); | 58 | udp_client->SetMappingCallback(mapping_callback); |
| 66 | udp_client_input_factory = std::make_shared<InputFactory>(udp_client); | 59 | udp_client_input_factory = std::make_shared<InputFactory>(udp_client); |
| 67 | udp_client_output_factory = std::make_shared<OutputFactory>(udp_client); | 60 | udp_client_output_factory = std::make_shared<OutputFactory>(udp_client); |
| 68 | Common::Input::RegisterFactory<Common::Input::InputDevice>(udp_client->GetEngineName(), | 61 | Common::Input::RegisterInputFactory(udp_client->GetEngineName(), udp_client_input_factory); |
| 69 | udp_client_input_factory); | 62 | Common::Input::RegisterOutputFactory(udp_client->GetEngineName(), |
| 70 | Common::Input::RegisterFactory<Common::Input::OutputDevice>(udp_client->GetEngineName(), | 63 | udp_client_output_factory); |
| 71 | udp_client_output_factory); | ||
| 72 | 64 | ||
| 73 | tas_input = std::make_shared<TasInput::Tas>("tas"); | 65 | tas_input = std::make_shared<TasInput::Tas>("tas"); |
| 74 | tas_input->SetMappingCallback(mapping_callback); | 66 | tas_input->SetMappingCallback(mapping_callback); |
| 75 | tas_input_factory = std::make_shared<InputFactory>(tas_input); | 67 | tas_input_factory = std::make_shared<InputFactory>(tas_input); |
| 76 | tas_output_factory = std::make_shared<OutputFactory>(tas_input); | 68 | tas_output_factory = std::make_shared<OutputFactory>(tas_input); |
| 77 | Common::Input::RegisterFactory<Common::Input::InputDevice>(tas_input->GetEngineName(), | 69 | Common::Input::RegisterInputFactory(tas_input->GetEngineName(), tas_input_factory); |
| 78 | tas_input_factory); | 70 | Common::Input::RegisterOutputFactory(tas_input->GetEngineName(), tas_output_factory); |
| 79 | Common::Input::RegisterFactory<Common::Input::OutputDevice>(tas_input->GetEngineName(), | ||
| 80 | tas_output_factory); | ||
| 81 | 71 | ||
| 82 | camera = std::make_shared<Camera>("camera"); | 72 | camera = std::make_shared<Camera>("camera"); |
| 83 | camera->SetMappingCallback(mapping_callback); | 73 | camera->SetMappingCallback(mapping_callback); |
| 84 | camera_input_factory = std::make_shared<InputFactory>(camera); | 74 | camera_input_factory = std::make_shared<InputFactory>(camera); |
| 85 | camera_output_factory = std::make_shared<OutputFactory>(camera); | 75 | camera_output_factory = std::make_shared<OutputFactory>(camera); |
| 86 | Common::Input::RegisterFactory<Common::Input::InputDevice>(camera->GetEngineName(), | 76 | Common::Input::RegisterInputFactory(camera->GetEngineName(), camera_input_factory); |
| 87 | camera_input_factory); | 77 | Common::Input::RegisterOutputFactory(camera->GetEngineName(), camera_output_factory); |
| 88 | Common::Input::RegisterFactory<Common::Input::OutputDevice>(camera->GetEngineName(), | ||
| 89 | camera_output_factory); | ||
| 90 | 78 | ||
| 91 | virtual_amiibo = std::make_shared<VirtualAmiibo>("virtual_amiibo"); | 79 | virtual_amiibo = std::make_shared<VirtualAmiibo>("virtual_amiibo"); |
| 92 | virtual_amiibo->SetMappingCallback(mapping_callback); | 80 | virtual_amiibo->SetMappingCallback(mapping_callback); |
| 93 | virtual_amiibo_input_factory = std::make_shared<InputFactory>(virtual_amiibo); | 81 | virtual_amiibo_input_factory = std::make_shared<InputFactory>(virtual_amiibo); |
| 94 | virtual_amiibo_output_factory = std::make_shared<OutputFactory>(virtual_amiibo); | 82 | virtual_amiibo_output_factory = std::make_shared<OutputFactory>(virtual_amiibo); |
| 95 | Common::Input::RegisterFactory<Common::Input::InputDevice>(virtual_amiibo->GetEngineName(), | 83 | Common::Input::RegisterInputFactory(virtual_amiibo->GetEngineName(), |
| 96 | virtual_amiibo_input_factory); | 84 | virtual_amiibo_input_factory); |
| 97 | Common::Input::RegisterFactory<Common::Input::OutputDevice>(virtual_amiibo->GetEngineName(), | 85 | Common::Input::RegisterOutputFactory(virtual_amiibo->GetEngineName(), |
| 98 | virtual_amiibo_output_factory); | 86 | virtual_amiibo_output_factory); |
| 99 | 87 | ||
| 100 | #ifdef HAVE_SDL2 | 88 | #ifdef HAVE_SDL2 |
| 101 | sdl = std::make_shared<SDLDriver>("sdl"); | 89 | sdl = std::make_shared<SDLDriver>("sdl"); |
| 102 | sdl->SetMappingCallback(mapping_callback); | 90 | sdl->SetMappingCallback(mapping_callback); |
| 103 | sdl_input_factory = std::make_shared<InputFactory>(sdl); | 91 | sdl_input_factory = std::make_shared<InputFactory>(sdl); |
| 104 | sdl_output_factory = std::make_shared<OutputFactory>(sdl); | 92 | sdl_output_factory = std::make_shared<OutputFactory>(sdl); |
| 105 | Common::Input::RegisterFactory<Common::Input::InputDevice>(sdl->GetEngineName(), | 93 | Common::Input::RegisterInputFactory(sdl->GetEngineName(), sdl_input_factory); |
| 106 | sdl_input_factory); | 94 | Common::Input::RegisterOutputFactory(sdl->GetEngineName(), sdl_output_factory); |
| 107 | Common::Input::RegisterFactory<Common::Input::OutputDevice>(sdl->GetEngineName(), | ||
| 108 | sdl_output_factory); | ||
| 109 | #endif | 95 | #endif |
| 110 | 96 | ||
| 111 | Common::Input::RegisterFactory<Common::Input::InputDevice>( | 97 | Common::Input::RegisterInputFactory("touch_from_button", |
| 112 | "touch_from_button", std::make_shared<TouchFromButton>()); | 98 | std::make_shared<TouchFromButton>()); |
| 113 | Common::Input::RegisterFactory<Common::Input::InputDevice>( | 99 | Common::Input::RegisterInputFactory("analog_from_button", |
| 114 | "analog_from_button", std::make_shared<StickFromButton>()); | 100 | std::make_shared<StickFromButton>()); |
| 115 | } | 101 | } |
| 116 | 102 | ||
| 117 | void Shutdown() { | 103 | void Shutdown() { |
| 118 | Common::Input::UnregisterFactory<Common::Input::InputDevice>(keyboard->GetEngineName()); | 104 | Common::Input::UnregisterInputFactory(keyboard->GetEngineName()); |
| 119 | Common::Input::UnregisterFactory<Common::Input::OutputDevice>(keyboard->GetEngineName()); | 105 | Common::Input::UnregisterOutputFactory(keyboard->GetEngineName()); |
| 120 | keyboard.reset(); | 106 | keyboard.reset(); |
| 121 | 107 | ||
| 122 | Common::Input::UnregisterFactory<Common::Input::InputDevice>(mouse->GetEngineName()); | 108 | Common::Input::UnregisterInputFactory(mouse->GetEngineName()); |
| 123 | Common::Input::UnregisterFactory<Common::Input::OutputDevice>(mouse->GetEngineName()); | 109 | Common::Input::UnregisterOutputFactory(mouse->GetEngineName()); |
| 124 | mouse.reset(); | 110 | mouse.reset(); |
| 125 | 111 | ||
| 126 | Common::Input::UnregisterFactory<Common::Input::InputDevice>(touch_screen->GetEngineName()); | 112 | Common::Input::UnregisterInputFactory(touch_screen->GetEngineName()); |
| 127 | touch_screen.reset(); | 113 | touch_screen.reset(); |
| 128 | 114 | ||
| 129 | Common::Input::UnregisterFactory<Common::Input::InputDevice>(gcadapter->GetEngineName()); | 115 | Common::Input::UnregisterInputFactory(gcadapter->GetEngineName()); |
| 130 | Common::Input::UnregisterFactory<Common::Input::OutputDevice>(gcadapter->GetEngineName()); | 116 | Common::Input::UnregisterOutputFactory(gcadapter->GetEngineName()); |
| 131 | gcadapter.reset(); | 117 | gcadapter.reset(); |
| 132 | 118 | ||
| 133 | Common::Input::UnregisterFactory<Common::Input::InputDevice>(udp_client->GetEngineName()); | 119 | Common::Input::UnregisterInputFactory(udp_client->GetEngineName()); |
| 134 | Common::Input::UnregisterFactory<Common::Input::OutputDevice>(udp_client->GetEngineName()); | 120 | Common::Input::UnregisterOutputFactory(udp_client->GetEngineName()); |
| 135 | udp_client.reset(); | 121 | udp_client.reset(); |
| 136 | 122 | ||
| 137 | Common::Input::UnregisterFactory<Common::Input::InputDevice>(tas_input->GetEngineName()); | 123 | Common::Input::UnregisterInputFactory(tas_input->GetEngineName()); |
| 138 | Common::Input::UnregisterFactory<Common::Input::OutputDevice>(tas_input->GetEngineName()); | 124 | Common::Input::UnregisterOutputFactory(tas_input->GetEngineName()); |
| 139 | tas_input.reset(); | 125 | tas_input.reset(); |
| 140 | 126 | ||
| 141 | Common::Input::UnregisterFactory<Common::Input::InputDevice>(camera->GetEngineName()); | 127 | Common::Input::UnregisterInputFactory(camera->GetEngineName()); |
| 142 | Common::Input::UnregisterFactory<Common::Input::OutputDevice>(camera->GetEngineName()); | 128 | Common::Input::UnregisterOutputFactory(camera->GetEngineName()); |
| 143 | camera.reset(); | 129 | camera.reset(); |
| 144 | 130 | ||
| 145 | Common::Input::UnregisterFactory<Common::Input::InputDevice>( | 131 | Common::Input::UnregisterInputFactory(virtual_amiibo->GetEngineName()); |
| 146 | virtual_amiibo->GetEngineName()); | 132 | Common::Input::UnregisterOutputFactory(virtual_amiibo->GetEngineName()); |
| 147 | Common::Input::UnregisterFactory<Common::Input::OutputDevice>( | ||
| 148 | virtual_amiibo->GetEngineName()); | ||
| 149 | virtual_amiibo.reset(); | 133 | virtual_amiibo.reset(); |
| 150 | 134 | ||
| 151 | #ifdef HAVE_SDL2 | 135 | #ifdef HAVE_SDL2 |
| 152 | Common::Input::UnregisterFactory<Common::Input::InputDevice>(sdl->GetEngineName()); | 136 | Common::Input::UnregisterInputFactory(sdl->GetEngineName()); |
| 153 | Common::Input::UnregisterFactory<Common::Input::OutputDevice>(sdl->GetEngineName()); | 137 | Common::Input::UnregisterOutputFactory(sdl->GetEngineName()); |
| 154 | sdl.reset(); | 138 | sdl.reset(); |
| 155 | #endif | 139 | #endif |
| 156 | 140 | ||
| 157 | Common::Input::UnregisterFactory<Common::Input::InputDevice>("touch_from_button"); | 141 | Common::Input::UnregisterInputFactory("touch_from_button"); |
| 158 | Common::Input::UnregisterFactory<Common::Input::InputDevice>("analog_from_button"); | 142 | Common::Input::UnregisterInputFactory("analog_from_button"); |
| 159 | } | 143 | } |
| 160 | 144 | ||
| 161 | [[nodiscard]] std::vector<Common::ParamPackage> GetInputDevices() const { | 145 | [[nodiscard]] std::vector<Common::ParamPackage> GetInputDevices() const { |