le2d v0.4.7
2D game engine framework
 
Loading...
Searching...
No Matches
gamepad.hpp
Go to the documentation of this file.
1#pragma once
2#include <GLFW/glfw3.h>
3#include <klib/c_string.hpp>
4#include <array>
5#include <optional>
6#include <variant>
7
8namespace le::input {
9inline constexpr std::size_t max_gamepads_v = GLFW_JOYSTICK_16;
10
14class Gamepad {
15 public:
16 static constexpr float dead_zone_v = 0.08f;
17 static constexpr float nonzero_dead_zone_v = 0.2f;
18
19 class Manager;
20
22 enum struct Id : std::int8_t {};
24 struct FirstUsed {};
26 struct LastUsed {};
28 using Binding = std::variant<FirstUsed, LastUsed, Id>;
29
31 [[nodiscard]] auto get_id() const -> Id { return m_id; }
33 [[nodiscard]] auto is_connected() const -> bool { return m_connected; }
35 [[nodiscard]] auto get_name() const -> klib::CString;
36
38 [[nodiscard]] auto any_button_pressed() const -> bool;
41 [[nodiscard]] auto any_axis_nonzero(float dead_zone = nonzero_dead_zone_v) const -> bool;
44 [[nodiscard]] auto is_pressed(int button) const -> bool;
49 [[nodiscard]] auto get_axis(int axis, float dead_zone = dead_zone_v) const -> float;
50
51 private:
52 GLFWgamepadstate m_state{};
53 Id m_id{-1};
54 bool m_connected{};
55};
56
59 public:
60 explicit Manager();
61
62 [[nodiscard]] auto get_by_id(Id id) const -> Gamepad const&;
63 [[nodiscard]] auto get_first_used() const -> Gamepad const&;
64 [[nodiscard]] auto get_last_used() const -> Gamepad const&;
65 [[nodiscard]] auto get(Binding binding) const -> Gamepad const&;
66
70 auto update(float nonzero_dead_zone = nonzero_dead_zone_v) -> bool;
71
72 private:
73 std::array<Gamepad, max_gamepads_v> m_gamepads{};
74 std::optional<Gamepad::Id> m_first_used{};
75 std::optional<Gamepad::Id> m_last_used{};
76};
77} // namespace le::input
Stores and maintains Gamepad states.
Definition gamepad.hpp:58
auto get_first_used() const -> Gamepad const &
auto get_last_used() const -> Gamepad const &
auto get_by_id(Id id) const -> Gamepad const &
auto update(float nonzero_dead_zone=nonzero_dead_zone_v) -> bool
Update all Gamepad states.
auto get(Binding binding) const -> Gamepad const &
Snapshot of gamepad / game controller state.
Definition gamepad.hpp:14
auto get_axis(int axis, float dead_zone=dead_zone_v) const -> float
static constexpr float dead_zone_v
Definition gamepad.hpp:16
Id
Strong type wrapper for Gamepad ID.
Definition gamepad.hpp:22
auto is_connected() const -> bool
Definition gamepad.hpp:33
auto any_button_pressed() const -> bool
auto get_id() const -> Id
Definition gamepad.hpp:31
auto is_pressed(int button) const -> bool
auto any_axis_nonzero(float dead_zone=nonzero_dead_zone_v) const -> bool
std::variant< FirstUsed, LastUsed, Id > Binding
Variant of selectors.
Definition gamepad.hpp:28
static constexpr float nonzero_dead_zone_v
Definition gamepad.hpp:17
auto get_name() const -> klib::CString
Definition action.hpp:4
constexpr std::size_t max_gamepads_v
Definition gamepad.hpp:9
Selector for first used gamepad.
Definition gamepad.hpp:24
Selector for last used gamepad.
Definition gamepad.hpp:26