diff options
Diffstat (limited to 'scene/main/node.cpp')
-rw-r--r-- | scene/main/node.cpp | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/scene/main/node.cpp b/scene/main/node.cpp index 52c1df8110..22bcfc947b 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -2073,6 +2073,11 @@ bool Node::is_property_pinned(const StringName &p_property) const { StringName Node::get_property_store_alias(const StringName &p_property) const { return p_property; } + +bool Node::is_part_of_edited_scene() const { + return Engine::get_singleton()->is_editor_hint() && is_inside_tree() && get_tree()->get_edited_scene_root() && + (get_tree()->get_edited_scene_root() == this || get_tree()->get_edited_scene_root()->is_ancestor_of(this)); +} #endif void Node::get_storable_properties(HashSet<StringName> &r_storable_properties) const { @@ -2617,7 +2622,9 @@ void Node::_set_tree(SceneTree *p_tree) { } #ifdef DEBUG_ENABLED -static void _Node_debug_sn(Object *p_obj) { +static HashMap<ObjectID, List<String>> _print_orphan_nodes_map; + +static void _print_orphan_nodes_routine(Object *p_obj) { Node *n = Object::cast_to<Node>(p_obj); if (!n) { return; @@ -2638,13 +2645,29 @@ static void _Node_debug_sn(Object *p_obj) { } else { path = String(p->get_name()) + "/" + p->get_path_to(n); } - print_line(itos(p_obj->get_instance_id()) + " - Stray Node: " + path + " (Type: " + n->get_class() + ")"); + + List<String> info_strings; + info_strings.push_back(path); + info_strings.push_back(n->get_class()); + + _print_orphan_nodes_map[p_obj->get_instance_id()] = info_strings; } #endif // DEBUG_ENABLED void Node::print_orphan_nodes() { #ifdef DEBUG_ENABLED - ObjectDB::debug_objects(_Node_debug_sn); + // Make sure it's empty. + _print_orphan_nodes_map.clear(); + + // Collect and print information about orphan nodes. + ObjectDB::debug_objects(_print_orphan_nodes_routine); + + for (const KeyValue<ObjectID, List<String>> &E : _print_orphan_nodes_map) { + print_line(itos(E.key) + " - Stray Node: " + E.value[0] + " (Type: " + E.value[1] + ")"); + } + + // Flush it after use. + _print_orphan_nodes_map.clear(); #endif } |