Преглед изворни кода

Merge pull request #45167 from madmiraal/fix-44703

Fix not clearing a Joint3D with only a B node when removing the B node
Rémi Verschelde пре 4 година
родитељ
комит
156d700f00
1 измењених фајлова са 9 додато и 7 уклоњено
  1. 9 7
      scene/3d/physics_joint_3d.cpp

+ 9 - 7
scene/3d/physics_joint_3d.cpp

@@ -114,21 +114,23 @@ void Joint3D::_update_joint(bool p_only_free) {
 		return;
 	}
 
-	if (!body_a) {
-		SWAP(body_a, body_b);
-	}
-
 	warning = String();
 	update_configuration_warning();
 
-	joint = _configure_joint(body_a, body_b);
+	if (body_a) {
+		joint = _configure_joint(body_a, body_b);
+	} else if (body_b) {
+		joint = _configure_joint(body_b, nullptr);
+	}
 
 	ERR_FAIL_COND_MSG(!joint.is_valid(), "Failed to configure the joint.");
 
 	PhysicsServer3D::get_singleton()->joint_set_solver_priority(joint, solver_priority);
 
-	ba = body_a->get_rid();
-	body_a->connect(SceneStringNames::get_singleton()->tree_exiting, callable_mp(this, &Joint3D::_body_exit_tree), make_binds(body_a->get_instance_id()));
+	if (body_a) {
+		ba = body_a->get_rid();
+		body_a->connect(SceneStringNames::get_singleton()->tree_exiting, callable_mp(this, &Joint3D::_body_exit_tree), make_binds(body_a->get_instance_id()));
+	}
 
 	if (body_b) {
 		bb = body_b->get_rid();