Skip to content

Commit

Permalink
Merge pull request #39968 from lordkettune/custom-tracks-fix
Browse files Browse the repository at this point in the history
Fix custom tracks causing issues on reimport
  • Loading branch information
akien-mga authored Jul 3, 2020
2 parents c284ff1 + 4313a7b commit 8ab6915
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 6 deletions.
9 changes: 4 additions & 5 deletions editor/import/resource_importer_scene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -943,9 +943,9 @@ void ResourceImporterScene::_make_external_resources(Node *p_node, const String
ERR_CONTINUE(anim.is_null());

if (!p_animations.has(anim)) {
// We are making external files so they are modifiable
// Tracks from source file should be set as imported, anything else is a custom track.
for (int i = 0; i < anim->get_track_count(); i++) {
anim->track_set_imported(i, false);
anim->track_set_imported(i, true);
}

String ext_name;
Expand All @@ -957,10 +957,9 @@ void ResourceImporterScene::_make_external_resources(Node *p_node, const String
}

if (FileAccess::exists(ext_name) && p_keep_animations) {
//try to keep custom animation tracks
// Copy custom animation tracks from previously imported files.
Ref<Animation> old_anim = ResourceLoader::load(ext_name, "Animation", true);
if (old_anim.is_valid()) {
//meergeee
for (int i = 0; i < old_anim->get_track_count(); i++) {
if (!old_anim->track_is_imported(i)) {
old_anim->copy_track(i, anim);
Expand All @@ -970,7 +969,7 @@ void ResourceImporterScene::_make_external_resources(Node *p_node, const String
}
}

anim->set_path(ext_name, true); //if not set, then its never saved externally
anim->set_path(ext_name, true); // Set path to save externally.
ResourceSaver::save(ext_name, anim, ResourceSaver::FLAG_CHANGE_PATH);
p_animations[anim] = anim;
}
Expand Down
5 changes: 4 additions & 1 deletion scene/resources/animation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2577,7 +2577,10 @@ void Animation::copy_track(int p_track, Ref<Animation> p_to_animation) {
p_to_animation->track_set_enabled(dst_track, track_is_enabled(p_track));
p_to_animation->track_set_interpolation_type(dst_track, track_get_interpolation_type(p_track));
p_to_animation->track_set_interpolation_loop_wrap(dst_track, track_get_interpolation_loop_wrap(p_track));
p_to_animation->value_track_set_update_mode(dst_track, value_track_get_update_mode(p_track));
if (track_get_type(p_track) == TYPE_VALUE) {
p_to_animation->value_track_set_update_mode(dst_track, value_track_get_update_mode(p_track));
}

for (int i = 0; i < track_get_key_count(p_track); i++) {
p_to_animation->track_insert_key(dst_track, track_get_key_time(p_track, i), track_get_key_value(p_track, i), track_get_key_transition(p_track, i));
}
Expand Down

0 comments on commit 8ab6915

Please sign in to comment.