Mountain  1.0.0
Simple C++ 2D Game Framework
input.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <array>
4 
5 #include "Mountain/core.hpp"
6 #include "Mountain/window.hpp"
10 
13 
14 namespace Mountain
15 {
17  class Input
18  {
19  STATIC_CLASS(Input)
20 
21  public:
22  static constexpr size_t GamepadMax = 15;
23 
28  MOUNTAIN_API static bool_t GetKey(Key key, KeyStatus status = KeyStatus::Down);
29 
34  MOUNTAIN_API static bool_t GetMouseButton(MouseButton mouseButton, MouseButtonStatus status = MouseButtonStatus::Down);
35 
39  MOUNTAIN_API static const GamepadInput& GetGamepad(uint32_t gamepadId);
40 
42  MOUNTAIN_API static uint32_t GetGamepadsConnected();
43 
45  MOUNTAIN_API static bool_t IsGamepadConnected(uint32_t index);
46 
49  MOUNTAIN_API static Vector2 GetMousePosition();
50 
52  MOUNTAIN_API static Vector2 GetMouseDelta();
53 
55  MOUNTAIN_API static Vector2 GetMouseWheel();
56 
57  private:
58  using KeyStatuses = std::array<bool_t, magic_enum::enum_count<KeyStatus>()>;
59 
60  using MouseStatuses = std::array<bool_t, magic_enum::enum_count<MouseButtonStatus>()>;
61 
62  MOUNTAIN_API static inline uint32_t m_CurrentBoundWindow = 0;
63 
64  MOUNTAIN_API static inline std::array<KeyStatuses, static_cast<size_t>(Key::Count)> m_Keyboard;
65 
66  MOUNTAIN_API static inline std::array<MouseStatuses, magic_enum::enum_count<MouseButton>()> m_Mouse;
67 
68  MOUNTAIN_API static inline std::array<GamepadInput, GamepadMax> m_Gamepads;
69 
70  MOUNTAIN_API static inline Vector2 m_LastMousePosition;
71 
72  MOUNTAIN_API static inline Vector2 m_MousePosition;
73 
74  MOUNTAIN_API static inline Vector2 m_MouseDelta;
75 
76  MOUNTAIN_API static inline Vector2 m_MouseWheel;
77 
78  MOUNTAIN_API static inline GLFWwindow* m_WindowHandle = nullptr;
79 
81  MOUNTAIN_API static void Initialize();
82 
84  MOUNTAIN_API static void Update();
85 
86  MOUNTAIN_API static void Reset();
87 
88  static void HandleKeyboard(GLFWwindow* window, int32_t key, int32_t scancode, int32_t action, int32_t mods);
89 
90  static void HandleMouseButton(GLFWwindow* window, int32_t mouseButton, int32_t action, int32_t mods);
91 
92  static void HandleMouseWheel(GLFWwindow* window, double_t wheelX, double_t wheelY);
93 
94  static void HandleJoyStickCallBack(int32_t jid, int32_t event);
95 
96  static void UpdateGamepads();
97 
98  static void UpdateConnectedGamepads();
99 
100  friend class Window;
101  friend class Game;
102  };
103 }
Defines the Mountain::Window class.
static MOUNTAIN_API const GamepadInput & GetGamepad(uint32_t gamepadId)
Get a gamepad input.
MouseButton
List of mouse buttons
Definition: mouse_input.hpp:11
KeyStatus
List of keyboard button states
Used to fetch inputs from the current Window.
Definition: input.hpp:17
Defines gamepad input types and enumerations.
MouseButtonStatus
List of mouse button states
Definition: mouse_input.hpp:36
A wrapper for the main window.
Definition: window.hpp:26
static MOUNTAIN_API Vector2 GetMouseWheel()
Get how much the mouse wheel moved last frame.
Information about a gamepad.
static MOUNTAIN_API bool_t GetMouseButton(MouseButton mouseButton, MouseButtonStatus status=MouseButtonStatus::Down)
Check if a specified mouse button is of the specified status.
static MOUNTAIN_API bool_t GetKey(Key key, KeyStatus status=KeyStatus::Down)
Check if a specified key is of the specified status.
static MOUNTAIN_API Vector2 GetMousePosition()
Get the mouse position.
static MOUNTAIN_API Vector2 GetMouseDelta()
Get how much the mouse moved last frame.
Defines enumerators related to mouse input.
Key
List of keyboard buttons
static MOUNTAIN_API bool_t IsGamepadConnected(uint32_t index)
Get whether a gamepad is currently connected.
static MOUNTAIN_API uint32_t GetGamepadsConnected()
Get how many controllers are currently connected.
Defines enumerators related to keyboard input.
Contains all declarations of the Mountain Framework.
Definition: audio.hpp:22