diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml index ad3f7e2aa59..0307e902ea5 100644 --- a/doc/classes/Node.xml +++ b/doc/classes/Node.xml @@ -395,6 +395,13 @@ Returns [code]true[/code] if the local system is the master of this node. + + + + Returns [code]true[/code] if the node is ready, i.e. it's inside scene tree and all its children are initialized. + [method request_ready] resets it back to [code]false[/code]. + + diff --git a/scene/main/node.cpp b/scene/main/node.cpp index e528a4a6723..1ece2879a11 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -3022,6 +3022,10 @@ bool Node::is_displayed_folded() const { return data.display_folded; } +bool Node::is_node_ready() const { + return !data.ready_first; +} + void Node::request_ready() { data.ready_first = true; } @@ -3122,6 +3126,7 @@ void Node::_bind_methods() { ClassDB::bind_method(D_METHOD("queue_free"), &Node::queue_delete); ClassDB::bind_method(D_METHOD("request_ready"), &Node::request_ready); + ClassDB::bind_method(D_METHOD("is_node_ready"), &Node::is_node_ready); ClassDB::bind_method(D_METHOD("set_network_master", "id", "recursive"), &Node::set_network_master, DEFVAL(true)); ClassDB::bind_method(D_METHOD("get_network_master"), &Node::get_network_master); diff --git a/scene/main/node.h b/scene/main/node.h index 133d01dbfb7..7b7ae20b28b 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -455,6 +455,7 @@ public: _FORCE_INLINE_ bool is_physics_interpolated_and_enabled() const { return is_inside_tree() && get_tree()->is_physics_interpolation_enabled() && is_physics_interpolated(); } void reset_physics_interpolation(); + bool is_node_ready() const; void request_ready(); static void print_stray_nodes();