Commit: 4f0f0d1bcede8f307c4601a7e94b36c179d4d5a8
Author: Bastien Montagne
Date:   Thu Oct 8 14:59:24 2015 +0200
Branches: master
https://developer.blender.org/rB4f0f0d1bcede8f307c4601a7e94b36c179d4d5a8

Add rigidbodyworld to id looper.

===================================================================

M       source/blender/blenkernel/BKE_rigidbody.h
M       source/blender/blenkernel/intern/library_query.c
M       source/blender/blenkernel/intern/rigidbody.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_rigidbody.h 
b/source/blender/blenkernel/BKE_rigidbody.h
index a30ce6c..272abc4 100644
--- a/source/blender/blenkernel/BKE_rigidbody.h
+++ b/source/blender/blenkernel/BKE_rigidbody.h
@@ -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 */
 
diff --git a/source/blender/blenkernel/intern/library_query.c 
b/source/blender/blenkernel/intern/library_query.c
index 0d30fd7..a1b8432 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -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;
                }
 
diff --git a/source/blender/blenkernel/intern/rigidbody.c 
b/source/blender/blenkernel/intern/rigidbody.c
index 476b9a2..43634c5 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -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)
 {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to