PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
input.h
1#pragma once
2
3#include "pixelbullet/input/key_codes.h"
4#include "pixelbullet/input/mouse_codes.h"
5
6#include <bitset>
7#include <cstddef>
8#include <glm/glm.hpp>
9
10namespace pixelbullet::input_internal
11{
12struct InputStateAccess;
13} // namespace pixelbullet::input_internal
14
15namespace pixelbullet
16{
17namespace input
18{
20{
21public:
22 [[nodiscard]] bool IsKeyDown(KeyCode key) const;
23 [[nodiscard]] bool IsKeyPressed(KeyCode key) const;
24 [[nodiscard]] bool IsKeyReleased(KeyCode key) const;
25 [[nodiscard]] bool IsMouseButtonDown(MouseCode button) const;
26 [[nodiscard]] bool IsMouseButtonPressed(MouseCode button) const;
27 [[nodiscard]] bool IsMouseButtonReleased(MouseCode button) const;
28 [[nodiscard]] glm::vec2 GetMousePosition() const noexcept
29 {
30 return mouse_position_;
31 }
32 [[nodiscard]] float GetMouseX() const noexcept
33 {
34 return mouse_position_.x;
35 }
36 [[nodiscard]] float GetMouseY() const noexcept
37 {
38 return mouse_position_.y;
39 }
40 [[nodiscard]] glm::vec2 GetMouseDelta() const noexcept
41 {
42 return mouse_delta_;
43 }
44 [[nodiscard]] float GetMouseDeltaX() const noexcept
45 {
46 return mouse_delta_.x;
47 }
48 [[nodiscard]] float GetMouseDeltaY() const noexcept
49 {
50 return mouse_delta_.y;
51 }
52 [[nodiscard]] glm::vec2 GetMouseScrollDelta() const noexcept
53 {
54 return mouse_scroll_delta_;
55 }
56 [[nodiscard]] float GetMouseScrollDeltaX() const noexcept
57 {
58 return mouse_scroll_delta_.x;
59 }
60 [[nodiscard]] float GetMouseScrollDeltaY() const noexcept
61 {
62 return mouse_scroll_delta_.y;
63 }
64
65private:
66 static constexpr std::size_t kMaxTrackedKeys = 512;
67 static constexpr std::size_t kMaxTrackedMouseButtons = 8;
68
69 void SetKeyDown(KeyCode key, bool is_down);
70 void SetMouseButtonDown(MouseCode button, bool is_down);
71 void SetMousePosition(glm::vec2 mouse_position) noexcept
72 {
73 mouse_delta_ += mouse_position - mouse_position_;
74 mouse_position_ = mouse_position;
75 }
76 void SyncMousePosition(glm::vec2 mouse_position) noexcept
77 {
78 mouse_position_ = mouse_position;
79 }
80 void ResetMouseDelta() noexcept
81 {
82 mouse_delta_ = glm::vec2(0.0f);
83 }
84 void ResetTransientInputs() noexcept
85 {
86 key_pressed_.reset();
87 key_released_.reset();
88 mouse_button_pressed_.reset();
89 mouse_button_released_.reset();
90 mouse_delta_ = glm::vec2(0.0f);
91 mouse_scroll_delta_ = glm::vec2(0.0f);
92 }
93 void ClearInputState() noexcept
94 {
95 key_down_.reset();
96 mouse_button_down_.reset();
97 ResetTransientInputs();
98 }
99
100 friend struct pixelbullet::input_internal::InputStateAccess;
101
102 std::bitset<kMaxTrackedKeys> key_down_;
103 std::bitset<kMaxTrackedKeys> key_pressed_;
104 std::bitset<kMaxTrackedKeys> key_released_;
105 std::bitset<kMaxTrackedMouseButtons> mouse_button_down_;
106 std::bitset<kMaxTrackedMouseButtons> mouse_button_pressed_;
107 std::bitset<kMaxTrackedMouseButtons> mouse_button_released_;
108 glm::vec2 mouse_position_ = glm::vec2(0.0f);
109 glm::vec2 mouse_delta_ = glm::vec2(0.0f);
110 glm::vec2 mouse_scroll_delta_ = glm::vec2(0.0f);
111};
112} // namespace input
113} // namespace pixelbullet
Definition input.h:20