From 461bb8ee025c63965ff38929d6f8e84289c97ab5 Mon Sep 17 00:00:00 2001 From: kobewi Date: Fri, 7 Jun 2024 15:02:13 +0200 Subject: [PATCH] Don't allow creating invalid RESET keys --- editor/animation_track_editor.cpp | 17 ++++++++++++++++- editor/animation_track_editor.h | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index 2d497a281f65..91f03ed9ba22 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -2931,7 +2931,7 @@ void AnimationTrackEdit::gui_input(const Ref &p_event) { } if (selected || editor->is_selection_active()) { AnimationPlayer *player = AnimationPlayerEditor::get_singleton()->get_player(); - if (!player->has_animation(SceneStringName(RESET)) || animation != player->get_animation(SceneStringName(RESET))) { + if ((!player->has_animation(SceneStringName(RESET)) || animation != player->get_animation(SceneStringName(RESET))) && editor->can_add_reset_key()) { menu->add_icon_item(get_editor_theme_icon(SNAME("Reload")), TTR("Add RESET Value(s)"), MENU_KEY_ADD_RESET); } @@ -4526,6 +4526,16 @@ bool AnimationTrackEditor::is_snap_enabled() const { return snap->is_pressed() ^ Input::get_singleton()->is_key_pressed(Key::CMD_OR_CTRL); } +bool AnimationTrackEditor::can_add_reset_key() const { + for (const KeyValue &E : selection) { + const Animation::TrackType track_type = animation->track_get_type(E.key.track); + if (track_type != Animation::TYPE_ANIMATION && track_type != Animation::TYPE_AUDIO && track_type != Animation::TYPE_METHOD) { + return true; + } + } + return false; +} + void AnimationTrackEditor::_update_tracks() { int selected = _get_track_selected(); @@ -6611,6 +6621,11 @@ void AnimationTrackEditor::_edit_menu_pressed(int p_option) { for (const KeyValue &E : selection) { const SelectedKey &sk = E.key; + const Animation::TrackType track_type = animation->track_get_type(E.key.track); + if (track_type == Animation::TYPE_ANIMATION || track_type == Animation::TYPE_AUDIO || track_type == Animation::TYPE_METHOD) { + continue; + } + // Only add one key per track. if (tracks_added.has(sk.track)) { continue; diff --git a/editor/animation_track_editor.h b/editor/animation_track_editor.h index f449b51b816c..0f7f983c1955 100644 --- a/editor/animation_track_editor.h +++ b/editor/animation_track_editor.h @@ -724,6 +724,7 @@ class AnimationTrackEditor : public VBoxContainer { bool is_key_clipboard_active() const; bool is_moving_selection() const; bool is_snap_enabled() const; + bool can_add_reset_key() const; float get_moving_selection_offset() const; float snap_time(float p_value, bool p_relative = false); bool is_grouping_tracks();