Merge pull request #110571 from WhalesState/get-children

Improve `Node::get_children` performance.
This commit is contained in:
Thaddeus Crews 2025-09-22 13:28:46 -05:00
commit 89c51cb183
No known key found for this signature in database
GPG key ID: 8C6E5FEB5FC03CCC

View file

@ -1814,14 +1814,30 @@ Node *Node::get_child(int p_index, bool p_include_internal) const {
TypedArray<Node> Node::get_children(bool p_include_internal) const {
ERR_THREAD_GUARD_V(TypedArray<Node>());
TypedArray<Node> arr;
int cc = get_child_count(p_include_internal);
arr.resize(cc);
for (int i = 0; i < cc; i++) {
arr[i] = get_child(i, p_include_internal);
_update_children_cache();
TypedArray<Node> children;
if (p_include_internal) {
children.resize(data.children_cache.size());
Array::Iterator itr = children.begin();
for (const Node *child : data.children_cache) {
*itr = child;
++itr;
}
} else {
const int size = data.children_cache.size() - data.internal_children_back_count_cache;
children.resize(size - data.internal_children_front_count_cache);
Array::Iterator itr = children.begin();
for (int i = data.internal_children_front_count_cache; i < size; i++) {
*itr = data.children_cache[i];
++itr;
}
}
return arr;
return children;
}
Node *Node::_get_child_by_name(const StringName &p_name) const {