From 5935cee29849fa35fefc6e4e83619e9d4bf46603 Mon Sep 17 00:00:00 2001 From: SaracenOne Date: Fri, 31 Dec 2021 00:46:47 +0000 Subject: [PATCH] Clean preview_node of all none VisualInstances --- editor/plugins/spatial_editor_plugin.cpp | 30 ++++++++++++++++++++++++ editor/plugins/spatial_editor_plugin.h | 3 +++ 2 files changed, 33 insertions(+) diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp index d92c8f245bc..bc4fae61998 100644 --- a/editor/plugins/spatial_editor_plugin.cpp +++ b/editor/plugins/spatial_editor_plugin.cpp @@ -3639,6 +3639,35 @@ AABB SpatialEditorViewport::_calculate_spatial_bounds(const Spatial *p_parent, b return bounds; } +Node *SpatialEditorViewport::_sanitize_preview_node(Node *p_node) const { + Spatial *spatial = Object::cast_to(p_node); + if (spatial == nullptr) { + Spatial *replacement_node = memnew(Spatial); + replacement_node->set_name(p_node->get_name()); + p_node->replace_by(replacement_node); + memdelete(p_node); + p_node = replacement_node; + } else { + VisualInstance *visual_instance = Object::cast_to(spatial); + if (visual_instance == nullptr) { + Spatial *replacement_node = memnew(Spatial); + replacement_node->set_name(spatial->get_name()); + replacement_node->set_visible(spatial->is_visible()); + replacement_node->set_transform(spatial->get_transform()); + replacement_node->set_as_toplevel(spatial->is_set_as_toplevel()); + p_node->replace_by(replacement_node); + memdelete(p_node); + p_node = replacement_node; + } + } + + for (int i = 0; i < p_node->get_child_count(); i++) { + _sanitize_preview_node(p_node->get_child(i)); + } + + return p_node; +} + void SpatialEditorViewport::_create_preview(const Vector &files) const { for (int i = 0; i < files.size(); i++) { String path = files[i]; @@ -3655,6 +3684,7 @@ void SpatialEditorViewport::_create_preview(const Vector &files) const { if (scene.is_valid()) { Node *instance = scene->instance(); if (instance) { + instance = _sanitize_preview_node(instance); preview_node->add_child(instance); } } diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h index c1cde82ecc4..e25b23bd726 100644 --- a/editor/plugins/spatial_editor_plugin.h +++ b/editor/plugins/spatial_editor_plugin.h @@ -443,6 +443,9 @@ private: Vector3 _get_instance_position(const Point2 &p_pos) const; static AABB _calculate_spatial_bounds(const Spatial *p_parent, bool p_exclude_toplevel_transform = true); + + Node *_sanitize_preview_node(Node *p_node) const; + void _create_preview(const Vector &files) const; void _remove_preview(); bool _cyclical_dependency_exists(const String &p_target_scene_path, Node *p_desired_node);