R-Type 0.1
Loading...
Searching...
No Matches
inputMapping.hpp
1#pragma once
2
3#include "systems/RenderConcept.hpp"
4#include <array>
5#include <cstdint>
6
7namespace rtk::Input {
16struct AxisData {
19};
20
28 enum class Type : uint8_t {
30 Keyboard,
33 Mouse
34 };
35
37
38 union {
43 };
44
49};
50
55public:
57 static constexpr uint8_t MAX_ACTIONS = 32;
59 static constexpr uint8_t BINDINGS_PER_ACTION = 4;
60
61private:
62 std::array<InputBinding, MAX_ACTIONS * BINDINGS_PER_ACTION> _bindings;
63
64public:
70 void bindKey(uint8_t bitIndex, ecs::concepts::Key key) {
71 addBinding(bitIndex, [key](InputBinding &b) {
73 b.key = key;
74 });
75 }
76
82 void bindGamepad(uint8_t bitIndex, ecs::concepts::GamepadButton button) {
83 addBinding(bitIndex, [button](InputBinding &b) {
85 b.button = button;
86 });
87 }
88
94 void bindMouse(uint8_t bitIndex, ecs::concepts::MouseButton mouseButton) {
95 addBinding(bitIndex, [mouseButton](InputBinding &b) {
97 b.mouse = mouseButton;
98 });
99 }
100
107 void bindGamepadAxis(uint8_t bitIndex, ecs::concepts::GamepadAxis axis,
108 float validationPression) {
109 addBinding(bitIndex, [axis, validationPression](InputBinding &b) {
111 b.axisData.axis = axis;
112 b.axisData.validationPression = validationPression;
113 });
114 }
115
120 const std::array<InputBinding, MAX_ACTIONS * BINDINGS_PER_ACTION> &
121 getBindings() const {
122 return _bindings;
123 }
124
125private:
126 template <typename Func> void addBinding(uint8_t bitIndex, Func assignFunc) {
127 if (bitIndex >= MAX_ACTIONS)
128 return;
129
130 size_t startIndex = bitIndex * BINDINGS_PER_ACTION;
131 for (size_t i = 0; i < BINDINGS_PER_ACTION; ++i) {
132 if (_bindings[startIndex + i].type == InputBinding::Type::NoneAction) {
133 assignFunc(_bindings[startIndex + i]);
134 return;
135 }
136 }
137 LOG_WARN("No free slots left for action bit " + std::to_string(bitIndex));
138 }
139};
140
142} // namespace rtk::Input
Table binding up to four physical controls to each of 32 actions.
Definition inputMapping.hpp:54
void bindGamepadAxis(uint8_t bitIndex, ecs::concepts::GamepadAxis axis, float validationPression)
Binds a gamepad axis to an action.
Definition inputMapping.hpp:107
void bindMouse(uint8_t bitIndex, ecs::concepts::MouseButton mouseButton)
Binds a mouse button to an action.
Definition inputMapping.hpp:94
static constexpr uint8_t BINDINGS_PER_ACTION
Number of controls that can trigger the same action.
Definition inputMapping.hpp:59
void bindKey(uint8_t bitIndex, ecs::concepts::Key key)
Binds a keyboard key to an action.
Definition inputMapping.hpp:70
static constexpr uint8_t MAX_ACTIONS
Number of actions, one per bit of InputState::actionMask.
Definition inputMapping.hpp:57
const std::array< InputBinding, MAX_ACTIONS *BINDINGS_PER_ACTION > & getBindings() const
Returns every binding slot.
Definition inputMapping.hpp:121
void bindGamepad(uint8_t bitIndex, ecs::concepts::GamepadButton button)
Binds a gamepad button to an action.
Definition inputMapping.hpp:82
GamepadAxis
Gamepad analog axes.
Definition RenderConcept.hpp:169
MouseButton
Mouse buttons.
Definition RenderConcept.hpp:130
GamepadButton
Gamepad buttons, with PlayStation style aliases.
Definition RenderConcept.hpp:140
Key
Keyboard keys, mirroring the values of the graphical library.
Definition RenderConcept.hpp:22
Gamepad axis binding with its activation threshold.
Definition inputMapping.hpp:16
float validationPression
Threshold, negative values trigger below it.
Definition inputMapping.hpp:18
ecs::concepts::GamepadAxis axis
Bound axis.
Definition inputMapping.hpp:17
One physical control bound to an action.
Definition inputMapping.hpp:24
ecs::concepts::GamepadButton button
Bound gamepad button.
Definition inputMapping.hpp:40
Type
Kind of physical control.
Definition inputMapping.hpp:28
@ GamepadButton
Gamepad button.
@ GamepadAxis
Gamepad axis past a threshold.
ecs::concepts::Key key
Bound key.
Definition inputMapping.hpp:39
Type type
Which union member is active.
Definition inputMapping.hpp:36
InputBinding()
Creates an empty binding.
Definition inputMapping.hpp:48
ecs::concepts::MouseButton mouse
Bound mouse button.
Definition inputMapping.hpp:41
AxisData axisData
Bound gamepad axis.
Definition inputMapping.hpp:42