Unravel Engine C++ Reference
Loading...
Searching...
No Matches
input.cpp
Go to the documentation of this file.
1#include "input.h"
2#include <engine/engine.h>
3#include <engine/events.h>
6
7#include <logging/logging.h>
8
9namespace unravel
10{
11
12
14{
15 input::action_map mapper;
16 // default mapping
17 mapper.map("Mouse Left", input::mouse_button::left_button);
18 mapper.map("Mouse Right", input::mouse_button::right_button);
19 mapper.map("Mouse Middle", input::mouse_button::middle_button);
20
21 mapper.map("Mouse X", input::mouse_axis::x);
22 mapper.map("Mouse Y", input::mouse_axis::y);
23 mapper.map("Mouse ScrollWheel", input::mouse_axis::scroll);
24
25 mapper.map("Horizontal", input::key_code::a, -1.0f);
26 mapper.map("Horizontal", input::key_code::d, 1.0f);
27 mapper.map("Horizontal", input::key_code::left, -1.0f);
28 mapper.map("Horizontal", input::key_code::right, 1.0f);
29
30 mapper.map("Horizontal", input::gamepad_360::axis::left_stick_x, input::axis_range::full, -1.0f, 1.0f);
31
32 mapper.map("Vertical", input::key_code::w, 1.0f);
33 mapper.map("Vertical", input::key_code::s, -1.0f);
34 mapper.map("Vertical", input::key_code::up, 1.0f);
35 mapper.map("Vertical", input::key_code::down, -1.0f);
37
38 mapper.map("Jump", input::key_code::space, 1.0f);
39 mapper.map("Jump", input::gamepad_360::button::a);
41 mapper.map("Run", input::key_code::lshift, 1.0f);
42
43 mapper.map("Submit", input::key_code::enter, 1.0f);
44 mapper.map("Cancel", input::key_code::escape, 1.0f);
45
46 return mapper;
47}
48
50{
51 APPLOG_TRACE("{}::{}", hpp::type_name_str(*this), __func__);
52 manager.init();
53
54 return true;
55}
56
58{
59 APPLOG_TRACE("{}::{}", hpp::type_name_str(*this), __func__);
60
61 return true;
62}
63
64auto input_system::get_analog_value(const input::action_id_t& action) const -> float
65{
66 const auto& ctx = engine::context();
67 const auto& set = ctx.get<settings>();
68 float analog = 0.0f;
69
70 for(const auto& device : manager.get_all_devices())
71 {
72 analog += set.input.actions.get_analog_value(action, *device);
73 }
74
75 return analog;
76}
77
78auto input_system::get_digital_value(const input::action_id_t& action) const -> bool
79{
80 const auto& ctx = engine::context();
81 const auto& set = ctx.get<settings>();
82
83 bool digital = false;
84
85 for(const auto& device : manager.get_all_devices())
86 {
87 digital |= set.input.actions.get_digital_value(action, *device);
88 }
89
90 return digital;
91}
92auto input_system::is_pressed(const input::action_id_t& action) const -> bool
93{
94 const auto& ctx = engine::context();
95 const auto& set = ctx.get<settings>();
96
97 bool pressed = false;
98
99 for(const auto& device : manager.get_all_devices())
100 {
101 pressed |= set.input.actions.is_pressed(action, *device);
102 }
103
104 return pressed;
105}
106
107auto input_system::is_released(const input::action_id_t& action) const -> bool
108{
109 const auto& ctx = engine::context();
110 const auto& set = ctx.get<settings>();
111
112 bool released = false;
113
114 for(const auto& device : manager.get_all_devices())
115 {
116 released |= set.input.actions.is_released(action, *device);
117 }
118
119 return released;
120}
121
122auto input_system::is_down(const input::action_id_t& action) const -> bool
123{
124 const auto& ctx = engine::context();
125 const auto& set = ctx.get<settings>();
126
127 bool down = false;
128
129 for(const auto& device : manager.get_all_devices())
130 {
131 down |= set.input.actions.is_down(action, *device);
132 }
133
134 return down;
135}
136
137} // namespace unravel
void map(const action_id_t &action, gamepad_axis axis, axis_range range=axis_range::full, float min_analog_value=-1.0f, float max_analog_value=1.0f)
#define APPLOG_TRACE(...)
Definition logging.h:17
std::string action_id_t
Definition action_id.hpp:6
static const gamepad_axis left_stick_y
static const gamepad_axis left_stick_x
static const gamepad_axis right_trigger
static const gamepad_button a
static auto context() -> rtti::context &
Definition engine.cpp:115
static auto get_default_mapping() -> input::action_map
Definition input.cpp:13
auto get_digital_value(const input::action_id_t &action) const -> bool
Definition input.cpp:78
auto get_analog_value(const input::action_id_t &action) const -> float
Definition input.cpp:64
auto is_released(const input::action_id_t &action) const -> bool
Definition input.cpp:107
auto is_pressed(const input::action_id_t &action) const -> bool
Definition input.cpp:92
auto init(rtti::context &ctx) -> bool
Definition input.cpp:49
auto is_down(const input::action_id_t &action) const -> bool
Definition input.cpp:122
auto deinit(rtti::context &ctx) -> bool
Definition input.cpp:57