Commit: b0921d3f99e86f7917accd1249ca78f5a6ec7d3f Author: Martin Felke Date: Thu Dec 18 20:20:23 2014 +0100 Branches: fracture_modifier https://developer.blender.org/rBb0921d3f99e86f7917accd1249ca78f5a6ec7d3f
activate objects now when constraints are broken, this is an attempt to get rid
of single shards stuck in the air, not being connected visually to other shards
===================================================================
M source/blender/blenkernel/intern/rigidbody.c
===================================================================
diff --git a/source/blender/blenkernel/intern/rigidbody.c
b/source/blender/blenkernel/intern/rigidbody.c
index fde1185..e3a9052 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -72,6 +72,14 @@
#ifdef WITH_BULLET
+static void activateRigidbody(RigidBodyOb* rbo)
+{
+ rbo->flag &= ~RBO_FLAG_KINEMATIC;
+ RB_body_set_mass(rbo->physics_object, RBO_GET_MASS(rbo));
+ RB_body_set_kinematic_state(rbo->physics_object, false);
+ rbo->flag |= RBO_FLAG_NEEDS_VALIDATE;
+}
+
static void validateShard(RigidBodyWorld *rbw, MeshIsland *mi, Object *ob, int
rebuild);
static bool isModifierActive(FractureModifierData *rmd) {
@@ -1714,10 +1722,7 @@ static int filterCallback(void* world, void* island1,
void* island2, void *blend
if ((rbo->flag & RBO_FLAG_KINEMATIC) &&
((mi1 == mi)))
{
if (rbo->physics_object) {
- rbo->flag &=
~RBO_FLAG_KINEMATIC;
-
RB_body_set_mass(rbo->physics_object, RBO_GET_MASS(rbo));
-
RB_body_set_kinematic_state(rbo->physics_object, false);
- rbo->flag |=
RBO_FLAG_NEEDS_VALIDATE;
+ activateRigidbody(rbo);
}
}
@@ -1729,10 +1734,7 @@ static int filterCallback(void* world, void* island1,
void* island2, void *blend
if (rbo)
{
- rbo->flag &= ~RBO_FLAG_KINEMATIC;
- RB_body_set_mass(rbo->physics_object,
RBO_GET_MASS(rbo));
-
RB_body_set_kinematic_state(rbo->physics_object, false);
- rbo->flag |= RBO_FLAG_NEEDS_VALIDATE;
+ activateRigidbody(rbo);
}
}
}
@@ -1757,10 +1759,7 @@ static int filterCallback(void* world, void* island1,
void* island2, void *blend
if ((rbo->flag & RBO_FLAG_KINEMATIC) &&
((mi2 == mi)))
{
if (rbo->physics_object) {
- rbo->flag &=
~RBO_FLAG_KINEMATIC;
-
RB_body_set_mass(rbo->physics_object, RBO_GET_MASS(rbo));
-
RB_body_set_kinematic_state(rbo->physics_object, false);
- rbo->flag |=
RBO_FLAG_NEEDS_VALIDATE;
+ activateRigidbody(rbo);
}
}
}
@@ -1771,17 +1770,14 @@ static int filterCallback(void* world, void* island1,
void* island2, void *blend
if (rbo)
{
- rbo->flag &= ~RBO_FLAG_KINEMATIC;
- RB_body_set_mass(rbo->physics_object,
RBO_GET_MASS(rbo));
-
RB_body_set_kinematic_state(rbo->physics_object, false);
- rbo->flag |= RBO_FLAG_NEEDS_VALIDATE;
+ activateRigidbody(rbo);
}
}
}
}
ret = colgroup_check(ob1->rigidbody_object->col_groups,
ob2->rigidbody_object->col_groups);
- return ret && !(ob1->rigidbody_object->flag & RBO_FLAG_IS_GHOST) &&
!(ob2->rigidbody_object->flag & RBO_FLAG_IS_GHOST);
+ return ret && (!(ob1->rigidbody_object->flag & RBO_FLAG_IS_GHOST) &&
!(ob2->rigidbody_object->flag & RBO_FLAG_IS_GHOST));
}
#if 0
@@ -2713,6 +2709,9 @@ static void rigidbody_update_simulation(Scene *scene,
RigidBodyWorld *rbw, bool
if (con->physics_constraint) {
RB_constraint_set_enabled(con->physics_constraint, false);
}
+
+
activateRigidbody(con->mi1->rigidbody);
+
activateRigidbody(con->mi2->rigidbody);
}
}
}
@@ -2734,6 +2733,9 @@ static void rigidbody_update_simulation(Scene *scene,
RigidBodyWorld *rbw, bool
if (con->physics_constraint) {
RB_constraint_set_enabled(con->physics_constraint, false);
}
+
+
activateRigidbody(con->mi1->rigidbody);
+
activateRigidbody(con->mi2->rigidbody);
}
}
}
@@ -2806,6 +2808,9 @@ static void rigidbody_update_simulation(Scene *scene,
RigidBodyWorld *rbw, bool
if
(rbsc->physics_constraint) {
RB_constraint_set_enabled(rbsc->physics_constraint, false);
}
+
+
activateRigidbody(rbsc->mi1->rigidbody);
+
activateRigidbody(rbsc->mi2->rigidbody);
}
}
}
@@ -2821,6 +2826,9 @@ static void rigidbody_update_simulation(Scene *scene,
RigidBodyWorld *rbw, bool
if
(rbsc->physics_constraint) {
RB_constraint_set_enabled(rbsc->physics_constraint, false);
}
+
+
activateRigidbody(rbsc->mi1->rigidbody);
+
activateRigidbody(rbsc->mi2->rigidbody);
}
}
@@ -2840,6 +2848,9 @@ static void rigidbody_update_simulation(Scene *scene,
RigidBodyWorld *rbw, bool
if
(rbsc->physics_constraint) {
RB_constraint_set_enabled(rbsc->physics_constraint, false);
}
+
+
activateRigidbody(rbsc->mi1->rigidbody);
+
activateRigidbody(rbsc->mi2->rigidbody);
}
}
}
@@ -2855,6 +2866,9 @@ static void rigidbody_update_simulation(Scene *scene,
RigidBodyWorld *rbw, bool
if
(rbsc->physics_constraint) {
RB_constraint_set_enabled(rbsc->physics_constraint, false);
}
+
+
activateRigidbody(rbsc->mi1->rigidbody);
+
activateRigidbody(rbsc->mi2->rigidbody);
}
}
}
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs
