Mountain  1.0.0
Simple C++ 2D Game Framework
gamepad_input.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <array>
4 #include <cmath>
5 #include <string>
6 
7 #include <Maths/vector2.hpp>
8 #include <Maths/vector2i.hpp>
9 
10 #include "magic_enum/magic_enum.hpp"
11 
12 #include "Mountain/core.hpp"
13 
18 
19 namespace Mountain
20 {
22  enum class GamepadAxis : uint8_t
23  {
24  LeftStickHorizontal,
25  LeftStickVertical,
26  RightStickHorizontal,
27  RightStickVertical,
28  LeftTrigger,
29  RightTrigger
30  };
31 
33  enum class GamepadStick : uint8_t
34  {
35  Left,
36  Right
37  };
38 
42  enum class GamepadButton : uint8_t
43  {
44  A,
45  B,
46  X,
47  Y,
48  LeftBumper,
49  RightBumper,
50  Back,
51  Start,
52  Guide,
53  LeftStick,
54  RightStick,
55  DirectionalPadUp,
56  DirectionalPadRight,
57  DirectionalPadDown,
58  DirectionalPadLeft,
59 
60  // Mountain extensions, not supported by GLFW as buttons
61  LeftTrigger,
62  RightTrigger,
63 
64  None
65  };
66 
68  enum class GamepadButtonStatus : uint8_t
69  {
71  Down,
73  Up,
75  Pressed,
77  Released
78  };
79 
80  using GamepadButtonStatuses = std::array<bool_t, magic_enum::enum_count<GamepadButtonStatus>()>;
81 
84  {
85  public:
87  static inline float_t nullAnalogValue = 1.5259022e-05f;
88 
89  MOUNTAIN_API bool_t GetConnected() const;
90 
91  MOUNTAIN_API const std::string& GetName() const;
92 
93  MOUNTAIN_API const std::array<float_t, magic_enum::enum_count<GamepadAxis>()>& GetAxes() const;
94 
95  MOUNTAIN_API float_t GetAxis(GamepadAxis axis) const;
96 
97  MOUNTAIN_API Vector2 GetStick(GamepadStick stick) const;
98 
99  MOUNTAIN_API Vector2i GetDirectionalPad() const;
100 
101  MOUNTAIN_API const std::array<GamepadButtonStatuses, magic_enum::enum_count<GamepadButton>()>& GetButtons() const;
102 
103  MOUNTAIN_API bool_t GetButton(GamepadButton button, GamepadButtonStatus status = GamepadButtonStatus::Down) const;
104 
105  private:
107  bool_t m_IsConnected = false;
109  std::string m_Name;
111  std::array<float_t, magic_enum::enum_count<GamepadAxis>()> m_Axes{};
113  std::array<GamepadButtonStatuses, magic_enum::enum_count<GamepadButton>()> m_Buttons{};
114 
115  friend class Input;
116  };
117 }
Used to fetch inputs from the current Window.
Definition: input.hpp:17
Information about a gamepad.
GamepadButton
Gamepad button enumeration.
GamepadAxis
Gamepad axis enumeration.
GamepadStick
Gamepad stick enumeration.
GamepadButtonStatus
Gamepad button.
Contains all declarations of the Mountain Framework.
Definition: audio.hpp:22