Fix for properly converting 2.4x IPO Actuators to 2.6x Action Actuators. Previously the converted Action Actuators would not have an action assigned. This fix is based on code provided by Maxim Aleynikov in his report: [#30410] not full conversion IPO Actuator in Action Actuator.

This commit is contained in:
Mitchell Stokes 2012-06-21 06:27:51 +00:00
parent d8e2c475a0
commit 7ef54879ed
2 changed files with 29 additions and 4 deletions

@ -46,6 +46,7 @@
/* since we have versioning code here */ /* since we have versioning code here */
#define DNA_DEPRECATED_ALLOW #define DNA_DEPRECATED_ALLOW
#include "DNA_actuator_types.h"
#include "DNA_anim_types.h" #include "DNA_anim_types.h"
#include "DNA_constraint_types.h" #include "DNA_constraint_types.h"
#include "DNA_camera_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); ipo_to_animdata(id, ob->ipo, NULL, NULL, NULL);
ob->ipo->id.us--; ob->ipo->id.us--;
ob->ipo = NULL; 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;
}
}
}
} }
} }

@ -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 (ob = main->object.first; ob; ob = ob->id.next) {
for (act = ob->actuators.first; act; act = act->next) { for (act = ob->actuators.first; act; act = act->next) {
if (act->type == ACT_IPO) { if (act->type == ACT_IPO) {
// Create the new actuator /* Create the new actuator */
ia = act->data; ia = act->data;
aa = MEM_callocN(sizeof(bActionActuator), "fcurve -> action actuator do_version"); aa = MEM_callocN(sizeof(bActionActuator), "fcurve -> action actuator do_version");
// Copy values /* Copy values */
aa->type = ia->type; aa->type = ia->type;
aa->flag = ia->flag; aa->flag = ia->flag;
aa->sta = ia->sta; aa->sta = ia->sta;
@ -2572,12 +2572,18 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *main)
if (ob->adt) if (ob->adt)
aa->act = ob->adt->action; aa->act = ob->adt->action;
// Get rid of the old actuator /* Get rid of the old actuator */
MEM_freeN(ia); MEM_freeN(ia);
// Assign the new actuator /* Assign the new actuator */
act->data = aa; act->data = aa;
act->type = act->otype = ACT_ACTION; 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) { else if (act->type == ACT_SHAPEACTION) {
act->type = act->otype = ACT_ACTION; act->type = act->otype = ACT_ACTION;