diff options
| author | Rémi Verschelde <remi@verschelde.fr> | 2020-12-20 16:35:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-20 16:35:53 +0100 |
| commit | bc2ac0bbd685a01569ba6dde4c68adc1ccf37bb8 (patch) | |
| tree | 09fe174ea963c2745f8b268454acb5a39dab7de9 /editor/editor_node.cpp | |
| parent | e9d12f9e4ea30a6c3f2cf179f104a153d668c2a3 (diff) | |
| parent | b7367ac426659e02facc7c828e57aa687cce957c (diff) | |
| download | redot-engine-bc2ac0bbd685a01569ba6dde4c68adc1ccf37bb8.tar.gz | |
Merge pull request #43115 from RandomShaper/reset_track
Add animation reset track feature
Diffstat (limited to 'editor/editor_node.cpp')
| -rw-r--r-- | editor/editor_node.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index dfe5d64784..a8dc14427d 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -1419,6 +1419,17 @@ int EditorNode::_save_external_resources() { return saved; } +static void _reset_animation_players(Node *p_node, List<Ref<AnimatedValuesBackup>> *r_anim_backups) { + for (int i = 0; i < p_node->get_child_count(); i++) { + AnimationPlayer *player = Object::cast_to<AnimationPlayer>(p_node->get_child(i)); + if (player && player->is_reset_on_save_enabled() && player->can_apply_reset()) { + Ref<AnimatedValuesBackup> old_values = player->apply_reset(); + r_anim_backups->push_back(old_values); + } + _reset_animation_players(p_node->get_child(i), r_anim_backups); + } +} + void EditorNode::_save_scene(String p_file, int idx) { Node *scene = editor_data.get_edited_scene_root(idx); @@ -1433,6 +1444,8 @@ void EditorNode::_save_scene(String p_file, int idx) { } editor_data.apply_changes_in_editors(); + List<Ref<AnimatedValuesBackup>> anim_backups; + _reset_animation_players(scene, &anim_backups); _save_default_environment(); _set_scene_metadata(p_file, idx); @@ -1480,6 +1493,11 @@ void EditorNode::_save_scene(String p_file, int idx) { _save_external_resources(); editor_data.save_editor_external_data(); + + for (List<Ref<AnimatedValuesBackup>>::Element *E = anim_backups.front(); E; E = E->next()) { + E->get()->restore(); + } + if (err == OK) { scene->set_filename(ProjectSettings::get_singleton()->localize_path(p_file)); if (idx < 0 || idx == editor_data.get_edited_scene()) { |
