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:
-rw-r--r--source/blender/blenkernel/intern/ipo.c19
-rw-r--r--source/blender/blenloader/intern/versioning_250.c14
2 files changed, 29 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c
index bbc1874c2ae..f51fee674cf 100644
--- a/source/blender/blenkernel/intern/ipo.c
+++ b/source/blender/blenkernel/intern/ipo.c
@@ -46,6 +46,7 @@
/* since we have versioning code here */
#define DNA_DEPRECATED_ALLOW
+#include "DNA_actuator_types.h"
#include "DNA_anim_types.h"
#include "DNA_constraint_types.h"
#include "DNA_camera_types.h"
@@ -1753,6 +1754,24 @@ void do_versions_ipos_to_animato(Main *main)
ipo_to_animdata(id, ob->ipo, NULL, NULL, NULL);
ob->ipo->id.us--;
ob->ipo = NULL;
+
+ {
+ /* If we have any empty action actuators, assume they were
+ converted IPO Actuators using the object IPO */
+ bActuator *act;
+ bActionActuator *aa;
+
+ for (act = ob->actuators.first; act; act = act->next) {
+ /* Any actuators set to ACT_IPO at this point are actually Action Actuators that
+ need this converted IPO to finish converting the actuator. */
+ if (act->type == ACT_IPO)
+ {
+ aa = (bActionActuator*)act->data;
+ aa->act = ob->adt->action;
+ act->type = ACT_ACTION;
+ }
+ }
+ }
}
}
diff --git a/source/blender/blenloader/intern/versioning_250.c b/source/blender/blenloader/intern/versioning_250.c
index 5ed39ad5307..bfaa526b995 100644
--- a/source/blender/blenloader/intern/versioning_250.c
+++ b/source/blender/blenloader/intern/versioning_250.c
@@ -2558,11 +2558,11 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *main)
for (ob = main->object.first; ob; ob = ob->id.next) {
for (act = ob->actuators.first; act; act = act->next) {
if (act->type == ACT_IPO) {
- // Create the new actuator
+ /* Create the new actuator */
ia = act->data;
aa = MEM_callocN(sizeof(bActionActuator), "fcurve -> action actuator do_version");
- // Copy values
+ /* Copy values */
aa->type = ia->type;
aa->flag = ia->flag;
aa->sta = ia->sta;
@@ -2572,12 +2572,18 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *main)
if (ob->adt)
aa->act = ob->adt->action;
- // Get rid of the old actuator
+ /* Get rid of the old actuator */
MEM_freeN(ia);
- // Assign the new actuator
+ /* Assign the new actuator */
act->data = aa;
act->type = act->otype = ACT_ACTION;
+
+ /* Fix for converting 2.4x files: if we don't have an action, but we have an
+ object IPO, then leave the actuator as an IPO actuator for now and let the
+ IPO conversion code handle it */
+ if (ob->ipo && !aa->act)
+ act->type = ACT_IPO;
}
else if (act->type == ACT_SHAPEACTION) {
act->type = act->otype = ACT_ACTION;