LkEngine 0.1.2
 
Loading...
Searching...
No Matches
Input.h
1#pragma once
2
5#include "LkEngine/Core/LObject/ObjectPtr.h"
6
7#include "LkEngine/Core/Input/Mouse.h"
8#include "LkEngine/Core/Input/MouseCodes.h"
9#include "LkEngine/Core/Input/Keycodes.h"
10
11#include "LkEngine/Core/Event/KeyEvent.h"
12#include "LkEngine/Core/Event/MouseEvent.h"
13
14
15namespace LkEngine {
16
17 class LScene;
18
19 class LInput
20 {
21 public:
22 static void Initialize();
23
24 static void Update();
25
26 static bool IsKeyPressed(const EKey Key);
27 static bool IsKeyHeld(const EKey Key);
28 static bool IsKeyDown(const EKey Key);
29 static bool IsKeyReleased(const EKey Key);
30
31 static bool IsMouseButtonPressed(const EMouseButton Button);
32 static bool IsMouseButtonHeld(const EMouseButton Button);
33 static bool IsMouseButtonDown(const EMouseButton Button);
34 static bool IsMouseButtonReleased(const EMouseButton Button);
35 static bool IsAnyMouseButtonPressed();
36
37 static void SetCursorMode(const ECursorMode CursorMode);
38 static ECursorMode GetCursorMode();
39
40 static FKeyData& GetKeyData(const EKey Key);
41
42 static FKeyData& UpdateKeyState(const EKey Key, EKeyState NewState);
43
48 static FMouseButtonData& UpdateButtonState(const EMouseButton Button, const EMouseButtonState NewState);
49
50 static void TransitionPressedKeys();
51 static void TransitionPressedButtons();
52
56 static void ClearReleased();
57
58 template<typename TDuration>
59 static TDuration GetKeyHeldTime(const EKey Key)
60 {
61 using namespace std::chrono;
62 /* TODO: Investigate if any the handling of held keys needs to be modified
63 * so no crashes occur here. */
64 #if 0
65 LK_CORE_ASSERT(KeyHeldMap.contains(Key), "Key '{}' is not held down", Enum::ToString(Key));
66 #else
67 if (!KeyHeldMap.contains(Key))
68 {
69 return 0s;
70 }
71 #endif
72 return duration_cast<TDuration>(KeyHeldMap.at(Key).second - KeyHeldMap.at(Key).first);
73 }
74
75 FORCEINLINE static FMouseButtonData& GetMouseData(const EMouseButton MouseButton)
76 {
77 LK_CORE_ASSERT(MouseDataMap.contains(MouseButton));
78 return (MouseDataMap.at(MouseButton));
79 }
80
81 FORCEINLINE static EMouseButton GetLastMouseButton() { return LastMouseButton; }
82
83 static std::size_t GetPressedKeys(std::vector<EKey>& InKeys);
84
85 FORCEINLINE static float GetMouseX() { return LMouse::GetMouseX(); }
86 FORCEINLINE static float GetMouseY() { return LMouse::GetMouseY(); }
87
88 private:
89 inline static EMouseButton LastMouseButton = EMouseButton::None;
90
91 inline static std::map<EKey, FKeyData> KeyDataMap{};
92 inline static std::map<EMouseButton, FMouseButtonData> MouseDataMap{};
93
94 using FKeyHeldData = std::pair<std::chrono::steady_clock::time_point, std::chrono::steady_clock::time_point>;
95 inline static std::map<EKey, FKeyHeldData> KeyHeldMap{};
96 };
97
98}
Core header.
LObject implementation.
Definition Input.h:20
static FMouseButtonData & UpdateButtonState(const EMouseButton Button, const EMouseButtonState NewState)
Update the state of a mouse button. Return the button data container with the updated state.
Definition Input.cpp:143
static void ClearReleased()
Clear released inputs.
Definition Input.cpp:176
Definition Asset.h:11
EKeyState
Definition Keycodes.h:114
ECursorMode
Definition MouseCodes.h:36
EMouseButton
Definition MouseCodes.h:10
EMouseButtonState
Definition MouseCodes.h:27
EKey
Definition Keycodes.h:17
Definition Keyboard.h:16
Definition MouseCodes.h:54