Merge pull request #55514 from RandomShaper/better_node_delete_3.x

This commit is contained in:
Rémi Verschelde 2022-01-05 10:25:33 +01:00 committed by GitHub
commit e22f7ea3c0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 37 deletions

View file

@ -151,12 +151,6 @@ void Node::_notification(int p_notification) {
data.in_constructor = false;
} break;
case NOTIFICATION_PREDELETE: {
set_owner(nullptr);
while (data.owned.size()) {
data.owned.front()->get()->set_owner(nullptr);
}
if (data.parent) {
data.parent->remove_child(this);
}
@ -164,10 +158,8 @@ void Node::_notification(int p_notification) {
// kill children as cleanly as possible
while (data.children.size()) {
Node *child = data.children[data.children.size() - 1]; //begin from the end because its faster and more consistent with creation
remove_child(child);
memdelete(child);
}
} break;
}
}
@ -242,6 +234,10 @@ void Node::_propagate_enter_tree() {
}
void Node::_propagate_after_exit_tree() {
if (data.owner) {
data.owner->data.owned.erase(data.OW);
data.owner = nullptr;
}
data.blocked++;
for (int i = 0; i < data.children.size(); i++) {
data.children[i]->_propagate_after_exit_tree();
@ -1153,31 +1149,6 @@ void Node::add_child_below_node(Node *p_node, Node *p_child, bool p_legible_uniq
}
}
void Node::_propagate_validate_owner() {
if (data.owner) {
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;
}
}
for (int i = 0; i < data.children.size(); i++) {
data.children[i]->_propagate_validate_owner();
}
}
void Node::remove_child(Node *p_child) {
ERR_FAIL_NULL(p_child);
ERR_FAIL_COND_MSG(data.blocked > 0, "Parent node is busy setting up children, remove_node() failed. Consider using call_deferred(\"remove_child\", child) instead.");
@ -1226,9 +1197,6 @@ void Node::remove_child(Node *p_child) {
p_child->data.parent = nullptr;
p_child->data.pos = -1;
// validate owner
p_child->_propagate_validate_owner();
if (data.inside_tree) {
p_child->_propagate_after_exit_tree();
}

View file

@ -162,7 +162,6 @@ private:
void _propagate_ready();
void _propagate_exit_tree();
void _propagate_after_exit_tree();
void _propagate_validate_owner();
void _print_stray_nodes();
void _propagate_pause_owner(Node *p_owner);
Array _get_node_and_resource(const NodePath &p_path);