From 1b607b04b427e464e4b317f1519d9a0d19dc2081 Mon Sep 17 00:00:00 2001 From: kobewi Date: Sun, 23 May 2021 15:32:03 +0200 Subject: [PATCH] Advance animation after confirming (cherry picked from commit 798f9c8632c62c52d6053c42250e6c02be1e1427) --- editor/animation_track_editor.cpp | 31 ++++++++++++++----------------- editor/animation_track_editor.h | 3 ++- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index ea7c6763ca1..f7ddce92323 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -3498,19 +3498,7 @@ void AnimationTrackEditor::_insert_delay(bool p_create_reset, bool p_create_bezi undo_redo->commit_action(); if (advance) { - float step = animation->get_step(); - if (step == 0) { - step = 1; - } - - float pos = timeline->get_play_position(); - - pos = Math::stepify(pos + step, step); - if (pos > animation->get_length()) { - pos = animation->get_length(); - } - set_anim_pos(pos); - emit_signal("timeline_changed", pos, true); + _edit_menu_pressed(EDIT_GOTO_NEXT_STEP_TIMELINE_ONLY); } insert_queue = false; } @@ -3811,12 +3799,20 @@ void AnimationTrackEditor::_confirm_insert_list() { } TrackIndices next_tracks(animation.ptr(), reset_anim.ptr()); + bool advance = false; while (insert_data.size()) { + if (insert_data.front()->get().advance) { + advance = true; + } next_tracks = _confirm_insert(insert_data.front()->get(), next_tracks, create_reset, reset_anim, insert_confirm_bezier->is_pressed()); insert_data.pop_front(); } undo_redo->commit_action(); + + if (advance) { + _edit_menu_pressed(EDIT_GOTO_NEXT_STEP_TIMELINE_ONLY); + } } PropertyInfo AnimationTrackEditor::_find_hint_for_track(int p_idx, NodePath &r_base_path, Variant *r_current_val) { @@ -5243,7 +5239,7 @@ void AnimationTrackEditor::goto_prev_step(bool p_from_mouse_event) { emit_signal("timeline_changed", pos, true); } -void AnimationTrackEditor::goto_next_step(bool p_from_mouse_event) { +void AnimationTrackEditor::goto_next_step(bool p_from_mouse_event, bool p_timeline_only) { if (animation.is_null()) { return; } @@ -5267,7 +5263,7 @@ void AnimationTrackEditor::goto_next_step(bool p_from_mouse_event) { } set_anim_pos(pos); - emit_signal("timeline_changed", pos, true); + emit_signal("timeline_changed", pos, true, p_timeline_only); } void AnimationTrackEditor::_edit_menu_pressed(int p_option) { @@ -5607,8 +5603,9 @@ void AnimationTrackEditor::_edit_menu_pressed(int p_option) { _update_key_edit(); } } break; + case EDIT_GOTO_NEXT_STEP_TIMELINE_ONLY: case EDIT_GOTO_NEXT_STEP: { - goto_next_step(false); + goto_next_step(false, p_option == EDIT_GOTO_NEXT_STEP_TIMELINE_ONLY); } break; case EDIT_GOTO_PREV_STEP: { goto_prev_step(false); @@ -5820,7 +5817,7 @@ void AnimationTrackEditor::_bind_methods() { ClassDB::bind_method("_pick_track_filter_text_changed", &AnimationTrackEditor::_pick_track_filter_text_changed); ClassDB::bind_method("_pick_track_filter_input", &AnimationTrackEditor::_pick_track_filter_input); - ADD_SIGNAL(MethodInfo("timeline_changed", PropertyInfo(Variant::REAL, "position"), PropertyInfo(Variant::BOOL, "drag"))); + ADD_SIGNAL(MethodInfo("timeline_changed", PropertyInfo(Variant::REAL, "position"), PropertyInfo(Variant::BOOL, "drag"), PropertyInfo(Variant::BOOL, "timeline_only"))); ADD_SIGNAL(MethodInfo("keying_changed")); ADD_SIGNAL(MethodInfo("animation_len_changed", PropertyInfo(Variant::REAL, "len"))); ADD_SIGNAL(MethodInfo("animation_step_changed", PropertyInfo(Variant::REAL, "step"))); diff --git a/editor/animation_track_editor.h b/editor/animation_track_editor.h index 865c6ac2caa..39b266e80fe 100644 --- a/editor/animation_track_editor.h +++ b/editor/animation_track_editor.h @@ -509,6 +509,7 @@ public: EDIT_ADD_RESET_KEY, EDIT_DELETE_SELECTION, EDIT_GOTO_NEXT_STEP, + EDIT_GOTO_NEXT_STEP_TIMELINE_ONLY, // Next step without updating animation. EDIT_GOTO_PREV_STEP, EDIT_APPLY_RESET, EDIT_OPTIMIZE_ANIMATION, @@ -551,7 +552,7 @@ public: void goto_prev_step(bool p_from_mouse_event); /** If `p_from_mouse_event` is `true`, handle Shift key presses for precise snapping. */ - void goto_next_step(bool p_from_mouse_event); + void goto_next_step(bool p_from_mouse_event, bool p_timeline_only = false); MenuButton *get_edit_menu(); AnimationTrackEditor();