CG_Labs  2020.0
InputHandler.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <cstdint>
4 #include <unordered_map>
5 
6 #define GLFW_INCLUDE_NONE
7 #include <GLFW/glfw3.h>
8 #include <glm/vec2.hpp>
9 
10 /*----------------------------------------------------------------------------*/
11 
12 #define PRESSED (1 << 0)
13 #define RELEASED (1 << 1)
14 #define JUST_PRESSED (1 << 2)
15 #define JUST_RELEASED (1 << 3)
16 
17 #define MAX_MOUSE_BUTTONS 8
18 
20 {
21 public:
22  struct IState {
23  std::uint64_t mDownTick{std::numeric_limits<std::uint64_t>::max()};
24  std::uint64_t mUpTick{std::numeric_limits<std::uint64_t>::max()};
25  bool mIsDown{false};
26  };
27 
28 public:
29  InputHandler();
30 
31 public:
32  void FeedKeyboard(int key, int scancode, int action, int mods);
33  void FeedMouseButtons(int button, int action, int mods);
34  void FeedMouseMotion(glm::vec2 const& position);
35  void Advance();
36  std::uint32_t GetScancodeState(int scancode);
37  std::uint32_t GetKeycodeState(int key);
38  std::uint32_t GetMouseState(std::uint32_t button);
39  glm::vec2 GetMousePositionAtStateShift(std::uint32_t button);
40  glm::vec2 GetMousePosition();
41  bool IsMouseCapturedByUI() const;
42  bool IsKeyboardCapturedByUI() const;
43  void SetUICapture(bool mouseCapture, bool keyboardCapture);
44 
45 private:
46  void DownEvent(std::unordered_map<size_t, IState> &map, size_t loc);
47  void DownModEvent(std::unordered_map<size_t, IState> &map, std::uint32_t mods);
48  void UpEvent(std::unordered_map<size_t, IState> &map, size_t loc);
49  void UpModEvent(std::unordered_map<size_t, IState> &map, std::uint32_t mods);
50 
51  std::uint32_t GetState(std::unordered_map<size_t, IState> &map, size_t loc);
52 
53  std::unordered_map<size_t, IState> mScancodeMap;
54  std::unordered_map<size_t, IState> mKeycodeMap;
55  std::unordered_map<size_t, IState> mMouseMap;
56 
57  glm::vec2 mMousePosition;
59 
62 
63  std::uint64_t mTick;
64 
65 };
66 
InputHandler::IsKeyboardCapturedByUI
bool IsKeyboardCapturedByUI() const
Definition: InputHandler.cpp:143
InputHandler::FeedKeyboard
void FeedKeyboard(int key, int scancode, int action, int mods)
Definition: InputHandler.cpp:57
InputHandler::GetState
std::uint32_t GetState(std::unordered_map< size_t, IState > &map, size_t loc)
Definition: InputHandler.cpp:102
InputHandler::GetMouseState
std::uint32_t GetMouseState(std::uint32_t button)
Definition: InputHandler.cpp:123
InputHandler::mKeycodeMap
std::unordered_map< size_t, IState > mKeycodeMap
Definition: InputHandler.h:54
InputHandler::IsMouseCapturedByUI
bool IsMouseCapturedByUI() const
Definition: InputHandler.cpp:138
InputHandler::mMouseCapturedByUI
bool mMouseCapturedByUI
Definition: InputHandler.h:60
InputHandler::GetScancodeState
std::uint32_t GetScancodeState(int scancode)
Definition: InputHandler.cpp:113
InputHandler::UpEvent
void UpEvent(std::unordered_map< size_t, IState > &map, size_t loc)
Definition: InputHandler.cpp:37
InputHandler::mScancodeMap
std::unordered_map< size_t, IState > mScancodeMap
Definition: InputHandler.h:53
InputHandler::IState::mUpTick
std::uint64_t mUpTick
Definition: InputHandler.h:24
InputHandler::IState::mIsDown
bool mIsDown
Definition: InputHandler.h:25
InputHandler::SetUICapture
void SetUICapture(bool mouseCapture, bool keyboardCapture)
Definition: InputHandler.cpp:148
InputHandler::mMouseMap
std::unordered_map< size_t, IState > mMouseMap
Definition: InputHandler.h:55
InputHandler::InputHandler
InputHandler()
Definition: InputHandler.cpp:6
InputHandler::mMousePositionSwitched
glm::vec2 mMousePositionSwitched[MAX_MOUSE_BUTTONS]
Definition: InputHandler.h:58
InputHandler::DownEvent
void DownEvent(std::unordered_map< size_t, IState > &map, size_t loc)
Definition: InputHandler.cpp:17
MAX_MOUSE_BUTTONS
#define MAX_MOUSE_BUTTONS
Definition: InputHandler.h:17
InputHandler::IState
Definition: InputHandler.h:22
InputHandler::mTick
std::uint64_t mTick
Definition: InputHandler.h:63
InputHandler::mMousePosition
glm::vec2 mMousePosition
Definition: InputHandler.h:57
InputHandler
Definition: InputHandler.h:20
InputHandler::UpModEvent
void UpModEvent(std::unordered_map< size_t, IState > &map, std::uint32_t mods)
Definition: InputHandler.cpp:46
InputHandler::FeedMouseMotion
void FeedMouseMotion(glm::vec2 const &position)
Definition: InputHandler.cpp:78
InputHandler::IState::mDownTick
std::uint64_t mDownTick
Definition: InputHandler.h:23
InputHandler::Advance
void Advance()
Definition: InputHandler.cpp:12
InputHandler::DownModEvent
void DownModEvent(std::unordered_map< size_t, IState > &map, std::uint32_t mods)
Definition: InputHandler.cpp:26
InputHandler::GetMousePosition
glm::vec2 GetMousePosition()
Definition: InputHandler.cpp:133
InputHandler::GetMousePositionAtStateShift
glm::vec2 GetMousePositionAtStateShift(std::uint32_t button)
Definition: InputHandler.cpp:128
InputHandler::GetKeycodeState
std::uint32_t GetKeycodeState(int key)
Definition: InputHandler.cpp:118
InputHandler::FeedMouseButtons
void FeedMouseButtons(int button, int action, int mods)
Definition: InputHandler.cpp:83
InputHandler::mKeyboardCapturedByUI
bool mKeyboardCapturedByUI
Definition: InputHandler.h:61