[Bf-blender-cvs] [c5e7265b1e9] fracture_modifier: fix for infinite recursion with cluster percentage activation
Martin Felke
noreply at git.blender.org
Thu Nov 16 20:29:02 CET 2017
Commit: c5e7265b1e9f87272beabb7dab85e3f516358772
Author: Martin Felke
Date: Thu Nov 16 20:28:39 2017 +0100
Branches: fracture_modifier
https://developer.blender.org/rBc5e7265b1e9f87272beabb7dab85e3f516358772
fix for infinite recursion with cluster percentage activation
also remove kinematic state of stopped shards (if object is triggered and not kinematic) at start frame now
===================================================================
M source/blender/blenkernel/intern/rigidbody.c
===================================================================
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 47298d8d21f..caf5dcf61ca 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -4513,14 +4513,16 @@ static void activateCluster(MeshIsland *mi, int particle_index, RigidBodyWorld *
for (i = 0; i < mi->participating_constraint_count; i++)
{
con = mi->participating_constraints[i];
- if (con->physics_constraint && con->mi1->particle_index == particle_index || particle_index == -1) {
+ if (con->physics_constraint && con->mi1->particle_index == particle_index) /*|| particle_index == -1)*/
+ {
if (con->mi1->rigidbody->flag & RBO_FLAG_KINEMATIC) {
activateRigidbody(con->mi1->rigidbody, rbw, con->mi1, ob);
activateCluster(con->mi1, particle_index, rbw, ob);
}
}
- if (con->physics_constraint && con->mi2->particle_index == particle_index || particle_index == -1) {
+ if (con->physics_constraint && con->mi2->particle_index == particle_index) /*|| particle_index == -1)*/
+ {
if (con->mi2->rigidbody->flag & RBO_FLAG_KINEMATIC) {
activateRigidbody(con->mi2->rigidbody, rbw, con->mi2, ob);
activateCluster(con->mi2, particle_index, rbw, ob);
@@ -5383,7 +5385,7 @@ static bool restoreKinematic(RigidBodyWorld *rbw)
triggered = go->ob->rigidbody_object->flag & RBO_FLAG_USE_KINEMATIC_DEACTIVATION;
FractureModifierData *fmd = (FractureModifierData*)modifiers_findByType(go->ob, eModifierType_Fracture);
- if (fmd && kinematic && triggered)
+ if (fmd && triggered)
{
MeshIsland* mi;
for (mi = fmd->meshIslands.first; mi; mi = mi->next)
@@ -5391,7 +5393,15 @@ static bool restoreKinematic(RigidBodyWorld *rbw)
if (mi->rigidbody)
{
mi->rigidbody->flag &= ~RBO_FLAG_KINEMATIC_REBUILD;
- mi->rigidbody->flag |= RBO_FLAG_KINEMATIC;
+ if (kinematic)
+ {
+ mi->rigidbody->flag |= RBO_FLAG_KINEMATIC;
+ }
+ else
+ {
+ //might happen if being hit by a stop trigger, remove kinematic here in this case
+ mi->rigidbody->flag &= ~RBO_FLAG_KINEMATIC;
+ }
mi->rigidbody->flag |= RBO_FLAG_NEEDS_VALIDATE;
did_it = true;
}
More information about the Bf-blender-cvs
mailing list