Fix/Cleanup: Move some animdata versioning code out of liblinking process.

This was propably added way before we had the after-lib-link versionning
code, but now doing that sort of fixes at liblink time is bad.
This commit is contained in:
Bastien Montagne 2020-05-26 12:25:17 +02:00
parent 4835a09bb1
commit b44c3ac1e9
2 changed files with 29 additions and 13 deletions

View File

@ -3415,11 +3415,6 @@ static void lib_link_nladata_strips(FileData *fd, ID *id, ListBase *list)
/* reassign the counted-reference to action */
strip->act = newlibadr(fd, id->lib, strip->act);
/* fix action id-root (i.e. if it comes from a pre 2.57 .blend file) */
if ((strip->act) && (strip->act->idroot == 0)) {
strip->act->idroot = GS(id->name);
}
}
}
@ -3514,14 +3509,6 @@ static void lib_link_animdata(FileData *fd, ID *id, AnimData *adt)
adt->action = newlibadr(fd, id->lib, adt->action);
adt->tmpact = newlibadr(fd, id->lib, adt->tmpact);
/* fix action id-roots (i.e. if they come from a pre 2.57 .blend file) */
if ((adt->action) && (adt->action->idroot == 0)) {
adt->action->idroot = GS(id->name);
}
if ((adt->tmpact) && (adt->tmpact->idroot == 0)) {
adt->tmpact->idroot = GS(id->name);
}
/* link drivers */
lib_link_fcurves(fd, id, &adt->drivers);

View File

@ -61,6 +61,7 @@
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BKE_anim_data.h"
#include "BKE_anim_visualization.h"
#include "BKE_armature.h"
#include "BKE_colortools.h"
@ -2352,4 +2353,32 @@ void do_versions_after_linking_250(Main *bmain)
}
FOREACH_NODETREE_END;
}
if (!MAIN_VERSION_ATLEAST(bmain, 258, 0)) {
/* Some very old (original comments claim pre-2.57) versionning that was wrongly done in
* lib-linking code... Putting it here just to be sure (this is also checked at runtime anyway
* by `action_idcode_patch_check`). */
ID *id;
FOREACH_MAIN_ID_BEGIN (bmain, id) {
AnimData *adt = BKE_animdata_from_id(id);
if (adt != NULL) {
/* Fix actions' id-roots (i.e. if they come from a pre 2.57 .blend file). */
if ((adt->action) && (adt->action->idroot == 0)) {
adt->action->idroot = GS(id->name);
}
if ((adt->tmpact) && (adt->tmpact->idroot == 0)) {
adt->tmpact->idroot = GS(id->name);
}
LISTBASE_FOREACH (NlaTrack *, nla_track, &adt->nla_tracks) {
LISTBASE_FOREACH (NlaStrip *, nla_strip, &nla_track->strips) {
if ((nla_strip->act) && (nla_strip->act->idroot == 0)) {
nla_strip->act->idroot = GS(id->name);
}
}
}
}
}
FOREACH_MAIN_ID_END;
}
}