From cd71f97209b5a1512e0620779d0643a724177a5c Mon Sep 17 00:00:00 2001 From: aryan-11825114 Date: Thu, 29 Aug 2024 20:59:47 +0530 Subject: [PATCH] fix changed signal emission in Curve::set_point_offset --- scene/resources/curve.cpp | 21 +++++++++++---------- scene/resources/curve.h | 31 ++++++++++++++++--------------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/scene/resources/curve.cpp b/scene/resources/curve.cpp index e982e4d1357..de68737b8c9 100644 --- a/scene/resources/curve.cpp +++ b/scene/resources/curve.cpp @@ -56,7 +56,7 @@ void Curve::set_point_count(int p_count) { notify_property_list_changed(); } -int Curve::_add_point(Vector2 p_position, real_t p_left_tangent, real_t p_right_tangent, TangentMode p_left_mode, TangentMode p_right_mode) { +int Curve::_add_point(Vector2 p_position, real_t p_left_tangent, real_t p_right_tangent, TangentMode p_left_mode, TangentMode p_right_mode, bool p_mark_dirty) { // Add a point and preserve order. // Points must remain within the given value and domain ranges. @@ -99,7 +99,9 @@ int Curve::_add_point(Vector2 p_position, real_t p_left_tangent, real_t p_right_ update_auto_tangents(ret); - mark_dirty(); + if (p_mark_dirty) { + mark_dirty(); + } return ret; } @@ -221,10 +223,12 @@ Curve::TangentMode Curve::get_point_right_mode(int p_index) const { return _points[p_index].right_mode; } -void Curve::_remove_point(int p_index) { +void Curve::_remove_point(int p_index, bool p_mark_dirty) { ERR_FAIL_UNSIGNED_INDEX((uint32_t)p_index, _points.size()); _points.remove_at(p_index); - mark_dirty(); + if (p_mark_dirty) { + mark_dirty(); + } } void Curve::remove_point(int p_index) { @@ -252,16 +256,13 @@ void Curve::set_point_value(int p_index, real_t p_position) { int Curve::set_point_offset(int p_index, real_t p_offset) { ERR_FAIL_UNSIGNED_INDEX_V((uint32_t)p_index, _points.size(), -1); Point p = _points[p_index]; - _remove_point(p_index); - int i = _add_point(Vector2(p_offset, p.position.y)); - _points[i].left_tangent = p.left_tangent; - _points[i].right_tangent = p.right_tangent; - _points[i].left_mode = p.left_mode; - _points[i].right_mode = p.right_mode; + _remove_point(p_index, false); + int i = _add_point(Vector2(p_offset, p.position.y), p.left_tangent, p.right_tangent, p.left_mode, p.right_mode, false); if (p_index != i) { update_auto_tangents(p_index); } update_auto_tangents(i); + mark_dirty(); return i; } diff --git a/scene/resources/curve.h b/scene/resources/curve.h index 66707bcb6f3..c4748ba9bdd 100644 --- a/scene/resources/curve.h +++ b/scene/resources/curve.h @@ -76,15 +76,15 @@ public: void set_point_count(int p_count); int add_point(Vector2 p_position, - real_t left_tangent = 0, - real_t right_tangent = 0, - TangentMode left_mode = TANGENT_FREE, - TangentMode right_mode = TANGENT_FREE); + real_t p_left_tangent = 0, + real_t p_right_tangent = 0, + TangentMode p_left_mode = TANGENT_FREE, + TangentMode p_right_mode = TANGENT_FREE); int add_point_no_update(Vector2 p_position, - real_t left_tangent = 0, - real_t right_tangent = 0, - TangentMode left_mode = TANGENT_FREE, - TangentMode right_mode = TANGENT_FREE); + real_t p_left_tangent = 0, + real_t p_right_tangent = 0, + TangentMode p_left_mode = TANGENT_FREE, + TangentMode p_right_mode = TANGENT_FREE); void remove_point(int p_index); void clear_points(); @@ -126,10 +126,10 @@ public: TangentMode get_point_left_mode(int p_index) const; TangentMode get_point_right_mode(int p_index) const; - void update_auto_tangents(int i); + void update_auto_tangents(int p_index); Array get_data() const; - void set_data(Array input); + void set_data(Array p_input); void bake(); void _bake() const; @@ -149,11 +149,12 @@ protected: private: void mark_dirty(); int _add_point(Vector2 p_position, - real_t left_tangent = 0, - real_t right_tangent = 0, - TangentMode left_mode = TANGENT_FREE, - TangentMode right_mode = TANGENT_FREE); - void _remove_point(int p_index); + real_t p_left_tangent = 0, + real_t p_right_tangent = 0, + TangentMode p_left_mode = TANGENT_FREE, + TangentMode p_right_mode = TANGENT_FREE, + bool p_mark_dirty = true); + void _remove_point(int p_index, bool p_mark_dirty = true); LocalVector _points; mutable bool _baked_cache_dirty = false;