forked from bartvdbraak/blender
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:
parent
d8e2c475a0
commit
7ef54879ed
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user