Fix rename animation in SpriteFramesEditor/AnimationNodeStateMachineEditor

When the name suffix grows, the old name is used if it is obtained first.

Fix the case where the following error message would appear when renaming
an animation.

```
ERROR: Animation '' doesn't exist.
   at: get_frame_count (scene/resources/sprite_frames.cpp:71)
```

(cherry picked from commit e9cd29cf22)
This commit is contained in:
Rindbee 2023-07-18 13:10:58 +08:00 committed by Yuri Sizov
parent 965ea011a0
commit 52d56d806d
2 changed files with 8 additions and 1 deletions

View File

@ -1507,6 +1507,10 @@ void AnimationNodeStateMachineEditor::_name_edited(const String &p_text) {
int base = 1; int base = 1;
String name = base_name; String name = base_name;
while (state_machine->has_node(name)) { while (state_machine->has_node(name)) {
if (name == prev_name) {
name_edit_popup->hide(); // The old name wins, the name doesn't change, just hide the popup.
return;
}
base++; base++;
name = base_name + " " + itos(base); name = base_name + " " + itos(base);
} }

View File

@ -948,13 +948,16 @@ void SpriteFramesEditor::_animation_name_edited() {
String name = new_name; String name = new_name;
int counter = 0; int counter = 0;
while (frames->has_animation(name)) { while (frames->has_animation(name)) {
if (name == String(edited_anim)) {
edited->set_text(0, name); // The name didn't change, just updated the column text to name.
return;
}
counter++; counter++;
name = new_name + "_" + itos(counter); name = new_name + "_" + itos(counter);
} }
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
undo_redo->create_action(TTR("Rename Animation"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); undo_redo->create_action(TTR("Rename Animation"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene());
_rename_node_animation(undo_redo, false, edited_anim, "", "");
undo_redo->add_do_method(frames.ptr(), "rename_animation", edited_anim, name); undo_redo->add_do_method(frames.ptr(), "rename_animation", edited_anim, name);
undo_redo->add_undo_method(frames.ptr(), "rename_animation", name, edited_anim); undo_redo->add_undo_method(frames.ptr(), "rename_animation", name, edited_anim);
_rename_node_animation(undo_redo, false, edited_anim, name, name); _rename_node_animation(undo_redo, false, edited_anim, name, name);