From e5cec36ba047a7be63d2d23fca6e6625ce63b72e Mon Sep 17 00:00:00 2001 From: Relintai Date: Sun, 27 Aug 2023 22:02:26 +0200 Subject: [PATCH] Ported: Physics Interpolation 2D - reset on NOTIFICATION_ENTER_TREE As a convenience, physics interpolation is reset automatically on entering the tree. This will be desired in most situations, and saves the user having to write code for this explicitly. - lawnjelly https://github.com/godotengine/godot/commit/bcfca5ec8615cf796dcb02d4291d9475feb58031 --- scene/2d/canvas_item.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index e71be3e0b..9f0d0a943 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -592,6 +592,19 @@ void CanvasItem::_notification(int p_what) { get_tree()->xform_change_list.add(&xform_change); } + // If using physics interpolation, reset for this node only, + // as a helper, as in most cases, users will want items reset when + // adding to the tree. + // In cases where they move immediately after adding, + // there will be little cost in having two resets as these are cheap, + // and it is worth it for convenience. + // Do not propagate to children, as each child of an added branch + // receives its own NOTIFICATION_ENTER_TREE, and this would + // cause unnecessary duplicate resets. + if (is_physics_interpolated_and_enabled()) { + notification(NOTIFICATION_RESET_PHYSICS_INTERPOLATION); + } + if (get_viewport()) { get_parent()->connect(SceneStringNames::get_singleton()->child_order_changed, get_viewport(), SceneStringNames::get_singleton()->canvas_parent_mark_dirty, varray(get_parent()), CONNECT_REFERENCE_COUNTED); }