|
@@ -91,6 +91,7 @@ Input::MouseMode Input::get_mouse_mode() const {
|
|
|
|
|
|
void Input::_bind_methods() {
|
|
void Input::_bind_methods() {
|
|
ClassDB::bind_method(D_METHOD("is_key_pressed", "keycode"), &Input::is_key_pressed);
|
|
ClassDB::bind_method(D_METHOD("is_key_pressed", "keycode"), &Input::is_key_pressed);
|
|
|
|
+ ClassDB::bind_method(D_METHOD("is_physical_key_pressed", "keycode"), &Input::is_physical_key_pressed);
|
|
ClassDB::bind_method(D_METHOD("is_mouse_button_pressed", "button"), &Input::is_mouse_button_pressed);
|
|
ClassDB::bind_method(D_METHOD("is_mouse_button_pressed", "button"), &Input::is_mouse_button_pressed);
|
|
ClassDB::bind_method(D_METHOD("is_joy_button_pressed", "device", "button"), &Input::is_joy_button_pressed);
|
|
ClassDB::bind_method(D_METHOD("is_joy_button_pressed", "device", "button"), &Input::is_joy_button_pressed);
|
|
ClassDB::bind_method(D_METHOD("is_action_pressed", "action", "exact_match"), &Input::is_action_pressed, DEFVAL(false));
|
|
ClassDB::bind_method(D_METHOD("is_action_pressed", "action", "exact_match"), &Input::is_action_pressed, DEFVAL(false));
|
|
@@ -223,6 +224,11 @@ bool Input::is_key_pressed(Key p_keycode) const {
|
|
return keys_pressed.has(p_keycode);
|
|
return keys_pressed.has(p_keycode);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+bool Input::is_physical_key_pressed(Key p_keycode) const {
|
|
|
|
+ _THREAD_SAFE_METHOD_
|
|
|
|
+ return physical_keys_pressed.has(p_keycode);
|
|
|
|
+}
|
|
|
|
+
|
|
bool Input::is_mouse_button_pressed(MouseButton p_button) const {
|
|
bool Input::is_mouse_button_pressed(MouseButton p_button) const {
|
|
_THREAD_SAFE_METHOD_
|
|
_THREAD_SAFE_METHOD_
|
|
return (mouse_button_mask & mouse_button_to_mask(p_button)) != MouseButton::NONE;
|
|
return (mouse_button_mask & mouse_button_to_mask(p_button)) != MouseButton::NONE;
|
|
@@ -465,6 +471,13 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
|
|
keys_pressed.erase(k->get_keycode());
|
|
keys_pressed.erase(k->get_keycode());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ if (k.is_valid() && !k->is_echo() && k->get_physical_keycode() != Key::NONE) {
|
|
|
|
+ if (k->is_pressed()) {
|
|
|
|
+ physical_keys_pressed.insert(k->get_physical_keycode());
|
|
|
|
+ } else {
|
|
|
|
+ physical_keys_pressed.erase(k->get_physical_keycode());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
Ref<InputEventMouseButton> mb = p_event;
|
|
Ref<InputEventMouseButton> mb = p_event;
|
|
|
|
|
|
@@ -862,6 +875,7 @@ void Input::release_pressed_events() {
|
|
flush_buffered_events(); // this is needed to release actions strengths
|
|
flush_buffered_events(); // this is needed to release actions strengths
|
|
|
|
|
|
keys_pressed.clear();
|
|
keys_pressed.clear();
|
|
|
|
+ physical_keys_pressed.clear();
|
|
joy_buttons_pressed.clear();
|
|
joy_buttons_pressed.clear();
|
|
_joy_axis.clear();
|
|
_joy_axis.clear();
|
|
|
|
|