Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
efc2ecc
Fix remote deselection not working when selection limit is reached
YeldhamDev Jul 4, 2025
51678cc
Fix being able to select hidden transform gizmo
ryevdokimov Dec 26, 2024
f5aacc9
stop clearing editor_plugin_screen on script edit
SchultzenDK Jul 31, 2025
f3267c0
Fix `FindInFilesPanel` sizing issues
arkology Jul 6, 2025
ff111c8
Move /editor/scene folder from `core` to `docks` codeowner, and remov…
Ivorforce Aug 8, 2025
49e3eba
Consolidate frame_changed signal into CameraFeed
shiena Jun 21, 2025
f0eddb8
Fix issues searching RichTextLabel when search result is in a table
aaronp64 Aug 8, 2025
86e61a3
Use MSDF instead of MTSDF for font rendering.
bruvzg Aug 8, 2025
b9878b3
Fix skeleton get_global_transform call before is_inside_tree
thederickff Aug 8, 2025
2bc9bf5
Add new line when dropping onready on empty line
kitbdev Aug 8, 2025
87b62b9
Fix remote tree max selection warning not showing properly
YeldhamDev Aug 9, 2025
d4b7222
fixed screen_orientation not being assigned on ios
TCROC Aug 10, 2025
3b813d0
[macOS] Fix `warp_mouse` in game mode.
bruvzg Jul 22, 2025
edee07b
Fix cinematic preview causing the editor redraw continuously and aspe…
ryevdokimov Aug 9, 2025
510c8e6
fix function used in the code example
leandro-benedet-garcia Aug 10, 2025
5876648
Fix C# environment variables (SDL-related issue)
Nintorch Jul 30, 2025
1672b69
Fix node can't be rotated by holding ctrl/command while in select mode
ryevdokimov Aug 9, 2025
a979cfd
Don't open folders as file in script editor
KoBeWi Aug 11, 2025
cd70d36
Merge pull request #109504 from leandro-benedet-garcia/changed-shape-…
Repiteo Aug 11, 2025
6807ec6
Merge pull request #109441 from aaronp64/rtl_table_search
Repiteo Aug 11, 2025
f90470f
Merge pull request #109474 from YeldhamDev/remote_tree_warn_fix
Repiteo Aug 11, 2025
da91a55
Merge pull request #109283 from Nintorch/master
Repiteo Aug 11, 2025
7791eed
Merge pull request #109444 from thederickff/ba-transform-before-esk
Repiteo Aug 11, 2025
1ee48c5
Merge pull request #109478 from TCROC/fix-ios-auto-orientation
Repiteo Aug 11, 2025
1f0f355
Merge pull request #109448 from kitbdev/script-drop-onready-add-empty…
Repiteo Aug 11, 2025
098214b
Merge pull request #108297 from YeldhamDev/inverse_sel_fix
Repiteo Aug 11, 2025
69f5aec
Merge pull request #104809 from shiena/fix/missing_frame_changed
Repiteo Aug 11, 2025
7f2b15f
Merge pull request #109424 from Ivorforce/editor-scene-codeowner
Repiteo Aug 11, 2025
6303056
Merge pull request #108858 from bruvzg/mac_emb_wrp
Repiteo Aug 11, 2025
ca45211
Merge pull request #109437 from bruvzg/msdf_no_t
Repiteo Aug 11, 2025
5bcf9a5
Fix drive selection issue on Android
syntaxerror247 Aug 11, 2025
c687d7e
[TVG] Use heap for XML parser allocs.
bruvzg Aug 11, 2025
74eba7a
Revert the removal of the `gradle_build/compress_native_libraries` ex…
Jun 18, 2025
54ac5cd
Fix shortcut reset for spatial_editor/tool_select
Giganzo Aug 12, 2025
eee7ce6
Fix snapping logic in Range
aaronfranke Jul 29, 2025
af8bdac
Use r128.h for high precision snapping
aaronfranke Aug 12, 2025
10fd716
Add methods to check which event first triggered "just pressed/releas…
bruvzg Aug 12, 2025
c3cc1ba
Improve shader overloaded function error reporting.
bruvzg Aug 12, 2025
29ff6c3
Merge pull request #107681 from m4gr3d/revert_remove_compress_native_…
Repiteo Aug 12, 2025
9016df6
Merge pull request #109539 from Giganzo/shortcut-reset
Repiteo Aug 12, 2025
a420585
Merge pull request #109540 from bruvzg/input_timestamps
Repiteo Aug 12, 2025
cc9fcbe
Merge pull request #109100 from aaronfranke/range-snap
Repiteo Aug 12, 2025
916af46
Merge pull request #109522 from KoBeWi/resource_of_type_Folder
Repiteo Aug 12, 2025
2a52602
Merge pull request #108792 from arkology/find-in-files-panel-sizing
Repiteo Aug 12, 2025
fa5035f
Merge pull request #109465 from ryevdokimov/fix-ctrl-command-rotate
Repiteo Aug 12, 2025
8aa37ca
Merge pull request #109469 from ryevdokimov/fix-previews
Repiteo Aug 12, 2025
4596894
Clarify the types `InputEvent.is_action_type()` will return `true` for
Calinou Aug 12, 2025
fb829bd
Fix mobile renderer motion vectors regression
devloglogan Aug 12, 2025
6901594
add dropdown keyword to MenuButton and OptionButton
dawdle-deer Aug 7, 2025
69613d2
SceneCreateDialog: Hide 3D Scene option when 3D editor is disabled
timothyqiu Aug 13, 2025
39141e7
Disallow clicking to toggle the checkbox of a theme override of type …
Rindbee Aug 10, 2025
5ba1d0f
Fix TileMapLayer terrain preview icons for transformed alternative tiles
kleonc Aug 13, 2025
a8bcf40
mention 'build version' in iOS, macOS, and visionOS export docs
AdriaandeJongh Aug 13, 2025
c6c4c55
Fix name included in animation when saved from slice in scene importer
Aug 13, 2025
eeb6ac0
Merge pull request #109530 from bruvzg/svg_alloc
Repiteo Aug 13, 2025
a245f21
Merge pull request #109480 from Rindbee/apply-different-strategies-wh…
Repiteo Aug 13, 2025
5a9a05e
Merge pull request #109584 from kleonc/tile_terrain_preview_icon_fix_…
Repiteo Aug 13, 2025
583f3bf
Merge pull request #109556 from devloglogan/mobile-motion-vec-fix
Repiteo Aug 13, 2025
90ba13b
Merge pull request #109528 from syntaxerror247/drive-selection-issue
Repiteo Aug 13, 2025
1ecbd75
Merge pull request #109593 from ShadowCow13/animation-slice-name
Repiteo Aug 13, 2025
5120689
Merge pull request #109402 from dawdle-deer/dropdown-search-term
Repiteo Aug 13, 2025
de463e0
Merge pull request #109564 from timothyqiu/scene-create-3d
Repiteo Aug 13, 2025
1763b43
Android: Fix build command in standard AAB export
syntaxerror247 Aug 14, 2025
5033a6a
Never duplicate Scripts when duplicating resources recursively
Jul 9, 2025
7726f6e
Merge pull request #108453 from MarianoGnu/ms/dont-duplicate-scripts
Repiteo Aug 14, 2025
f3b908b
Merge pull request #109608 from syntaxerror247/patch-2
Repiteo Aug 14, 2025
a02ff44
Merge pull request #109577 from AdriaandeJongh/clarify-build-version
Repiteo Aug 14, 2025
6f298b6
Merge pull request #109548 from bruvzg/shader_x
Repiteo Aug 14, 2025
e67074d
Merge pull request #109552 from Calinou/doc-inputevent-is-action-type
Repiteo Aug 14, 2025
3eed536
Don't use `alloca()` in `Object::emit_signalp()` to prevent stack ove…
dsnopek Aug 14, 2025
6c907c2
Fix `move_and_slide` forcing synchronization with physics thread
mihe Aug 14, 2025
fc76244
Update _physics_process and _process docs to reflect implementation.
lavishbehemoth Aug 4, 2025
821fecd
GLTF: Fix crash reading texture sampler for non-existent texture
aaronfranke Aug 15, 2025
34d01ea
Merge pull request #109607 from mihe/character-thread-sync
Repiteo Aug 15, 2025
d98931c
Merge pull request #109320 from lavishbehemoth/process-docs
Repiteo Aug 15, 2025
8892a8d
Merge pull request #109612 from dsnopek/emit-signal-no-alloca
Repiteo Aug 15, 2025
a43e6e6
Merge pull request #100813 from ryevdokimov/prevent-selecting-hidden-…
Repiteo Aug 15, 2025
2853d91
Merge pull request #109176 from SchultzenDK/fix-script-clears-gizmos
Repiteo Aug 15, 2025
0c51ede
Merge pull request #109625 from aaronfranke/gltf-texture-sampler-crash
Repiteo Aug 15, 2025
7aeecac
Merge commit godotengine/godot@0c51ede2434d99d2c80dc87b7df179db66537f1c
Spartan322 Aug 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,11 @@
/editor/icons/ @godotengine/usability
/editor/import/ @godotengine/import
/editor/inspector/ @godotengine/docks
/editor/scene/ @godotengine/core
/editor/scene/2d/ @godotengine/2d-editor
/editor/scene/2d/physics @godotengine/2d-editor @godotengine/physics
/editor/scene/3d/ @godotengine/3d-editor
/editor/scene/3d/physics @godotengine/3d-editor @godotengine/physics
/editor/scene/gui/ @godotengine/usability @godotengine/gui-nodes
/editor/scene/gui/ @godotengine/gui-nodes
/editor/themes/ @godotengine/usability @godotengine/gui-nodes
/editor/translations/ @godotengine/usability

Expand Down
68 changes: 68 additions & 0 deletions core/input/input.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,8 @@ void Input::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_action_pressed", "action", "exact_match"), &Input::is_action_pressed, DEFVAL(false));
ClassDB::bind_method(D_METHOD("is_action_just_pressed", "action", "exact_match"), &Input::is_action_just_pressed, DEFVAL(false));
ClassDB::bind_method(D_METHOD("is_action_just_released", "action", "exact_match"), &Input::is_action_just_released, DEFVAL(false));
ClassDB::bind_method(D_METHOD("is_action_just_pressed_by_event", "action", "event", "exact_match"), &Input::is_action_just_pressed_by_event, DEFVAL(false));
ClassDB::bind_method(D_METHOD("is_action_just_released_by_event", "action", "event", "exact_match"), &Input::is_action_just_released_by_event, DEFVAL(false));
ClassDB::bind_method(D_METHOD("get_action_strength", "action", "exact_match"), &Input::get_action_strength, DEFVAL(false));
ClassDB::bind_method(D_METHOD("get_action_raw_strength", "action", "exact_match"), &Input::get_action_raw_strength, DEFVAL(false));
ClassDB::bind_method(D_METHOD("get_axis", "negative_action", "positive_action"), &Input::get_axis);
Expand Down Expand Up @@ -413,6 +415,37 @@ bool Input::is_action_just_pressed(const StringName &p_action, bool p_exact) con
}
}

bool Input::is_action_just_pressed_by_event(const StringName &p_action, const Ref<InputEvent> &p_event, bool p_exact) const {
ERR_FAIL_COND_V_MSG(!InputMap::get_singleton()->has_action(p_action), false, InputMap::get_singleton()->suggest_actions(p_action));
ERR_FAIL_COND_V(p_event.is_null(), false);

if (disable_input) {
return false;
}

HashMap<StringName, ActionState>::ConstIterator E = action_states.find(p_action);
if (!E) {
return false;
}

if (p_exact && E->value.exact == false) {
return false;
}

if (E->value.pressed_event_id != p_event->get_instance_id()) {
return false;
}

// Backward compatibility for legacy behavior, only return true if currently pressed.
bool pressed_requirement = legacy_just_pressed_behavior ? E->value.cache.pressed : true;

if (Engine::get_singleton()->is_in_physics_frame()) {
return pressed_requirement && E->value.pressed_physics_frame == Engine::get_singleton()->get_physics_frames();
} else {
return pressed_requirement && E->value.pressed_process_frame == Engine::get_singleton()->get_process_frames();
}
}

bool Input::is_action_just_released(const StringName &p_action, bool p_exact) const {
ERR_FAIL_COND_V_MSG(!InputMap::get_singleton()->has_action(p_action), false, InputMap::get_singleton()->suggest_actions(p_action));

Expand All @@ -439,6 +472,37 @@ bool Input::is_action_just_released(const StringName &p_action, bool p_exact) co
}
}

bool Input::is_action_just_released_by_event(const StringName &p_action, const Ref<InputEvent> &p_event, bool p_exact) const {
ERR_FAIL_COND_V_MSG(!InputMap::get_singleton()->has_action(p_action), false, InputMap::get_singleton()->suggest_actions(p_action));
ERR_FAIL_COND_V(p_event.is_null(), false);

if (disable_input) {
return false;
}

HashMap<StringName, ActionState>::ConstIterator E = action_states.find(p_action);
if (!E) {
return false;
}

if (p_exact && E->value.exact == false) {
return false;
}

if (E->value.released_event_id != p_event->get_instance_id()) {
return false;
}

// Backward compatibility for legacy behavior, only return true if currently released.
bool released_requirement = legacy_just_pressed_behavior ? !E->value.cache.pressed : true;

if (Engine::get_singleton()->is_in_physics_frame()) {
return released_requirement && E->value.released_physics_frame == Engine::get_singleton()->get_physics_frames();
} else {
return released_requirement && E->value.released_process_frame == Engine::get_singleton()->get_process_frames();
}
}

float Input::get_action_strength(const StringName &p_action, bool p_exact) const {
ERR_FAIL_COND_V_MSG(!InputMap::get_singleton()->has_action(p_action), 0.0, InputMap::get_singleton()->suggest_actions(p_action));

Expand Down Expand Up @@ -897,10 +961,12 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
_update_action_cache(E.key, action_state);
// As input may come in part way through a physics tick, the earliest we can react to it is the next physics tick.
if (action_state.cache.pressed && !was_pressed) {
action_state.pressed_event_id = p_event->get_instance_id();
action_state.pressed_physics_frame = Engine::get_singleton()->get_physics_frames() + 1;
action_state.pressed_process_frame = Engine::get_singleton()->get_process_frames();
}
if (!action_state.cache.pressed && was_pressed) {
action_state.released_event_id = p_event->get_instance_id();
action_state.released_physics_frame = Engine::get_singleton()->get_physics_frames() + 1;
action_state.released_process_frame = Engine::get_singleton()->get_process_frames();
}
Expand Down Expand Up @@ -1029,6 +1095,7 @@ void Input::action_press(const StringName &p_action, float p_strength) {

// As input may come in part way through a physics tick, the earliest we can react to it is the next physics tick.
if (!action_state.cache.pressed) {
action_state.pressed_event_id = ObjectID();
action_state.pressed_physics_frame = Engine::get_singleton()->get_physics_frames() + 1;
action_state.pressed_process_frame = Engine::get_singleton()->get_process_frames();
}
Expand All @@ -1047,6 +1114,7 @@ void Input::action_release(const StringName &p_action) {
action_state.cache.strength = 0.0;
action_state.cache.raw_strength = 0.0;
// As input may come in part way through a physics tick, the earliest we can react to it is the next physics tick.
action_state.released_event_id = ObjectID();
action_state.released_physics_frame = Engine::get_singleton()->get_physics_frames() + 1;
action_state.released_process_frame = Engine::get_singleton()->get_process_frames();
action_state.device_states.clear();
Expand Down
4 changes: 4 additions & 0 deletions core/input/input.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,8 @@ class Input : public Object {
uint64_t pressed_process_frame = UINT64_MAX;
uint64_t released_physics_frame = UINT64_MAX;
uint64_t released_process_frame = UINT64_MAX;
ObjectID pressed_event_id;
ObjectID released_event_id;
bool exact = true;

struct DeviceState {
Expand Down Expand Up @@ -308,6 +310,8 @@ class Input : public Object {
bool is_action_pressed(const StringName &p_action, bool p_exact = false) const;
bool is_action_just_pressed(const StringName &p_action, bool p_exact = false) const;
bool is_action_just_released(const StringName &p_action, bool p_exact = false) const;
bool is_action_just_pressed_by_event(const StringName &p_action, const Ref<InputEvent> &p_event, bool p_exact = false) const;
bool is_action_just_released_by_event(const StringName &p_action, const Ref<InputEvent> &p_event, bool p_exact = false) const;
float get_action_strength(const StringName &p_action, bool p_exact = false) const;
float get_action_raw_strength(const StringName &p_action, bool p_exact = false) const;

Expand Down
6 changes: 6 additions & 0 deletions core/io/resource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,12 @@ Variant Resource::_duplicate_recursive(const Variant &p_variant, const Duplicate
DEV_ASSERT(false);
}
}
if (should_duplicate) {
Ref<Script> scr = sr;
if (scr.is_valid()) {
should_duplicate = false;
}
}
}
}
if (should_duplicate) {
Expand Down
22 changes: 17 additions & 5 deletions core/object/object.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1214,8 +1214,13 @@ Error Object::emit_signalp(const StringName &p_name, const Variant **p_args, int
return ERR_CANT_ACQUIRE_RESOURCE; //no emit, signals blocked
}

Callable *slot_callables = nullptr;
uint32_t *slot_flags = nullptr;
constexpr int MAX_SLOTS_ON_STACK = 5;
// Don't default initialize the Callable objects on the stack, just reserve the space - we'll memnew_placement() them later.
alignas(Callable) uint8_t slot_callable_stack[sizeof(Callable) * MAX_SLOTS_ON_STACK];
uint32_t slot_flags_stack[MAX_SLOTS_ON_STACK];

Callable *slot_callables = (Callable *)slot_callable_stack;
uint32_t *slot_flags = slot_flags_stack;
uint32_t slot_count = 0;

{
Expand All @@ -1236,11 +1241,13 @@ Error Object::emit_signalp(const StringName &p_name, const Variant **p_args, int
// which is needed in certain edge cases; e.g., https://github.com/godotengine/godot/issues/73889.
Ref<RefCounted> rc = Ref<RefCounted>(Object::cast_to<RefCounted>(this));

if (s->slot_map.size() > MAX_SLOTS_ON_STACK) {
slot_callables = (Callable *)memalloc(sizeof(Callable) * s->slot_map.size());
slot_flags = (uint32_t *)memalloc(sizeof(uint32_t) * s->slot_map.size());
}

// Ensure that disconnecting the signal or even deleting the object
// will not affect the signal calling.
slot_callables = (Callable *)alloca(sizeof(Callable) * s->slot_map.size());
slot_flags = (uint32_t *)alloca(sizeof(uint32_t) * s->slot_map.size());

for (const KeyValue<Callable, SignalData::Slot> &slot_kv : s->slot_map) {
memnew_placement(&slot_callables[slot_count], Callable(slot_kv.value.conn.callable));
slot_flags[slot_count] = slot_kv.value.conn.flags;
Expand Down Expand Up @@ -1310,6 +1317,11 @@ Error Object::emit_signalp(const StringName &p_name, const Variant **p_args, int
slot_callables[i].~Callable();
}

if (slot_callables != (Callable *)slot_callable_stack) {
memfree(slot_callables);
memfree(slot_flags);
}

return err;
}

Expand Down
3 changes: 2 additions & 1 deletion doc/classes/DirAccess.xml
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@
<return type="int" />
<description>
On Windows, returns the number of drives (partitions) mounted on the current filesystem.
On macOS, returns the number of mounted volumes.
On macOS and Android, returns the number of mounted volumes.
On Linux, returns the number of mounted volumes and GTK 3 bookmarks.
On other platforms, the method returns 0.
</description>
Expand All @@ -193,6 +193,7 @@
On Windows, returns the name of the drive (partition) passed as an argument (e.g. [code]C:[/code]).
On macOS, returns the path to the mounted volume passed as an argument.
On Linux, returns the path to the mounted volume or GTK 3 bookmark passed as an argument.
On Android (API level 30+), returns the path to the mounted volume as an argument.
On other platforms, or if the requested drive does not exist, the method returns an empty String.
</description>
</method>
Expand Down
29 changes: 27 additions & 2 deletions doc/classes/Input.xml
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,20 @@
If [param exact_match] is [code]false[/code], it ignores additional input modifiers for [InputEventKey] and [InputEventMouseButton] events, and the direction for [InputEventJoypadMotion] events.
[b]Note:[/b] Returning [code]true[/code] does not imply that the action is [i]still[/i] pressed. An action can be pressed and released again rapidly, and [code]true[/code] will still be returned so as not to miss input.
[b]Note:[/b] Due to keyboard ghosting, [method is_action_just_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.
[b]Note:[/b] During input handling (e.g. [method Node._input]), use [method InputEvent.is_action_pressed] instead to query the action state of the current event.
[b]Note:[/b] During input handling (e.g. [method Node._input]), use [method InputEvent.is_action_pressed] instead to query the action state of the current event. See also [method is_action_just_pressed_by_event].
</description>
</method>
<method name="is_action_just_pressed_by_event" qualifiers="const">
<return type="bool" />
<param index="0" name="action" type="StringName" />
<param index="1" name="event" type="InputEvent" />
<param index="2" name="exact_match" type="bool" default="false" />
<description>
Returns [code]true[/code] when the user has [i]started[/i] pressing the action event in the current frame or physics tick, and the first event that triggered action press in the current frame/physics tick was [param event]. It will only return [code]true[/code] on the frame or tick that the user pressed down the button.
This is useful for code that needs to run only once when an action is pressed, and the action is processed during input handling (e.g. [method Node._input]).
If [param exact_match] is [code]false[/code], it ignores additional input modifiers for [InputEventKey] and [InputEventMouseButton] events, and the direction for [InputEventJoypadMotion] events.
[b]Note:[/b] Returning [code]true[/code] does not imply that the action is [i]still[/i] pressed. An action can be pressed and released again rapidly, and [code]true[/code] will still be returned so as not to miss input.
[b]Note:[/b] Due to keyboard ghosting, [method is_action_just_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_action_just_released" qualifiers="const">
Expand All @@ -223,7 +236,19 @@
Returns [code]true[/code] when the user [i]stops[/i] pressing the action event in the current frame or physics tick. It will only return [code]true[/code] on the frame or tick that the user releases the button.
[b]Note:[/b] Returning [code]true[/code] does not imply that the action is [i]still[/i] not pressed. An action can be released and pressed again rapidly, and [code]true[/code] will still be returned so as not to miss input.
If [param exact_match] is [code]false[/code], it ignores additional input modifiers for [InputEventKey] and [InputEventMouseButton] events, and the direction for [InputEventJoypadMotion] events.
[b]Note:[/b] During input handling (e.g. [method Node._input]), use [method InputEvent.is_action_released] instead to query the action state of the current event.
[b]Note:[/b] During input handling (e.g. [method Node._input]), use [method InputEvent.is_action_released] instead to query the action state of the current event. See also [method is_action_just_released_by_event].
</description>
</method>
<method name="is_action_just_released_by_event" qualifiers="const">
<return type="bool" />
<param index="0" name="action" type="StringName" />
<param index="1" name="event" type="InputEvent" />
<param index="2" name="exact_match" type="bool" default="false" />
<description>
Returns [code]true[/code] when the user [i]stops[/i] pressing the action event in the current frame or physics tick, and the first event that triggered action release in the current frame/physics tick was [param event]. It will only return [code]true[/code] on the frame or tick that the user releases the button.
This is useful when an action is processed during input handling (e.g. [method Node._input]).
[b]Note:[/b] Returning [code]true[/code] does not imply that the action is [i]still[/i] not pressed. An action can be released and pressed again rapidly, and [code]true[/code] will still be returned so as not to miss input.
If [param exact_match] is [code]false[/code], it ignores additional input modifiers for [InputEventKey] and [InputEventMouseButton] events, and the direction for [InputEventJoypadMotion] events.
</description>
</method>
<method name="is_action_pressed" qualifiers="const">
Expand Down
2 changes: 1 addition & 1 deletion doc/classes/InputEvent.xml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
<method name="is_action_type" qualifiers="const">
<return type="bool" />
<description>
Returns [code]true[/code] if this input event's type is one that can be assigned to an input action.
Returns [code]true[/code] if this input event's type is one that can be assigned to an input action: [InputEventKey], [InputEventMouseButton], [InputEventJoypadButton], [InputEventJoypadMotion], [InputEventAction]. Returns [code]false[/code] for all other input event types.
</description>
</method>
<method name="is_canceled" qualifiers="const">
Expand Down
Loading