summaryrefslogtreecommitdiffstats
path: root/scene/main/node.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/main/node.cpp')
-rw-r--r--scene/main/node.cpp29
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
}