le2d v0.4.7
2D game engine framework
 
Loading...
Searching...
No Matches
action.hpp
Go to the documentation of this file.
1#pragma once
3
6class KeyDigital : public KeyBase<IDigital> {
7 public:
8 KeyDigital() = default;
9
11 explicit KeyDigital(int const trigger) : KeyBase<IDigital>(trigger) {}
12};
13
15class KeyAxis1D : public KeyBase<IBinaryAxis1D> {
16 public:
17 KeyAxis1D() = default;
18
21 explicit KeyAxis1D(int const lo, int const hi) : KeyBase<IBinaryAxis1D>(lo, hi) {}
22};
23
25class KeyAxis2D : public KeyBase<IBinaryAxis2D> {
26 public:
27 KeyAxis2D() = default;
28
31 explicit KeyAxis2D(glm::ivec2 const horz, glm::ivec2 const vert) : KeyBase<IBinaryAxis2D>(horz, vert) {}
32};
33
35class MouseButtonDigital : public MouseButtonBase<IDigital> {
36 public:
37 MouseButtonDigital() = default;
38
40 explicit MouseButtonDigital(int const trigger) : MouseButtonBase<IDigital>(trigger) {}
41};
42
44class MouseButtonAxis1D : public MouseButtonBase<IBinaryAxis1D> {
45 public:
46 MouseButtonAxis1D() = default;
47
50 explicit MouseButtonAxis1D(int const lo, int const hi) : MouseButtonBase<IBinaryAxis1D>(lo, hi) {}
51};
52
55 public:
57};
58
61 public:
63};
64
66class Cursor : public IAction {
67 void on_key(event::Key const& /*mb*/) final {}
68 void on_mouse_button(event::MouseButton const& /*mb*/) final {}
69 void on_scroll(event::Scroll const& /*scroll*/) final {}
70 void on_cursor_pos(event::CursorPos const& cursor_pos) final;
71 void update_gamepad(Gamepad const& /*gamepad*/) final {}
72 void disengage() final {}
73 [[nodiscard]] auto should_dispatch() const -> bool final;
74 [[nodiscard]] auto get_gamepad_binding() const -> std::optional<Gamepad::Binding> final { return {}; }
75 [[nodiscard]] auto get_value() const -> action::Value final { return m_value; }
76
77 glm::vec2 m_value{};
78 mutable bool m_changed{};
79};
80
82class GamepadButton : public IDigital {
83 public:
84 GamepadButton() = default;
85
86 explicit GamepadButton(int const trigger) : IDigital(trigger) {}
87
90
91 private:
92 void on_key(event::Key const& /*mb*/) final {}
93 void on_mouse_button(event::MouseButton const& /*mb*/) final {}
94 void on_scroll(event::Scroll const& /*scroll*/) final {}
95 void on_cursor_pos(event::CursorPos const& /*cursor_pos*/) final {}
96 void update_gamepad(Gamepad const& gamepad) final;
97 [[nodiscard]] auto get_gamepad_binding() const -> std::optional<Gamepad::Binding> final { return binding; }
98};
99
103 public:
104 GamepadAxis1D() = default;
105
108 explicit GamepadAxis1D(int const axis, float const dead_zone = dead_zone_v) : IGamepadAxis(dead_zone), axis(axis) {}
109
111 int axis{};
112
113 private:
114 void update_gamepad(Gamepad const& gamepad) final;
115 void disengage() final { m_value = {}; }
116 [[nodiscard]] auto get_value() const -> action::Value final { return m_value; }
117
118 float m_value{};
119};
120
123 public:
124 GamepadAxis2D() = default;
125
129 explicit GamepadAxis2D(int const x, int const y, float const dead_zone = dead_zone_v) : IGamepadAxis(dead_zone), x(x), y(y) {}
130
132 int x{};
134 int y{};
135
136 private:
137 void update_gamepad(Gamepad const& gamepad) final;
138 void disengage() final { m_value = {}; }
139 [[nodiscard]] auto get_value() const -> action::Value final { return m_value; }
140
141 glm::vec2 m_value{};
142};
143} // namespace le::input::action
Snapshot of gamepad / game controller state.
Definition gamepad.hpp:14
std::variant< FirstUsed, LastUsed, Id > Binding
Variant of selectors.
Definition gamepad.hpp:28
Base class for all actions.
Definition action_types.hpp:16
Mouse cursor.
Definition action.hpp:66
1D gamepad axis action.
Definition action.hpp:102
int axis
Matching axis.
Definition action.hpp:111
GamepadAxis1D(int const axis, float const dead_zone=dead_zone_v)
Definition action.hpp:108
2D gamepad axis action.
Definition action.hpp:122
int x
Matching x axis.
Definition action.hpp:132
GamepadAxis2D(int const x, int const y, float const dead_zone=dead_zone_v)
Definition action.hpp:129
int y
Matching y axis.
Definition action.hpp:134
Digital action for a primary gamepad button match.
Definition action.hpp:82
GamepadButton(int const trigger)
Definition action.hpp:86
Gamepad::Binding binding
Gamepad binding.
Definition action.hpp:89
Interface for binary 1D axis actions.
Definition action_types.hpp:88
Interface for binary 2D axis actions.
Definition action_types.hpp:114
Interface for digital actions.
Definition action_types.hpp:65
Definition action_types.hpp:138
static constexpr auto dead_zone_v
Definition action_types.hpp:140
float dead_zone
Values with magnitude below this are floored to 0.
Definition action_types.hpp:147
1D axis action for key matches.
Definition action.hpp:15
KeyAxis1D(int const lo, int const hi)
Definition action.hpp:21
2D axis action for key matches.
Definition action.hpp:25
KeyAxis2D(glm::ivec2 const horz, glm::ivec2 const vert)
Definition action.hpp:31
Class template for actions using key matches.
Definition action_types.hpp:163
Digital action for a key match.
Definition action.hpp:6
KeyDigital(int const trigger)
Definition action.hpp:11
1D axis action for mouse button matches.
Definition action.hpp:44
MouseButtonAxis1D(int const lo, int const hi)
Definition action.hpp:50
Class template for actions using mouse button matches.
Definition action_types.hpp:178
Digital action for a mouse button match.
Definition action.hpp:35
MouseButtonDigital(int const trigger)
Definition action.hpp:40
1D Mouse scroll (Y axis).
Definition action.hpp:54
MouseScroll1D()
Definition action.hpp:56
2D Mouse scroll (X and Y axes).
Definition action.hpp:60
MouseScroll2D()
Definition action.hpp:62
Base class for mouse scroll actions.
Definition action_types.hpp:192
Dim
Definition action_types.hpp:194
Value associated with an action callback.
Definition action_types.hpp:35
Definition action.hpp:4
Definition event.hpp:32
Definition event.hpp:39
Definition event.hpp:47
Definition event.hpp:55
Selector for first used gamepad.
Definition gamepad.hpp:24