Program Listing for File keyboard_mouse_data.hpp¶
↰ Return to documentation for file (inexor/vulkan-renderer/input/keyboard_mouse_data.hpp
)
#pragma once
#include <GLFW/glfw3.h>
#include <array>
#include <shared_mutex>
namespace inexor::vulkan_renderer::input {
class KeyboardMouseInputData {
private:
std::array<std::int64_t, 2> m_previous_cursor_pos{0, 0};
std::array<std::int64_t, 2> m_current_cursor_pos{0, 0};
std::array<bool, GLFW_KEY_LAST> m_pressed_keys{false};
std::array<bool, GLFW_MOUSE_BUTTON_LAST> m_pressed_mouse_buttons{false};
bool m_keyboard_updated{false};
bool m_mouse_buttons_updated{false};
mutable std::shared_mutex m_input_mutex;
public:
KeyboardMouseInputData() = default;
KeyboardMouseInputData(const KeyboardMouseInputData &) = delete;
KeyboardMouseInputData(KeyboardMouseInputData &&) = delete;
~KeyboardMouseInputData() = default;
KeyboardMouseInputData &operator=(const KeyboardMouseInputData &) = delete;
KeyboardMouseInputData &operator=(KeyboardMouseInputData &&) = delete;
void press_key(std::int32_t key);
void release_key(std::int32_t key);
[[nodiscard]] bool is_key_pressed(std::int32_t key) const;
[[nodiscard]] bool was_key_pressed_once(std::int32_t key);
void press_mouse_button(std::int32_t button);
void release_mouse_button(std::int32_t button);
[[nodiscard]] bool is_mouse_button_pressed(std::int32_t button) const;
[[nodiscard]] bool was_mouse_button_pressed_once(std::int32_t button);
void set_cursor_pos(double pos_x, double pos_y);
[[nodiscard]] std::array<std::int64_t, 2> get_cursor_pos() const;
[[nodiscard]] std::array<double, 2> calculate_cursor_position_delta();
};
} // namespace inexor::vulkan_renderer::input