[Bf-blender-cvs] [6c4c1fb] fracture_modifier: 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

Martin Felke noreply at git.blender.org
Thu Jan 1 12:55:52 CET 2015


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);
 							}
 						}
 					}




More information about the Bf-blender-cvs mailing list