2
0
Эх сурвалжийг харах

Rename get_parent_spatial() to get_parent_node3d()

Renames get_parent_spatial() to get_parent_node3d() and changes its
implementation. Before it was not returning a correct pointer if the
node wasn't added to a SceneTree. Now it uses the same implementation as
CanvasItem, which will be correct even for nodes outside a SceneTree.
jfons 4 жил өмнө
parent
commit
ee702334a1

+ 1 - 1
doc/classes/Node3D.xml

@@ -20,7 +20,7 @@
 				Forces the transform to update. Transform changes in physics are not instant for performance reasons. Transforms are accumulated and then set. Use this if you need an up-to-date transform when doing physics operations.
 				Forces the transform to update. Transform changes in physics are not instant for performance reasons. Transforms are accumulated and then set. Use this if you need an up-to-date transform when doing physics operations.
 			</description>
 			</description>
 		</method>
 		</method>
-		<method name="get_parent_spatial" qualifiers="const">
+		<method name="get_parent_node_3d" qualifiers="const">
 			<return type="Node3D">
 			<return type="Node3D">
 			</return>
 			</return>
 			<description>
 			<description>

+ 1 - 1
editor/import/resource_importer_scene.cpp

@@ -1213,7 +1213,7 @@ void ResourceImporterScene::_generate_meshes(Node *p_node, const Dictionary &p_m
 					Node3D *n = src_mesh_node;
 					Node3D *n = src_mesh_node;
 					while (n) {
 					while (n) {
 						xf = n->get_transform() * xf;
 						xf = n->get_transform() * xf;
-						n = n->get_parent_spatial();
+						n = n->get_parent_node_3d();
 					}
 					}
 
 
 					Vector<uint8_t> lightmap_cache;
 					Vector<uint8_t> lightmap_cache;

+ 7 - 3
scene/3d/node_3d.cpp

@@ -282,8 +282,12 @@ Transform3D Node3D::get_local_gizmo_transform() const {
 }
 }
 #endif
 #endif
 
 
-Node3D *Node3D::get_parent_spatial() const {
-	return data.parent;
+Node3D *Node3D::get_parent_node_3d() const {
+	if (data.top_level) {
+		return nullptr;
+	}
+
+	return Object::cast_to<Node3D>(get_parent());
 }
 }
 
 
 Transform3D Node3D::get_relative_transform(const Node *p_parent) const {
 Transform3D Node3D::get_relative_transform(const Node *p_parent) const {
@@ -703,7 +707,7 @@ void Node3D::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("get_scale"), &Node3D::get_scale);
 	ClassDB::bind_method(D_METHOD("get_scale"), &Node3D::get_scale);
 	ClassDB::bind_method(D_METHOD("set_global_transform", "global"), &Node3D::set_global_transform);
 	ClassDB::bind_method(D_METHOD("set_global_transform", "global"), &Node3D::set_global_transform);
 	ClassDB::bind_method(D_METHOD("get_global_transform"), &Node3D::get_global_transform);
 	ClassDB::bind_method(D_METHOD("get_global_transform"), &Node3D::get_global_transform);
-	ClassDB::bind_method(D_METHOD("get_parent_spatial"), &Node3D::get_parent_spatial);
+	ClassDB::bind_method(D_METHOD("get_parent_node_3d"), &Node3D::get_parent_node_3d);
 	ClassDB::bind_method(D_METHOD("set_ignore_transform_notification", "enabled"), &Node3D::set_ignore_transform_notification);
 	ClassDB::bind_method(D_METHOD("set_ignore_transform_notification", "enabled"), &Node3D::set_ignore_transform_notification);
 	ClassDB::bind_method(D_METHOD("set_as_top_level", "enable"), &Node3D::set_as_top_level);
 	ClassDB::bind_method(D_METHOD("set_as_top_level", "enable"), &Node3D::set_as_top_level);
 	ClassDB::bind_method(D_METHOD("is_set_as_top_level"), &Node3D::is_set_as_top_level);
 	ClassDB::bind_method(D_METHOD("is_set_as_top_level"), &Node3D::is_set_as_top_level);

+ 1 - 1
scene/3d/node_3d.h

@@ -118,7 +118,7 @@ public:
 		NOTIFICATION_LOCAL_TRANSFORM_CHANGED = 44,
 		NOTIFICATION_LOCAL_TRANSFORM_CHANGED = 44,
 	};
 	};
 
 
-	Node3D *get_parent_spatial() const;
+	Node3D *get_parent_node_3d() const;
 
 
 	Ref<World3D> get_world_3d() const;
 	Ref<World3D> get_world_3d() const;