Browse Source

Merge pull request #93980 from TokageItLab/fix-sync-track-editor-position-with-player-editor

Fix broken sync between animation TrackEditor and PlayerEditor
Rémi Verschelde 1 year ago
parent
commit
0996c8438f

+ 2 - 1
editor/animation_track_editor.cpp

@@ -3690,7 +3690,7 @@ void AnimationTrackEditor::_name_limit_changed() {
 }
 }
 
 
 void AnimationTrackEditor::_timeline_changed(float p_new_pos, bool p_timeline_only) {
 void AnimationTrackEditor::_timeline_changed(float p_new_pos, bool p_timeline_only) {
-	emit_signal(SNAME("timeline_changed"), p_new_pos, p_timeline_only);
+	emit_signal(SNAME("timeline_changed"), p_new_pos, p_timeline_only, false);
 }
 }
 
 
 void AnimationTrackEditor::_track_remove_request(int p_track) {
 void AnimationTrackEditor::_track_remove_request(int p_track) {
@@ -3787,6 +3787,7 @@ void AnimationTrackEditor::set_anim_pos(float p_pos) {
 	}
 	}
 	_redraw_groups();
 	_redraw_groups();
 	bezier_edit->set_play_position(p_pos);
 	bezier_edit->set_play_position(p_pos);
+	emit_signal(SNAME("timeline_changed"), p_pos, true, true);
 }
 }
 
 
 static bool track_type_is_resettable(Animation::TrackType p_type) {
 static bool track_type_is_resettable(Animation::TrackType p_type) {

+ 6 - 15
editor/plugins/animation_player_editor_plugin.cpp

@@ -1395,23 +1395,14 @@ void AnimationPlayerEditor::_current_animation_changed(const String &p_name) {
 void AnimationPlayerEditor::_animation_key_editor_anim_len_changed(float p_len) {
 void AnimationPlayerEditor::_animation_key_editor_anim_len_changed(float p_len) {
 	frame->set_max(p_len);
 	frame->set_max(p_len);
 }
 }
-
-void AnimationPlayerEditor::_animation_key_editor_seek(float p_pos, bool p_timeline_only) {
+void AnimationPlayerEditor::_animation_key_editor_seek(float p_pos, bool p_timeline_only, bool p_update_position_only) {
 	timeline_position = p_pos;
 	timeline_position = p_pos;
 
 
-	if (!is_visible_in_tree()) {
-		return;
-	}
-
-	if (!player) {
-		return;
-	}
-
-	if (player->is_playing()) {
-		return;
-	}
-
-	if (!player->has_animation(player->get_assigned_animation())) {
+	if (!is_visible_in_tree() ||
+			p_update_position_only ||
+			!player ||
+			player->is_playing() ||
+			!player->has_animation(player->get_assigned_animation())) {
 		return;
 		return;
 	}
 	}
 
 

+ 1 - 1
editor/plugins/animation_player_editor_plugin.h

@@ -214,7 +214,7 @@ class AnimationPlayerEditor : public VBoxContainer {
 	void _animation_player_changed(Object *p_pl);
 	void _animation_player_changed(Object *p_pl);
 	void _animation_libraries_updated();
 	void _animation_libraries_updated();
 
 
-	void _animation_key_editor_seek(float p_pos, bool p_timeline_only = false);
+	void _animation_key_editor_seek(float p_pos, bool p_timeline_only = false, bool p_update_position_only = false);
 	void _animation_key_editor_anim_len_changed(float p_len);
 	void _animation_key_editor_anim_len_changed(float p_len);
 
 
 	virtual void shortcut_input(const Ref<InputEvent> &p_ev) override;
 	virtual void shortcut_input(const Ref<InputEvent> &p_ev) override;