From 49d3161ce0470d950a2c243ba98a6233611d6f5d Mon Sep 17 00:00:00 2001 From: lawnjelly Date: Thu, 20 Jun 2024 10:00:34 +0100 Subject: [PATCH] Physics Interpolation - Fix behaviour on pause --- scene/2d/camera_2d.cpp | 5 +++++ scene/3d/camera.cpp | 6 ++++++ scene/main/node.cpp | 5 +++++ 3 files changed, 16 insertions(+) diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index 13a79e7847a..a5d2b9c3995 100644 --- a/scene/2d/camera_2d.cpp +++ b/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(); diff --git a/scene/3d/camera.cpp b/scene/3d/camera.cpp index 62463c6ef6f..e85b1eb50be 100644 --- a/scene/3d/camera.cpp +++ b/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()) { diff --git a/scene/main/node.cpp b/scene/main/node.cpp index 2cee99eac3a..163dc698c51 100644 --- a/scene/main/node.cpp +++ b/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);