summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZi Ye <major.mcdoom@gmail.com>2024-02-12 22:29:31 -0600
committerZi Ye <major.mcdoom@gmail.com>2024-02-12 22:29:31 -0600
commit123dbdb4af22bc26686a9da20b5f5ddd620292db (patch)
tree28619945a0ed4fb8793bbbc52fe0ad3902f8b4aa
parent9050ee1542f4e071188e8e4f868f3507bb31b3dc (diff)
downloadredot-engine-123dbdb4af22bc26686a9da20b5f5ddd620292db.tar.gz
Fixed an edge case bug in drag-and-drop Node3D spawning.
-rw-r--r--editor/plugins/node_3d_editor_plugin.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp
index 4dc7222b74..eb840fcb51 100644
--- a/editor/plugins/node_3d_editor_plugin.cpp
+++ b/editor/plugins/node_3d_editor_plugin.cpp
@@ -4364,7 +4364,16 @@ bool Node3DEditorViewport::_create_instance(Node *parent, String &path, const Po
Node3D *node3d = Object::cast_to<Node3D>(instantiated_scene);
if (node3d) {
- undo_redo->add_do_method(instantiated_scene, "set_transform", node3d->get_transform());
+ Transform3D parent_tf;
+ Node3D *parent_node3d = Object::cast_to<Node3D>(parent);
+ if (parent_node3d) {
+ parent_tf = parent_node3d->get_global_gizmo_transform();
+ }
+
+ Transform3D new_tf = node3d->get_transform();
+ new_tf.origin = parent_tf.xform_inv(preview_node_pos);
+
+ undo_redo->add_do_method(instantiated_scene, "set_transform", new_tf);
}
return true;