Optimize Node::get_children.

Co-authored-by: Lukas Tenbrink <lukas.tenbrink@gmail.com>
This commit is contained in:
Mounir Tohami 2025-09-17 00:06:02 +03:00
parent 99a39ce6ea
commit 7dc6df3051

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 {