#pragma once #include "input/emulated/WPADController.h" class ProController : public WPADController { public: enum ButtonId { kButtonId_None, kButtonId_A, kButtonId_B, kButtonId_X, kButtonId_Y, kButtonId_L, kButtonId_R, kButtonId_ZL, kButtonId_ZR, kButtonId_Plus, kButtonId_Minus, kButtonId_Home, kButtonId_Up, kButtonId_Down, kButtonId_Left, kButtonId_Right, kButtonId_StickL, kButtonId_StickR, kButtonId_StickL_Up, kButtonId_StickL_Down, kButtonId_StickL_Left, kButtonId_StickL_Right, kButtonId_StickR_Up, kButtonId_StickR_Down, kButtonId_StickR_Left, kButtonId_StickR_Right, kButtonId_Max, }; ProController(size_t player_index); Type type() const override { return Type::Pro; } WPADDeviceType get_device_type() const override { return kWAPDevURCC; } uint32 get_emulated_button_flag(uint32 id) const override; size_t get_highest_mapping_id() const override { return kButtonId_Max; } bool is_axis_mapping(uint64 mapping) const override { return mapping >= kButtonId_StickL_Up && mapping <= kButtonId_StickR_Right; } glm::vec2 get_axis() const override; glm::vec2 get_rotation() const override; glm::vec2 get_trigger() const override; static uint32 s_get_emulated_button_flag(uint32 id); static std::string_view get_button_name(ButtonId id); bool is_start_down() const override { return is_mapping_down(kButtonId_Plus); } bool is_left_down() const override { return is_mapping_down(kButtonId_Left); } bool is_right_down() const override { return is_mapping_down(kButtonId_Right); } bool is_up_down() const override { return is_mapping_down(kButtonId_Up); } bool is_down_down() const override { return is_mapping_down(kButtonId_Down); } bool is_a_down() const override { return is_mapping_down(kButtonId_A); } bool is_b_down() const override { return is_mapping_down(kButtonId_B); } bool is_home_down() const override { return is_mapping_down(kButtonId_Home); } bool set_default_mapping(const std::shared_ptr& controller) override; };