Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Leung <aligorith@gmail.com>2009-11-22 14:15:38 +0300
committerJoshua Leung <aligorith@gmail.com>2009-11-22 14:15:38 +0300
commit058454368ac82ee3a954b9c911631a0705b49fe1 (patch)
treebe1ef09ba901ead416a84c0a153149b75cd13cc9
parent02e99b9a43f460ef1eb1168c60a024f8f98e6fb8 (diff)
Small tweak to file-loading code for F-Curves so that F-Modifiers using library data get re-loaded correct
-rw-r--r--source/blender/blenloader/intern/readfile.c55
1 files changed, 46 insertions, 9 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 414dd75d627..5dc7cdad8ed 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -10426,15 +10426,56 @@ static void expand_constraint_channels(FileData *fd, Main *mainvar, ListBase *ch
}
}
-// XXX depreceated - old animation system
+static void expand_fmodifiers(FileData *fd, Main *mainvar, ListBase *list)
+{
+ FModifier *fcm;
+
+ for (fcm= list->first; fcm; fcm= fcm->next) {
+ /* library data for specific F-Modifier types */
+ switch (fcm->type) {
+ case FMODIFIER_TYPE_PYTHON:
+ {
+ FMod_Python *data= (FMod_Python *)fcm->data;
+
+ expand_doit(fd, mainvar, data->script);
+ }
+ break;
+ }
+ }
+}
+
+static void expand_fcurves(FileData *fd, Main *mainvar, ListBase *list)
+{
+ FCurve *fcu;
+
+ for (fcu= list->first; fcu; fcu= fcu->next) {
+ /* Driver targets if there is a driver */
+ if (fcu->driver) {
+ ChannelDriver *driver= fcu->driver;
+ DriverTarget *dtar;
+
+ for (dtar= driver->targets.first; dtar; dtar= dtar->next)
+ expand_doit(fd, mainvar, dtar->id);
+ }
+
+ /* F-Curve Modifiers */
+ expand_fmodifiers(fd, mainvar, &fcu->modifiers);
+ }
+}
+
static void expand_action(FileData *fd, Main *mainvar, bAction *act)
{
bActionChannel *chan;
+ // XXX depreceated - old animation system --------------
for (chan=act->chanbase.first; chan; chan=chan->next) {
expand_doit(fd, mainvar, chan->ipo);
expand_constraint_channels(fd, mainvar, &chan->constraintChannels);
}
+ // ---------------------------------------------------
+
+ /* F-Curves in Action */
+ expand_fcurves(fd, mainvar, &act->curves);
}
static void expand_keyingsets(FileData *fd, Main *mainvar, ListBase *list)
@@ -10458,6 +10499,9 @@ static void expand_animdata_nlastrips(FileData *fd, Main *mainvar, ListBase *lis
/* check child strips */
expand_animdata_nlastrips(fd, mainvar, &strip->strips);
+ /* check F-Modifiers */
+ expand_fmodifiers(fd, mainvar, &strip->modifiers);
+
/* relink referenced action */
expand_doit(fd, mainvar, strip->act);
}
@@ -10465,7 +10509,6 @@ static void expand_animdata_nlastrips(FileData *fd, Main *mainvar, ListBase *lis
static void expand_animdata(FileData *fd, Main *mainvar, AnimData *adt)
{
- FCurve *fcd;
NlaTrack *nlt;
/* own action */
@@ -10473,13 +10516,7 @@ static void expand_animdata(FileData *fd, Main *mainvar, AnimData *adt)
expand_doit(fd, mainvar, adt->tmpact);
/* drivers - assume that these F-Curves have driver data to be in this list... */
- for (fcd= adt->drivers.first; fcd; fcd= fcd->next) {
- ChannelDriver *driver= fcd->driver;
- DriverTarget *dtar;
-
- for (dtar= driver->targets.first; dtar; dtar= dtar->next)
- expand_doit(fd, mainvar, dtar->id);
- }
+ expand_fcurves(fd, mainvar, &adt->drivers);
/* nla-data - referenced actions */
for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next)