diff options
-rw-r--r-- | core/input/input.cpp | 14 | ||||
-rw-r--r-- | core/input/input.h | 1 | ||||
-rw-r--r-- | doc/classes/Input.xml | 6 |
3 files changed, 21 insertions, 0 deletions
diff --git a/core/input/input.cpp b/core/input/input.cpp index fa2f00bf8d..3ddb151f23 100644 --- a/core/input/input.cpp +++ b/core/input/input.cpp @@ -90,6 +90,7 @@ Input::MouseMode Input::get_mouse_mode() const { } void Input::_bind_methods() { + ClassDB::bind_method(D_METHOD("is_anything_pressed"), &Input::is_anything_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); @@ -218,6 +219,19 @@ Input::VelocityTrack::VelocityTrack() { reset(); } +bool Input::is_anything_pressed() const { + _THREAD_SAFE_METHOD_ + + for (Map<StringName, Input::Action>::Element *E = action_state.front(); E; E = E->next()) { + if (E->get().pressed) { + return true; + } + } + return !keys_pressed.is_empty() || + !joy_buttons_pressed.is_empty() || + mouse_button_mask > MouseButton::NONE; +} + bool Input::is_key_pressed(Key p_keycode) const { _THREAD_SAFE_METHOD_ return keys_pressed.has(p_keycode); diff --git a/core/input/input.h b/core/input/input.h index e5ef31ab4f..80f260f30e 100644 --- a/core/input/input.h +++ b/core/input/input.h @@ -242,6 +242,7 @@ public: static Input *get_singleton(); + bool is_anything_pressed() const; bool is_key_pressed(Key p_keycode) const; bool is_physical_key_pressed(Key p_keycode) const; bool is_mouse_button_pressed(MouseButton p_button) const; diff --git a/doc/classes/Input.xml b/doc/classes/Input.xml index 45b15331d2..423e58f5c6 100644 --- a/doc/classes/Input.xml +++ b/doc/classes/Input.xml @@ -209,6 +209,12 @@ [b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return [code]false[/code] even if one of the action's keys is pressed. See [url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input examples[/url] in the documentation for more information. </description> </method> + <method name="is_anything_pressed" qualifiers="const"> + <return type="bool" /> + <description> + Returns [code]true[/code] if any action, key, joypad button, or mouse button is being pressed. This will also return [code]true[/code] if any action is simulated via code by calling [method action_press]. + </description> + </method> <method name="is_joy_button_pressed" qualifiers="const"> <return type="bool" /> <argument index="0" name="device" type="int" /> |