Browse Source

Merge pull request #58642 from rburing/joints_fix_signals_3.x

Rémi Verschelde 3 years ago
parent
commit
29d78f20de
2 changed files with 17 additions and 5 deletions
  1. 8 3
      scene/2d/joints_2d.cpp
  2. 9 2
      scene/3d/physics_joint.cpp

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

@@ -168,14 +168,17 @@ NodePath Joint2D::get_node_b() const {
 
 void Joint2D::_notification(int p_what) {
 	switch (p_what) {
-		case NOTIFICATION_READY: {
+		case NOTIFICATION_POST_ENTER_TREE: {
+			if (joint.is_valid()) {
+				_disconnect_signals();
+			}
 			_update_joint();
 		} break;
 		case NOTIFICATION_EXIT_TREE: {
 			if (joint.is_valid()) {
 				_disconnect_signals();
-				_update_joint(true);
 			}
+			_update_joint(true);
 		} break;
 	}
 }
@@ -195,7 +198,9 @@ void Joint2D::set_exclude_nodes_from_collision(bool p_enable) {
 	if (exclude_from_collision == p_enable) {
 		return;
 	}
-
+	if (joint.is_valid()) {
+		_disconnect_signals();
+	}
 	_update_joint(true);
 	exclude_from_collision = p_enable;
 	_update_joint();

+ 9 - 2
scene/3d/physics_joint.cpp

@@ -178,14 +178,17 @@ int Joint::get_solver_priority() const {
 
 void Joint::_notification(int p_what) {
 	switch (p_what) {
-		case NOTIFICATION_READY: {
+		case NOTIFICATION_POST_ENTER_TREE: {
+			if (joint.is_valid()) {
+				_disconnect_signals();
+			}
 			_update_joint();
 		} break;
 		case NOTIFICATION_EXIT_TREE: {
 			if (joint.is_valid()) {
 				_disconnect_signals();
-				_update_joint(true);
 			}
+			_update_joint(true);
 		} break;
 	}
 }
@@ -194,6 +197,10 @@ void Joint::set_exclude_nodes_from_collision(bool p_enable) {
 	if (exclude_from_collision == p_enable) {
 		return;
 	}
+	if (joint.is_valid()) {
+		_disconnect_signals();
+	}
+	_update_joint(true);
 	exclude_from_collision = p_enable;
 	_update_joint();
 }