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/BKE_rigidbody.h7
-rw-r--r--source/blender/blenkernel/intern/collection.c5
-rw-r--r--source/blender/blenkernel/intern/rigidbody.c18
-rw-r--r--source/blender/blenloader/intern/versioning_280.c2
4 files changed, 30 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_rigidbody.h b/source/blender/blenkernel/BKE_rigidbody.h
index 4d652326a14..9a5f3c31264 100644
--- a/source/blender/blenkernel/BKE_rigidbody.h
+++ b/source/blender/blenkernel/BKE_rigidbody.h
@@ -37,9 +37,11 @@
struct RigidBodyWorld;
struct RigidBodyOb;
+struct Collection;
struct Depsgraph;
-struct Scene;
+struct Main;
struct Object;
+struct Scene;
/* -------------- */
/* Memory Management */
@@ -70,6 +72,9 @@ struct RigidBodyCon *BKE_rigidbody_create_constraint(struct Scene *scene, struct
void BKE_rigidbody_objects_collection_validate(struct Scene *scene, struct RigidBodyWorld *rbw);
void BKE_rigidbody_constraints_collection_validate(struct Scene *scene, struct RigidBodyWorld *rbw);
+/* Ensure object added to collection gets RB data if that collection is a RB one. */
+void BKE_rigidbody_main_collection_object_add(struct Main *bmain, struct Collection *collection, struct Object *object);
+
/* copy */
struct RigidBodyWorld *BKE_rigidbody_world_copy(struct RigidBodyWorld *rbw, const int flag);
void BKE_rigidbody_world_groups_relink(struct RigidBodyWorld *rbw);
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index 9b68c61e016..33287d5a2f8 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -42,6 +42,7 @@
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_object.h"
+#include "BKE_rigidbody.h"
#include "BKE_scene.h"
#include "DNA_ID.h"
@@ -515,6 +516,10 @@ static bool collection_object_add(Main *bmain, Collection *collection, Object *o
DEG_id_tag_update_ex(bmain, &collection->id, ID_RECALC_COPY_ON_WRITE);
}
+ if ((flag & LIB_ID_CREATE_NO_MAIN) == 0) {
+ BKE_rigidbody_main_collection_object_add(bmain, collection, ob);
+ }
+
return true;
}
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index aa5051e25cd..7d4bd74389e 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -61,6 +61,7 @@
#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
+#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_mesh_runtime.h"
#include "BKE_object.h"
@@ -1173,6 +1174,23 @@ void BKE_rigidbody_constraints_collection_validate(Scene *scene, RigidBodyWorld
}
}
+void BKE_rigidbody_main_collection_object_add(Main *bmain, Collection *collection, Object *object)
+{
+ for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
+ RigidBodyWorld *rbw = scene->rigidbody_world;
+
+ if (rbw == NULL) {
+ continue;
+ }
+
+ if (rbw->group == collection && object->type == OB_MESH && object->rigidbody_object == NULL) {
+ object->rigidbody_object = BKE_rigidbody_create_object(scene, object, RBO_TYPE_ACTIVE);
+ }
+ if (rbw->constraints == collection && object->rigidbody_constraint == NULL) {
+ object->rigidbody_constraint = BKE_rigidbody_create_constraint(scene, object, RBC_TYPE_FIXED);
+ }
+ }
+}
/* ************************************** */
/* Utilities API */
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 237e1387a4e..e2ac0f16e34 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -918,7 +918,7 @@ void do_versions_after_linking_280(Main *bmain)
BKE_paint_toolslots_init_from_main(bmain);
}
- if (!MAIN_VERSION_ATLEAST(bmain, 280, 36)) {
+ if (!MAIN_VERSION_ATLEAST(bmain, 280, 38)) {
/* Ensure we get valid rigidbody object/constraint data in relevant collections' objects. */
for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
RigidBodyWorld *rbw = scene->rigidbody_world;