Clear only owners that are no longer in the same tree

This commit is contained in:
Pedro J. Estébanez 2022-01-05 14:00:04 +01:00
parent d2ac67d55e
commit 2db9397fb9
1 changed files with 19 additions and 2 deletions

View File

@ -229,15 +229,32 @@ void Node::_propagate_enter_tree() {
}
void Node::_propagate_after_exit_tree() {
// Clear owner if it was not part of the pruned branch
if (data.owner) {
data.owner->data.owned.erase(data.OW);
data.owner = nullptr;
bool found = false;
Node *parent = data.parent;
while (parent) {
if (parent == data.owner) {
found = true;
break;
}
parent = parent->data.parent;
}
if (!found) {
data.owner->data.owned.erase(data.OW);
data.owner = nullptr;
}
}
data.blocked++;
for (int i = data.children.size() - 1; i >= 0; i--) {
data.children[i]->_propagate_after_exit_tree();
}
data.blocked--;
emit_signal(SceneStringNames::get_singleton()->tree_exited);
}