Browse Source

Update body transforms on joint2D setup

Body transforms from physics are used to setup the joint and they are
only updated before the physics step by default.

Without forcing the transform update, joints could use a previous
position if the body's position was set after it was added to the scene.

3D physics is not affected by this issue.

(cherry picked from commit 11bee25de4d07497d3bb8f3165937c879f0c9ef8)
PouleyKetchoupp 4 years ago
parent
commit
1fccf78dd2
1 changed files with 8 additions and 0 deletions
  1. 8 0
      scene/2d/joints_2d.cpp

+ 8 - 0
scene/2d/joints_2d.cpp

@@ -90,6 +90,14 @@ void Joint2D::_update_joint(bool p_only_free) {
 	warning = String();
 	warning = String();
 	update_configuration_warning();
 	update_configuration_warning();
 
 
+	if (body_a) {
+		body_a->force_update_transform();
+	}
+
+	if (body_b) {
+		body_b->force_update_transform();
+	}
+
 	joint = _configure_joint(body_a, body_b);
 	joint = _configure_joint(body_a, body_b);
 
 
 	ERR_FAIL_COND_MSG(!joint.is_valid(), "Failed to configure the joint.");
 	ERR_FAIL_COND_MSG(!joint.is_valid(), "Failed to configure the joint.");