Browse Source

Merge pull request #93382 from lawnjelly/fti_fix_pause

[3.x] Physics Interpolation - Fix behaviour on pause
lawnjelly 1 year ago
parent
commit
e962aaf33d
3 changed files with 16 additions and 0 deletions
  1. 5 0
      scene/2d/camera_2d.cpp
  2. 6 0
      scene/3d/camera.cpp
  3. 5 0
      scene/main/node.cpp

+ 5 - 0
scene/2d/camera_2d.cpp

@@ -295,6 +295,11 @@ void Camera2D::_notification(int p_what) {
 			_interpolation_data.xform_curr = get_camera_transform();
 			_interpolation_data.xform_prev = _interpolation_data.xform_curr;
 		} break;
+		case NOTIFICATION_PAUSED: {
+			if (is_physics_interpolated_and_enabled()) {
+				_update_scroll();
+			}
+		} break;
 		case NOTIFICATION_TRANSFORM_CHANGED: {
 			if (!smoothing_active && !is_physics_interpolated_and_enabled()) {
 				_update_scroll();

+ 6 - 0
scene/3d/camera.cpp

@@ -226,6 +226,12 @@ void Camera::_notification(int p_what) {
 				_interpolation_data.xform_prev = _interpolation_data.xform_curr;
 			}
 		} break;
+		case NOTIFICATION_PAUSED: {
+			if (is_physics_interpolated_and_enabled() && is_inside_tree() && is_visible_in_tree()) {
+				_physics_interpolation_ensure_transform_calculated(true);
+				VisualServer::get_singleton()->camera_set_transform(camera, _interpolation_data.camera_xform_interpolated);
+			}
+		} break;
 		case NOTIFICATION_EXIT_WORLD: {
 			if (!get_tree()->is_node_being_edited(this)) {
 				if (is_current()) {

+ 5 - 0
scene/main/node.cpp

@@ -131,6 +131,11 @@ void Node::_notification(int p_notification) {
 				data.path_cache = nullptr;
 			}
 		} break;
+		case NOTIFICATION_PAUSED: {
+			if (is_physics_interpolated_and_enabled() && is_inside_tree()) {
+				reset_physics_interpolation();
+			}
+		} break;
 		case NOTIFICATION_PATH_CHANGED: {
 			if (data.path_cache) {
 				memdelete(data.path_cache);