Antkeeper
0.0.1
src
engine
input
mapping.hpp
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2023 Christopher J. Howard
3
*
4
* This file is part of Antkeeper source code.
5
*
6
* Antkeeper source code is free software: you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation, either version 3 of the License, or
9
* (at your option) any later version.
10
*
11
* Antkeeper source code is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with Antkeeper source code. If not, see <http://www.gnu.org/licenses/>.
18
*/
19
20
#ifndef ANTKEEPER_INPUT_MAPPING_HPP
21
#define ANTKEEPER_INPUT_MAPPING_HPP
22
23
#include <
engine/input/mapping-type.hpp
>
24
#include <
engine/input/gamepad-axis.hpp
>
25
#include <
engine/input/gamepad-button.hpp
>
26
#include <
engine/input/mouse-button.hpp
>
27
#include <
engine/input/mouse-motion-axis.hpp
>
28
#include <
engine/input/mouse-scroll-axis.hpp
>
29
#include <
engine/input/scancode.hpp
>
30
#include <cstdint>
31
32
namespace
input
{
33
34
class
control;
35
class
gamepad
;
36
class
keyboard
;
37
class
mouse
;
38
42
class
mapping
43
{
44
public
:
48
mapping
() =
default
;
49
51
virtual
~mapping
() =
default
;
52
54
[[nodiscard]]
virtual
constexpr
mapping_type
get_mapping_type
() const noexcept = 0;
55
};
56
60
class
gamepad_axis_mapping
: public
mapping
61
{
62
public
:
71
gamepad_axis_mapping
(
input::gamepad
*
gamepad
,
gamepad_axis
axis,
bool
direction);
72
gamepad_axis_mapping
() =
default
;
74
76
[[nodiscard]]
inline
constexpr
mapping_type
get_mapping_type
() const noexcept
override
77
{
78
return
mapping_type::gamepad_axis
;
79
}
80
82
input::gamepad
*
gamepad
{
nullptr
};
83
85
gamepad_axis
axis{0};
86
88
bool
direction{
false
};
89
};
90
94
class
gamepad_button_mapping
:
public
mapping
95
{
96
public
:
104
gamepad_button_mapping
(
input::gamepad
*
gamepad
,
gamepad_button
button);
105
gamepad_button_mapping
() =
default
;
107
109
[[nodiscard]]
inline
constexpr
mapping_type
get_mapping_type
() const noexcept
override
110
{
111
return
mapping_type::gamepad_button
;
112
}
113
115
input::gamepad
*
gamepad
{
nullptr
};
116
118
gamepad_button
button{0};
119
};
120
124
class
key_mapping
:
public
mapping
125
{
126
public
:
136
key_mapping
(
input::keyboard
*
keyboard
,
input::scancode
scancode
, std::uint16_t modifiers = 0,
bool
repeat =
false
);
137
key_mapping
() =
default
;
139
141
[[nodiscard]]
inline
constexpr
mapping_type
get_mapping_type
() const noexcept
override
142
{
143
return
mapping_type::key
;
144
}
145
147
input::keyboard
*
keyboard
{
nullptr
};
148
150
scancode
scancode
{0};
151
153
std::uint16_t modifiers{0};
154
156
bool
repeat{
false
};
157
};
158
162
class
mouse_button_mapping
:
public
mapping
163
{
164
public
:
172
mouse_button_mapping
(
input::mouse
*
mouse
,
mouse_button
button);
173
mouse_button_mapping
() =
default
;
175
177
[[nodiscard]]
inline
constexpr
mapping_type
get_mapping_type
() const noexcept
override
178
{
179
return
mapping_type::mouse_button
;
180
}
181
183
input::mouse
*
mouse
{
nullptr
};
184
186
mouse_button
button{0};
187
};
188
192
class
mouse_motion_mapping
:
public
mapping
193
{
194
public
:
203
mouse_motion_mapping
(
input::mouse
*
mouse
,
mouse_motion_axis
axis,
bool
direction);
204
mouse_motion_mapping
() =
default
;
206
208
[[nodiscard]]
inline
constexpr
mapping_type
get_mapping_type
() const noexcept
override
209
{
210
return
mapping_type::mouse_motion
;
211
}
212
214
input::mouse
*
mouse
{
nullptr
};
215
217
mouse_motion_axis
axis{0};
218
220
bool
direction{
false
};
221
};
222
226
class
mouse_scroll_mapping
:
public
mapping
227
{
228
public
:
238
mouse_scroll_mapping
(
input::mouse
*
mouse
,
mouse_scroll_axis
axis,
bool
direction);
239
mouse_scroll_mapping
() =
default
;
241
243
[[nodiscard]]
inline
constexpr
mapping_type
get_mapping_type
() const noexcept
override
244
{
245
return
mapping_type::mouse_scroll
;
246
}
247
249
input::mouse
*
mouse
{
nullptr
};
250
252
mouse_scroll_axis
axis{0};
253
255
bool
direction{
false
};
256
};
257
258
}
// namespace input
259
260
#endif
// ANTKEEPER_INPUT_MAPPING_HPP
input::gamepad_axis_mapping
Maps a direction along a gamepad axis to a control input value.
Definition:
mapping.hpp:61
input::gamepad_axis_mapping::get_mapping_type
constexpr mapping_type get_mapping_type() const noexcept override
Returns mapping_type::gamepad_axis.
Definition:
mapping.hpp:76
input::gamepad_axis_mapping::gamepad_axis_mapping
gamepad_axis_mapping()=default
Constructs a gamepad axis mapping.
input::gamepad_button_mapping
Maps a gamepad button to a control input value.
Definition:
mapping.hpp:95
input::gamepad_button_mapping::gamepad_button_mapping
gamepad_button_mapping()=default
Constructs a gamepad button mapping.
input::gamepad_button_mapping::get_mapping_type
constexpr mapping_type get_mapping_type() const noexcept override
Returns mapping_type::gamepad_button.
Definition:
mapping.hpp:109
input::gamepad
A virtual gamepad which generates gamepad-related input events.
Definition:
gamepad.hpp:49
input::key_mapping
Maps a keyboard key to a control input value.
Definition:
mapping.hpp:125
input::key_mapping::key_mapping
key_mapping()=default
Constructs a key mapping.
input::key_mapping::get_mapping_type
constexpr mapping_type get_mapping_type() const noexcept override
Returns mapping_type::key.
Definition:
mapping.hpp:141
input::keyboard
A virtual keyboard which generates keyboard-related input events.
Definition:
keyboard.hpp:35
input::mapping
Abstract base class for input mappings.
Definition:
mapping.hpp:43
input::mapping::get_mapping_type
virtual constexpr mapping_type get_mapping_type() const noexcept=0
Returns the input mapping type.
input::mapping::~mapping
virtual ~mapping()=default
Destructs an input mapping.
input::mapping::mapping
mapping()=default
Constructs an input mapping.
input::mouse_button_mapping
Maps a mouse button to a control input value.
Definition:
mapping.hpp:163
input::mouse_button_mapping::mouse_button_mapping
mouse_button_mapping()=default
Constructs a mouse button mapping.
input::mouse_button_mapping::get_mapping_type
constexpr mapping_type get_mapping_type() const noexcept override
Returns mapping_type::mouse_button.
Definition:
mapping.hpp:177
input::mouse_motion_mapping
Maps a direction along a mouse motion axis to a control input value.
Definition:
mapping.hpp:193
input::mouse_motion_mapping::get_mapping_type
constexpr mapping_type get_mapping_type() const noexcept override
Returns mapping_type::mouse_motion.
Definition:
mapping.hpp:208
input::mouse_motion_mapping::mouse_motion_mapping
mouse_motion_mapping()=default
Constructs a mouse motion mapping.
input::mouse_scroll_mapping
Maps a direction along a mouse scroll axis to a control input value.
Definition:
mapping.hpp:227
input::mouse_scroll_mapping::get_mapping_type
constexpr mapping_type get_mapping_type() const noexcept override
Returns mapping_type::mouse_scroll.
Definition:
mapping.hpp:243
input::mouse_scroll_mapping::mouse_scroll_mapping
mouse_scroll_mapping()=default
Constructs a mouse scroll mapping.
input::mouse
A virtual mouse which generates mouse-related input events.
Definition:
mouse.hpp:36
gamepad-axis.hpp
gamepad-button.hpp
mapping-type.hpp
mouse-button.hpp
mouse-motion-axis.hpp
mouse-scroll-axis.hpp
input
Input devices, events, and mapping.
Definition:
action-events.hpp:23
input::mouse_motion_axis
mouse_motion_axis
Mouse motion axes.
Definition:
mouse-motion-axis.hpp:29
input::mouse_scroll_axis
mouse_scroll_axis
Mouse scroll axes.
Definition:
mouse-scroll-axis.hpp:29
input::gamepad_button
gamepad_button
Gamepad buttons.
Definition:
gamepad-button.hpp:29
input::scancode
scancode
Keyboard scancodes.
Definition:
scancode.hpp:33
input::device_type::keyboard
@ keyboard
Keyboard input device.
input::device_type::mouse
@ mouse
Mouse input device.
input::device_type::gamepad
@ gamepad
Gamepad input device.
input::mouse_button
mouse_button
Mouse buttons.
Definition:
mouse-button.hpp:29
input::mapping_type
mapping_type
Input mapping types.
Definition:
mapping-type.hpp:33
input::mapping_type::gamepad_axis
@ gamepad_axis
Gamepad axis mapping.
input::mapping_type::key
@ key
Key mapping.
input::mapping_type::mouse_button
@ mouse_button
Mouse button mapping.
input::mapping_type::mouse_scroll
@ mouse_scroll
Mouse scroll mapping.
input::mapping_type::mouse_motion
@ mouse_motion
Mouse motion mapping.
input::mapping_type::gamepad_button
@ gamepad_button
Gamepad button mapping.
input::gamepad_axis
gamepad_axis
Gamepad axes.
Definition:
gamepad-axis.hpp:29
scancode.hpp