// Copyright 2021 yuzu Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included #pragma once #include #include #include "common/input.h" #include "common/settings_input.h" namespace Core::HID { using ButtonValues = std::array; using SticksValues = std::array; enum class ControllerTriggerType; class EmulatedController; class HIDCore; } // namespace Core::HID class ControllerNavigation : public QObject { Q_OBJECT public: explicit ControllerNavigation(Core::HID::HIDCore& hid_core, QWidget* parent = nullptr); ~ControllerNavigation(); /// Disables events from the emulated controller void UnloadController(); signals: void TriggerKeyboardEvent(Qt::Key key); private: void TriggerButton(Settings::NativeButton::Values native_button, Qt::Key key); void ControllerUpdateEvent(Core::HID::ControllerTriggerType type); void ControllerUpdateButton(); void ControllerUpdateStick(); Core::HID::ButtonValues button_values{}; Core::HID::SticksValues stick_values{}; int player1_callback_key{}; int handheld_callback_key{}; bool is_controller_set{}; mutable std::mutex mutex; Core::HID::EmulatedController* player1_controller; Core::HID::EmulatedController* handheld_controller; };