Clear only owners that are no longer in the same tree
This commit is contained in:
@ -229,15 +229,32 @@ void Node::_propagate_enter_tree() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Node::_propagate_after_exit_tree() {
|
void Node::_propagate_after_exit_tree() {
|
||||||
|
// Clear owner if it was not part of the pruned branch
|
||||||
if (data.owner) {
|
if (data.owner) {
|
||||||
data.owner->data.owned.erase(data.OW);
|
bool found = false;
|
||||||
data.owner = nullptr;
|
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++;
|
data.blocked++;
|
||||||
for (int i = data.children.size() - 1; i >= 0; i--) {
|
for (int i = data.children.size() - 1; i >= 0; i--) {
|
||||||
data.children[i]->_propagate_after_exit_tree();
|
data.children[i]->_propagate_after_exit_tree();
|
||||||
}
|
}
|
||||||
data.blocked--;
|
data.blocked--;
|
||||||
|
|
||||||
emit_signal(SceneStringNames::get_singleton()->tree_exited);
|
emit_signal(SceneStringNames::get_singleton()->tree_exited);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user