12auto get_key_map() -> bimap<key_code, int>&
14 static bimap<key_code, int> keyMap;
29 auto gamepad = std::make_shared<os_gamepad>(index);
31 gamepads_[index] =
gamepad.get();
34 auto keyboard = std::make_shared<os_keyboard>();
38 auto mouse = std::make_shared<os_mouse>();
39 devices_.emplace_back(
mouse);
51 return *gamepads_.at(index);
79 auto pos = os::mouse::get_position();
86 for(
auto& kvp : gamepads_)
94 window_input_zone_ = window_zone;
99 work_input_zone_ = work_zone;
104 input_reference_size_ = reference_size;
112 return *work_input_zone_;
114 if(window_input_zone_)
116 return *window_input_zone_;
119 return {0, 0, 1024, 768};
126 case os::events::key_down:
133 case os::events::key_up:
141 case os::events::mouse_button:
146 switch(
e.button.state_id)
148 case os::state::pressed:
153 case os::state::released:
163 switch(
e.button.button)
165 case os::mouse::button::left:
170 case os::mouse::button::right:
175 case os::mouse::button::middle:
180 case os::mouse::button::x1:
186 case os::mouse::button::x2:
197 state_map.set_state(
static_cast<uint32_t
>(
mouse_button), state);
202 case os::events::mouse_motion:
207 case os::events::mouse_wheel:
216 case os::events::gamepad_added:
218 for(
auto& kvp : gamepads_)
225 case os::events::gamepad_removed:
227 for(
auto& kvp : gamepads_)
242 auto calc_zone = work_input_zone_ ? work_input_zone_ : window_input_zone_;
249 const auto& work_zone = *calc_zone;
251 coord remapped_pos{};
252 remapped_pos.
x = global_pos.x - work_zone.x;
253 remapped_pos.y = global_pos.y - work_zone.y;
255 if(input_reference_size_)
257 remapped_pos.x *= float(input_reference_size_->w) / float(work_zone.w);
258 remapped_pos.y *= float(input_reference_size_->h) / float(work_zone.h);
266 auto calc_zone = work_input_zone_ ? work_input_zone_ : window_input_zone_;
273 const auto& work_zone = *calc_zone;
275 auto right = work_zone.w;
277 auto bottom = work_zone.h;
279 if(input_reference_size_)
281 float scale_x = float(input_reference_size_->w) / float(work_zone.w);
282 float scale_y = float(input_reference_size_->h) / float(work_zone.h);
289 return pos.x >=
left && pos.x <=
right && pos.y >= top && pos.y <= bottom;
294 is_input_allowed_ = allowed;
296 for(
const auto& dev : devices_)
298 dev->set_is_input_allowed(allowed);
304 return is_input_allowed_;
Hash specialization for batch_key to enable use in std::unordered_map.