Commit: 6c4c1fbb3c58db4c58acf3a4021c13ddf7949598
Author: Martin Felke
Date:   Thu Jan 1 12:54:51 2015 +0100
Branches: fracture_modifier
https://developer.blender.org/rB6c4c1fbb3c58db4c58acf3a4021c13ddf7949598

fix for unnecessary activation of all parts again and again, this resulted in 
never ending movement... now this applies to kinematic objects only, which lose 
their kinematic state due to being triggered

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

M       source/blender/blenkernel/intern/rigidbody.c

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

diff --git a/source/blender/blenkernel/intern/rigidbody.c 
b/source/blender/blenkernel/intern/rigidbody.c
index 9dbcf18..73dc91c 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -72,10 +72,13 @@
 
 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;
+       if (rbo->flag & RBO_FLAG_KINEMATIC)
+       {
+               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);
@@ -2707,10 +2710,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);
                                                                                
                        }
-
-                                                                               
                        activateRigidbody(con->mi1->rigidbody);
-                                                                               
                        activateRigidbody(con->mi2->rigidbody);
                                                                                
                }
                                                                                
        }
                                                                                
}
@@ -2731,10 +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);
                                                                                
                        }
-
-                                                                               
                        activateRigidbody(con->mi1->rigidbody);
-                                                                               
                        activateRigidbody(con->mi2->rigidbody);
                                                                                
                }
                                                                                
        }
                                                                                
}
@@ -2806,10 +2807,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);
                                                                        }
-
-                                                                       
activateRigidbody(rbsc->mi1->rigidbody);
-                                                                       
activateRigidbody(rbsc->mi2->rigidbody);
                                                                }
                                                        }
                                                }
@@ -2824,10 +2824,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);
                                                                }
-
-                                                               
activateRigidbody(rbsc->mi1->rigidbody);
-                                                               
activateRigidbody(rbsc->mi2->rigidbody);
                                                        }
                                                }
 
@@ -2846,10 +2845,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);
                                                                        }
-
-                                                                       
activateRigidbody(rbsc->mi1->rigidbody);
-                                                                       
activateRigidbody(rbsc->mi2->rigidbody);
                                                                }
                                                        }
                                                }
@@ -2864,10 +2862,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);
                                                                }
-
-                                                               
activateRigidbody(rbsc->mi1->rigidbody);
-                                                               
activateRigidbody(rbsc->mi2->rigidbody);
                                                        }
                                                }
                                        }

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

Reply via email to