1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-25 15:37:42 +00:00

Merge pull request #49495 from kleonc/sprite_frames_editor-updating-fixes-3x

This commit is contained in:
Rémi Verschelde
2022-08-05 19:35:30 +02:00
committed by GitHub
4 changed files with 52 additions and 23 deletions

View File

@@ -745,9 +745,13 @@ void SpriteFramesEditor::_animation_name_edited() {
undo_redo->add_undo_method(frames, "rename_animation", name, edited_anim);
for (List<Node *>::Element *E = nodes.front(); E; E = E->next()) {
String current = E->get()->call("get_animation");
StringName current = E->get()->call("get_animation");
if (current != edited_anim) {
continue;
}
undo_redo->add_do_method(E->get(), "set_animation", name);
undo_redo->add_undo_method(E->get(), "set_animation", edited_anim);
undo_redo->add_undo_method(E->get(), "set_animation", current);
}
undo_redo->add_do_method(this, "_update_library");
@@ -775,8 +779,14 @@ void SpriteFramesEditor::_animation_add() {
undo_redo->add_do_method(this, "_update_library");
undo_redo->add_undo_method(this, "_update_library");
// Assign the newly added animation to the edited anim sprite and to all other anim sprites having invalid animation.
Object *edited_anim_sprite = EditorNode::get_singleton()->get_inspector()->get_edited_object();
for (List<Node *>::Element *E = nodes.front(); E; E = E->next()) {
String current = E->get()->call("get_animation");
StringName current = E->get()->call("get_animation");
if (frames->has_animation(current) && E->get() != edited_anim_sprite) {
continue;
}
undo_redo->add_do_method(E->get(), "set_animation", name);
undo_redo->add_undo_method(E->get(), "set_animation", current);
}
@@ -811,10 +821,35 @@ void SpriteFramesEditor::_animation_remove_confirmed() {
Ref<Texture> frame = frames->get_frame(edited_anim, i);
undo_redo->add_undo_method(frames, "add_frame", edited_anim, frame);
}
StringName new_edited_anim = StringName();
List<StringName> anim_names;
frames->get_animation_list(&anim_names);
anim_names.sort_custom<StringName::AlphCompare>();
// If removing not the last animation, make the first animation left the new edited one.
if (anim_names.size() > 1) {
new_edited_anim = edited_anim != anim_names.front()->get() ? anim_names.front()->get() : anim_names.front()->next()->get();
List<Node *> nodes;
_find_anim_sprites(EditorNode::get_singleton()->get_edited_scene(), &nodes, Ref<SpriteFrames>(frames));
for (List<Node *>::Element *E = nodes.front(); E; E = E->next()) {
StringName current = E->get()->call("get_animation");
if (current != edited_anim) {
continue;
}
undo_redo->add_do_method(E->get(), "set_animation", new_edited_anim);
undo_redo->add_undo_method(E->get(), "set_animation", current);
}
}
undo_redo->add_do_method(this, "_update_library");
undo_redo->add_undo_method(this, "_update_library");
edited_anim = StringName();
edited_anim = new_edited_anim;
undo_redo->commit_action();
}