Add rigidbodyworld to id looper.
This commit is contained in:
parent
74f557982d
commit
4f0f0d1bce
|
@ -53,6 +53,11 @@ struct RigidBodyOb *BKE_rigidbody_copy_object(struct Object *ob);
|
|||
struct RigidBodyCon *BKE_rigidbody_copy_constraint(struct Object *ob);
|
||||
void BKE_rigidbody_relink_constraint(struct RigidBodyCon *rbc);
|
||||
|
||||
/* Callback format for performing operations on ID-pointers for rigidbody world. */
|
||||
typedef void (*RigidbodyWorldIDFunc)(struct RigidBodyWorld *rbw, struct ID **idpoin, void *userdata, int cd_flag);
|
||||
|
||||
void BKE_rigidbody_world_id_loop(struct RigidBodyWorld *rbw, RigidbodyWorldIDFunc func, void *userdata);
|
||||
|
||||
/* -------------- */
|
||||
/* Setup */
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@
|
|||
#include "BKE_library_query.h"
|
||||
#include "BKE_modifier.h"
|
||||
#include "BKE_particle.h"
|
||||
#include "BKE_rigidbody.h"
|
||||
#include "BKE_sequencer.h"
|
||||
#include "BKE_tracking.h"
|
||||
|
||||
|
@ -103,6 +104,13 @@ typedef struct LibraryForeachIDData {
|
|||
void *user_data;
|
||||
} LibraryForeachIDData;
|
||||
|
||||
static void library_foreach_rigidbodyworldSceneLooper(
|
||||
struct RigidBodyWorld *UNUSED(rbw), ID **id_pointer, void *user_data, int cd_flag)
|
||||
{
|
||||
LibraryForeachIDData *data = (LibraryForeachIDData *) user_data;
|
||||
FOREACH_CALLBACK_INVOKE_ID_PP(data->self_id, id_pointer, data->flag, data->callback, data->user_data, cd_flag);
|
||||
}
|
||||
|
||||
static void library_foreach_modifiersForeachIDLink(
|
||||
void *user_data, Object *UNUSED(object), ID **id_pointer, int cd_flag)
|
||||
{
|
||||
|
@ -266,6 +274,10 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
|
|||
}
|
||||
}
|
||||
|
||||
if (scene->rigidbody_world) {
|
||||
BKE_rigidbody_world_id_loop(scene->rigidbody_world, library_foreach_rigidbodyworldSceneLooper, &data);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -58,6 +58,7 @@
|
|||
#include "BKE_effect.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_library.h"
|
||||
#include "BKE_library_query.h"
|
||||
#include "BKE_mesh.h"
|
||||
#include "BKE_object.h"
|
||||
#include "BKE_pointcache.h"
|
||||
|
@ -957,6 +958,20 @@ void BKE_rigidbody_world_groups_relink(RigidBodyWorld *rbw)
|
|||
rbw->effector_weights->group = (Group *)rbw->effector_weights->group->id.newid;
|
||||
}
|
||||
|
||||
void BKE_rigidbody_world_id_loop(RigidBodyWorld *rbw, RigidbodyWorldIDFunc func, void *userdata)
|
||||
{
|
||||
func(rbw, (ID **)&rbw->group, userdata, IDWALK_NOP);
|
||||
func(rbw, (ID **)&rbw->constraints, userdata, IDWALK_NOP);
|
||||
func(rbw, (ID **)&rbw->effector_weights->group, userdata, IDWALK_NOP);
|
||||
|
||||
if (rbw->objects) {
|
||||
int i;
|
||||
for (i = 0; i < rbw->numbodies; i++) {
|
||||
func(rbw, (ID **)&rbw->objects[i], userdata, IDWALK_NOP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Add rigid body settings to the specified object */
|
||||
RigidBodyOb *BKE_rigidbody_create_object(Scene *scene, Object *ob, short type)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue