Clear only owners that are no longer in the same tree
This commit is contained in:
parent
d2ac67d55e
commit
2db9397fb9
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue