diff --git a/editor/plugins/animation_library_editor.cpp b/editor/plugins/animation_library_editor.cpp index 7ab2cdbe534..e3b2154e371 100644 --- a/editor/plugins/animation_library_editor.cpp +++ b/editor/plugins/animation_library_editor.cpp @@ -35,9 +35,10 @@ #include "editor/editor_string_names.h" #include "editor/editor_undo_redo_manager.h" #include "editor/gui/editor_file_dialog.h" +#include "scene/animation/animation_mixer.h" void AnimationLibraryEditor::set_animation_mixer(Object *p_mixer) { - mixer = p_mixer; + mixer = Object::cast_to(p_mixer); } void AnimationLibraryEditor::_add_library() { @@ -54,7 +55,7 @@ void AnimationLibraryEditor::_add_library_validate(const String &p_name) { String error; if (adding_animation) { - Ref al = mixer->call("get_animation_library", adding_animation_to_library); + Ref al = mixer->get_animation_library(adding_animation_to_library); ERR_FAIL_COND(al.is_null()); if (p_name == "") { error = TTR("Animation name can't be empty."); @@ -64,11 +65,11 @@ void AnimationLibraryEditor::_add_library_validate(const String &p_name) { error = TTR("Animation with the same name already exists."); } } else { - if (p_name == "" && bool(mixer->call("has_animation_library", ""))) { + if (p_name == "" && mixer->has_animation_library("")) { error = TTR("Enter a library name."); } else if (!AnimationLibrary::is_valid_library_name(p_name)) { error = TTR("Library name contains invalid characters: '/', ':', ',' or '['."); - } else if (bool(mixer->call("has_animation_library", p_name))) { + } else if (mixer->has_animation_library(p_name)) { error = TTR("Library with the same name already exists."); } } @@ -97,7 +98,7 @@ void AnimationLibraryEditor::_add_library_confirm() { String anim_name = add_library_name->get_text(); EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - Ref al = mixer->call("get_animation_library", adding_animation_to_library); + Ref al = mixer->get_animation_library(adding_animation_to_library); ERR_FAIL_COND(!al.is_valid()); Ref anim; @@ -144,7 +145,7 @@ void AnimationLibraryEditor::_load_library() { } void AnimationLibraryEditor::_file_popup_selected(int p_id) { - Ref al = mixer->call("get_animation_library", file_dialog_library); + Ref al = mixer->get_animation_library(file_dialog_library); Ref anim; if (file_dialog_animation != StringName()) { anim = al->get_animation(file_dialog_animation); @@ -308,10 +309,10 @@ void AnimationLibraryEditor::_load_file(String p_path) { return; } - TypedArray libs = mixer->call("get_animation_library_list"); - for (int i = 0; i < libs.size(); i++) { - const StringName K = libs[i]; - Ref al2 = mixer->call("get_animation_library", K); + List libs; + mixer->get_animation_library_list(&libs); + for (const StringName &K : libs) { + Ref al2 = mixer->get_animation_library(K); if (al2 == al) { error_dialog->set_text(TTR("This library is already added to the mixer.")); error_dialog->popup_centered(); @@ -324,7 +325,7 @@ void AnimationLibraryEditor::_load_file(String p_path) { int attempt = 1; - while (bool(mixer->call("has_animation_library", name))) { + while (bool(mixer->has_animation_library(name))) { attempt++; name = p_path.get_file().get_basename() + " " + itos(attempt); } @@ -346,7 +347,7 @@ void AnimationLibraryEditor::_load_file(String p_path) { return; } - Ref al = mixer->call("get_animation_library", adding_animation_to_library); + Ref al = mixer->get_animation_library(adding_animation_to_library); List anims; al->get_animation_list(&anims); for (const StringName &K : anims) { @@ -378,7 +379,7 @@ void AnimationLibraryEditor::_load_file(String p_path) { } break; case FILE_DIALOG_ACTION_SAVE_LIBRARY: { - Ref al = mixer->call("get_animation_library", file_dialog_library); + Ref al = mixer->get_animation_library(file_dialog_library); String prev_path = al->get_path(); EditorNode::get_singleton()->save_resource_in_path(al, p_path); @@ -395,7 +396,7 @@ void AnimationLibraryEditor::_load_file(String p_path) { } break; case FILE_DIALOG_ACTION_SAVE_ANIMATION: { - Ref al = mixer->call("get_animation_library", file_dialog_library); + Ref al = mixer->get_animation_library(file_dialog_library); Ref anim; if (file_dialog_animation != StringName()) { anim = al->get_animation(file_dialog_animation); @@ -430,7 +431,7 @@ void AnimationLibraryEditor::_item_renamed() { if (ti->get_parent() == tree->get_root()) { // Renamed library - if (mixer->call("has_animation_library", text)) { + if (mixer->has_animation_library(text)) { restore_text = true; } else { undo_redo->create_action(vformat(TTR("Rename Animation Library: %s"), text)); @@ -451,7 +452,7 @@ void AnimationLibraryEditor::_item_renamed() { } else { // Renamed anim StringName library = ti->get_parent()->get_metadata(0); - Ref al = mixer->call("get_animation_library", library); + Ref al = mixer->get_animation_library(library); if (al.is_valid()) { if (al->has_animation(text)) { @@ -483,7 +484,7 @@ void AnimationLibraryEditor::_button_pressed(TreeItem *p_item, int p_column, int if (p_item->get_parent() == tree->get_root()) { // Library StringName lib_name = p_item->get_metadata(0); - Ref al = mixer->call("get_animation_library", lib_name); + Ref al = mixer->get_animation_library(lib_name); switch (p_id) { case LIB_BUTTON_ADD: { add_library_dialog->set_title(TTR("Animation Name:")); @@ -576,7 +577,7 @@ void AnimationLibraryEditor::_button_pressed(TreeItem *p_item, int p_column, int // Animation StringName lib_name = p_item->get_parent()->get_metadata(0); StringName anim_name = p_item->get_metadata(0); - Ref al = mixer->call("get_animation_library", lib_name); + Ref al = mixer->get_animation_library(lib_name); Ref anim = al->get_animation(anim_name); ERR_FAIL_COND(!anim.is_valid()); switch (p_id) { @@ -626,10 +627,10 @@ void AnimationLibraryEditor::update_tree() { Color ss_color = get_theme_color(SNAME("prop_subsection"), EditorStringName(Editor)); TreeItem *root = tree->create_item(); - TypedArray libs = mixer->call("get_animation_library_list"); + List libs; + mixer->get_animation_library_list(&libs); - for (int i = 0; i < libs.size(); i++) { - const StringName K = libs[i]; + for (const StringName &K : libs) { TreeItem *libitem = tree->create_item(root); libitem->set_text(0, K); if (K == StringName()) { @@ -638,7 +639,7 @@ void AnimationLibraryEditor::update_tree() { libitem->set_suffix(0, ""); } - Ref al = mixer->call("get_animation_library", K); + Ref al = mixer->get_animation_library(K); bool animation_library_is_foreign = false; String al_path = al->get_path(); if (!al_path.is_resource_file()) { diff --git a/editor/plugins/animation_library_editor.h b/editor/plugins/animation_library_editor.h index 49a5c786d32..b656642a7c9 100644 --- a/editor/plugins/animation_library_editor.h +++ b/editor/plugins/animation_library_editor.h @@ -37,6 +37,7 @@ #include "scene/gui/dialogs.h" #include "scene/gui/tree.h" +class AnimationMixer; class EditorFileDialog; class AnimationLibraryEditor : public AcceptDialog { @@ -90,7 +91,7 @@ class AnimationLibraryEditor : public AcceptDialog { Tree *tree = nullptr; - Object *mixer = nullptr; + AnimationMixer *mixer = nullptr; void _add_library(); void _add_library_validate(const String &p_name);