summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSaracenOne <SaracenOne@gmail.com>2022-09-07 10:17:22 +0100
committerSaracenOne <SaracenOne@gmail.com>2022-09-07 10:17:22 +0100
commitdc96b2834e3b79eda464e5f2c92915fc84bf8f3e (patch)
treed403fd10a1eb1901673b1d6973f917f913af35db
parentb8977ca333fd0334669de0253f86abf6d401256a (diff)
Refactor to use internal foreign resource checking function.
Create unique duplicates of embedded animations when calling 'Make Unique' on AnimationLibrary.
-rw-r--r--editor/plugins/animation_library_editor.cpp16
-rw-r--r--editor/plugins/animation_player_editor_plugin.cpp83
2 files changed, 15 insertions, 84 deletions
diff --git a/editor/plugins/animation_library_editor.cpp b/editor/plugins/animation_library_editor.cpp
index 50ba1a71c0..2d20c0cca7 100644
--- a/editor/plugins/animation_library_editor.cpp
+++ b/editor/plugins/animation_library_editor.cpp
@@ -198,11 +198,17 @@ void AnimationLibraryEditor::_file_popup_selected(int p_id) {
} break;
case FILE_MENU_MAKE_LIBRARY_UNIQUE: {
StringName lib_name = file_dialog_library;
-
- Ref<AnimationLibrary> ald = al->duplicate();
-
- // TODO: should probably make all foreign animations assigned to this library
- // unique too.
+ List<StringName> animation_list;
+
+ Ref<AnimationLibrary> ald = memnew(AnimationLibrary);
+ al->get_animation_list(&animation_list);
+ for (const StringName &animation_name : animation_list) {
+ Ref<Animation> animation = al->get_animation(animation_name);
+ if (EditorNode::get_singleton()->is_resource_read_only(animation)) {
+ animation = animation->duplicate();
+ }
+ ald->add_animation(animation_name, animation);
+ }
Ref<EditorUndoRedoManager> undo_redo = EditorNode::get_singleton()->get_undo_redo();
undo_redo->create_action(vformat(TTR("Make Animation Library Unique: %s"), lib_name));
diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp
index 5ac63ce4db..5406aada09 100644
--- a/editor/plugins/animation_player_editor_plugin.cpp
+++ b/editor/plugins/animation_player_editor_plugin.cpp
@@ -283,26 +283,7 @@ void AnimationPlayerEditor::_animation_selected(int p_which) {
Ref<Animation> anim = player->get_animation(current);
{
- bool animation_library_is_foreign = false;
- if (!anim->get_path().is_resource_file()) {
- int srpos = anim->get_path().find("::");
- if (srpos != -1) {
- String base = anim->get_path().substr(0, srpos);
- if (ResourceLoader::get_resource_type(base) == "PackedScene") {
- if (!get_tree()->get_edited_scene_root() || get_tree()->get_edited_scene_root()->get_scene_file_path() != base) {
- animation_library_is_foreign = true;
- }
- } else {
- if (FileAccess::exists(base + ".import")) {
- animation_library_is_foreign = true;
- }
- }
- }
- } else {
- if (FileAccess::exists(anim->get_path() + ".import")) {
- animation_library_is_foreign = true;
- }
- }
+ bool animation_library_is_foreign = EditorNode::get_singleton()->is_resource_read_only(anim);
track_editor->set_animation(anim, animation_library_is_foreign);
Node *root = player->get_node(player->get_root());
@@ -773,26 +754,7 @@ void AnimationPlayerEditor::_animation_edit() {
if (current != String()) {
Ref<Animation> anim = player->get_animation(current);
- bool animation_library_is_foreign = false;
- if (!anim->get_path().is_resource_file()) {
- int srpos = anim->get_path().find("::");
- if (srpos != -1) {
- String base = anim->get_path().substr(0, srpos);
- if (ResourceLoader::get_resource_type(base) == "PackedScene") {
- if (!get_tree()->get_edited_scene_root() || get_tree()->get_edited_scene_root()->get_scene_file_path() != base) {
- animation_library_is_foreign = true;
- }
- } else {
- if (FileAccess::exists(base + ".import")) {
- animation_library_is_foreign = true;
- }
- }
- }
- } else {
- if (FileAccess::exists(anim->get_path() + ".import")) {
- animation_library_is_foreign = true;
- }
- }
+ bool animation_library_is_foreign = EditorNode::get_singleton()->is_resource_read_only(anim);
track_editor->set_animation(anim, animation_library_is_foreign);
@@ -866,25 +828,7 @@ void AnimationPlayerEditor::_update_player() {
// Check if the global library is foreign since we want to disable options for adding/remove/renaming animations if it is.
Ref<AnimationLibrary> library = player->get_animation_library(K);
if (K == "") {
- if (!library->get_path().is_resource_file()) {
- int srpos = library->get_path().find("::");
- if (srpos != -1) {
- String base = library->get_path().substr(0, srpos);
- if (ResourceLoader::get_resource_type(base) == "PackedScene") {
- if (!get_tree()->get_edited_scene_root() || get_tree()->get_edited_scene_root()->get_scene_file_path() != base) {
- foreign_global_anim_lib = true;
- }
- } else {
- if (FileAccess::exists(base + ".import")) {
- foreign_global_anim_lib = true;
- }
- }
- }
- } else {
- if (FileAccess::exists(library->get_path() + ".import")) {
- foreign_global_anim_lib = true;
- }
- }
+ foreign_global_anim_lib = EditorNode::get_singleton()->is_resource_read_only(library);
}
List<StringName> animlist;
@@ -950,26 +894,7 @@ void AnimationPlayerEditor::_update_player() {
String current = animation->get_item_text(animation->get_selected());
Ref<Animation> anim = player->get_animation(current);
- bool animation_library_is_foreign = false;
- if (!anim->get_path().is_resource_file()) {
- int srpos = anim->get_path().find("::");
- if (srpos != -1) {
- String base = anim->get_path().substr(0, srpos);
- if (ResourceLoader::get_resource_type(base) == "PackedScene") {
- if (!get_tree()->get_edited_scene_root() || get_tree()->get_edited_scene_root()->get_scene_file_path() != base) {
- animation_library_is_foreign = true;
- }
- } else {
- if (FileAccess::exists(base + ".import")) {
- animation_library_is_foreign = true;
- }
- }
- }
- } else {
- if (FileAccess::exists(anim->get_path() + ".import")) {
- animation_library_is_foreign = true;
- }
- }
+ bool animation_library_is_foreign = EditorNode::get_singleton()->is_resource_read_only(anim);
track_editor->set_animation(anim, animation_library_is_foreign);
Node *root = player->get_node(player->get_root());