| |
| |
|
|
| #pragma once |
|
|
| #include <memory> |
| #include <string> |
| #include <unordered_map> |
| #include <vector> |
|
|
| namespace Common { |
| class ParamPackage; |
| } |
|
|
| namespace Common::Input { |
| enum class ButtonNames; |
| } |
|
|
| namespace Settings::NativeAnalog { |
| enum Values : int; |
| } |
|
|
| namespace Settings::NativeButton { |
| enum Values : int; |
| } |
|
|
| namespace Settings::NativeMotion { |
| enum Values : int; |
| } |
|
|
| namespace InputCommon { |
| class Android; |
| class Camera; |
| class Keyboard; |
| class Mouse; |
| class TouchScreen; |
| class VirtualAmiibo; |
| class VirtualGamepad; |
| struct MappingData; |
| } |
|
|
| namespace InputCommon::TasInput { |
| class Tas; |
| } |
|
|
| namespace InputCommon { |
| namespace Polling { |
| |
| enum class InputType { None, Button, Stick, Motion, Touch }; |
| } |
|
|
| |
| |
| |
| |
| using AnalogMapping = std::unordered_map<Settings::NativeAnalog::Values, Common::ParamPackage>; |
| using ButtonMapping = std::unordered_map<Settings::NativeButton::Values, Common::ParamPackage>; |
| using MotionMapping = std::unordered_map<Settings::NativeMotion::Values, Common::ParamPackage>; |
|
|
| class InputSubsystem { |
| public: |
| explicit InputSubsystem(); |
| ~InputSubsystem(); |
|
|
| InputSubsystem(const InputSubsystem&) = delete; |
| InputSubsystem& operator=(const InputSubsystem&) = delete; |
|
|
| InputSubsystem(InputSubsystem&&) = delete; |
| InputSubsystem& operator=(InputSubsystem&&) = delete; |
|
|
| |
| void Initialize(); |
|
|
| |
| void Shutdown(); |
|
|
| |
| [[nodiscard]] Keyboard* GetKeyboard(); |
|
|
| |
| [[nodiscard]] const Keyboard* GetKeyboard() const; |
|
|
| |
| [[nodiscard]] Mouse* GetMouse(); |
|
|
| |
| [[nodiscard]] const Mouse* GetMouse() const; |
|
|
| |
| [[nodiscard]] TouchScreen* GetTouchScreen(); |
|
|
| |
| [[nodiscard]] const TouchScreen* GetTouchScreen() const; |
|
|
| |
| [[nodiscard]] TasInput::Tas* GetTas(); |
|
|
| |
| [[nodiscard]] const TasInput::Tas* GetTas() const; |
|
|
| |
| [[nodiscard]] Camera* GetCamera(); |
|
|
| |
| [[nodiscard]] const Camera* GetCamera() const; |
|
|
| |
| [[nodiscard]] Android* GetAndroid(); |
|
|
| |
| [[nodiscard]] const Android* GetAndroid() const; |
|
|
| |
| [[nodiscard]] VirtualAmiibo* GetVirtualAmiibo(); |
|
|
| |
| [[nodiscard]] const VirtualAmiibo* GetVirtualAmiibo() const; |
|
|
| |
| [[nodiscard]] VirtualGamepad* GetVirtualGamepad(); |
|
|
| |
| [[nodiscard]] const VirtualGamepad* GetVirtualGamepad() const; |
|
|
| |
| |
| |
| |
| |
| |
| [[nodiscard]] std::vector<Common::ParamPackage> GetInputDevices() const; |
|
|
| |
| [[nodiscard]] AnalogMapping GetAnalogMappingForDevice(const Common::ParamPackage& device) const; |
|
|
| |
| [[nodiscard]] ButtonMapping GetButtonMappingForDevice(const Common::ParamPackage& device) const; |
|
|
| |
| [[nodiscard]] MotionMapping GetMotionMappingForDevice(const Common::ParamPackage& device) const; |
|
|
| |
| [[nodiscard]] Common::Input::ButtonNames GetButtonName( |
| const Common::ParamPackage& params) const; |
|
|
| |
| [[nodiscard]] bool IsController(const Common::ParamPackage& params) const; |
|
|
| |
| [[nodiscard]] bool IsStickInverted(const Common::ParamPackage& device) const; |
|
|
| |
| void ReloadInputDevices(); |
|
|
| |
| void BeginMapping(Polling::InputType type); |
|
|
| |
| [[nodiscard]] Common::ParamPackage GetNextInput() const; |
|
|
| |
| void StopMapping() const; |
|
|
| |
| void PumpEvents() const; |
|
|
| private: |
| struct Impl; |
| std::unique_ptr<Impl> impl; |
| }; |
|
|
| |
| std::string GenerateKeyboardParam(int key_code); |
|
|
| |
| std::string GenerateAnalogParamFromKeys(int key_up, int key_down, int key_left, int key_right, |
| int key_modifier, float modifier_scale); |
| } |
|
|