[Bf-blender-cvs] [f39585c] fracture_modifier: hrm forgot something in last commit

Martin Felke noreply at git.blender.org
Wed Dec 14 00:28:13 CET 2016


Commit: f39585c38752a8096ce59c7f852bb44a014e2dae
Author: Martin Felke
Date:   Tue Dec 13 23:49:04 2016 +0100
Branches: fracture_modifier
https://developer.blender.org/rBf39585c38752a8096ce59c7f852bb44a014e2dae

hrm forgot something in last commit

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

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

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

diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index be5ce7c..a4c02cb 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -1230,11 +1230,6 @@ void BKE_rigidbody_validate_sim_shard(RigidBodyWorld *rbw, MeshIsland *mi, Objec
 
 	fmd = (FractureModifierData*) modifiers_findByType(ob, eModifierType_Fracture);
 
-	//re-initialize constraint island indices
-	if (rebuild) {
-		mi->constraint_index = 0;
-	}
-
 	/* make sure collision shape exists */
 	/* FIXME we shouldn't always have to rebuild collision shapes when rebuilding objects, but it's needed for constraints to update correctly */
 	if (rbo->physics_shape == NULL || rebuild)
@@ -3605,57 +3600,49 @@ static void activateCluster(MeshIsland *mi, int particle_index, RigidBodyWorld *
 	}
 }
 
-static int participating_constraint_index(MeshIsland* mi)
+static void propagate_constraint_index(MeshIsland* mi)
 {
-	int index = 0, i = 0;
+	int i;
 
 	for (i = 0; i < mi->participating_constraint_count; i++)
 	{
 		RigidBodyShardCon *rbsc = mi->participating_constraints[i];
-		if (rbsc->mi1 != mi) {
-			if (rbsc->mi1->constraint_index > 0) {
-				index = rbsc->mi1->constraint_index;
-				break;
+		if (rbsc && rbsc->physics_constraint && RB_constraint_is_enabled(rbsc->physics_constraint)) {
+			if (rbsc->mi1 != mi) {
+				rbsc->mi1->constraint_index = mi->constraint_index;
 			}
-		}
-		else if (rbsc->mi2 != mi) {
-			if (rbsc->mi2->constraint_index > 0) {
-				index = rbsc->mi2->constraint_index;
-				break;
+			else if (rbsc->mi2 != mi) {
+				rbsc->mi2->constraint_index = mi->constraint_index;
 			}
 		}
 	}
-
-	return index;
 }
 
-static void split_constraint_index(FractureModifierData *fmd, RigidBodyShardCon *con)
+static void set_constraint_index(FractureModifierData *fmd, RigidBodyShardCon *con)
 {
-	int index = 0;
-
-	index = participating_constraint_index(con->mi1);
-
-	//if (con->mi1->constraint_index == 0)
+	if (con->physics_constraint)
 	{
-		if (index == 0) {
-			con->mi1->constraint_index = fmd->constraint_island_count;
-			fmd->constraint_island_count++;
-		}
-		else {
-			con->mi1->constraint_index = index;
-		}
-	}
-
-	//if (con->mi2->constraint_index == 0)
-	{
-		index = participating_constraint_index(con->mi2);
+		if (!RB_constraint_is_enabled(con->physics_constraint))
+		{
+			if (con->mi1->constraint_index == 0)
+			{
+				fmd->constraint_island_count++;
+				con->mi1->constraint_index = fmd->constraint_island_count;
+			}
 
-		if (index == 0) {
-			con->mi2->constraint_index = fmd->constraint_island_count;
-			fmd->constraint_island_count++;
+			if (con->mi2->constraint_index == 0)
+			{
+				fmd->constraint_island_count++;
+				con->mi2->constraint_index = fmd->constraint_island_count;
+			}
 		}
 		else {
-			con->mi2->constraint_index = index;
+			if ((con->mi1->constraint_index == 0) && (con->mi2->constraint_index == 0))
+			{
+				fmd->constraint_island_count++;
+				con->mi1->constraint_index = fmd->constraint_island_count;
+				con->mi2->constraint_index = fmd->constraint_island_count;
+			}
 		}
 	}
 }
@@ -3998,6 +3985,7 @@ static bool do_update_modifier(Scene* scene, Object* ob, RigidBodyWorld *rbw, bo
 		}
 
 		BKE_object_where_is_calc(scene, ob);
+		fmd->constraint_island_count = 0;
 
 		for (mi = fmd->meshIslands.first; mi; mi = mi->next) {
 			if (mi->rigidbody == NULL) {
@@ -4031,6 +4019,7 @@ static bool do_update_modifier(Scene* scene, Object* ob, RigidBodyWorld *rbw, bo
 				}
 
 				validateShard(rbw, is_empty ? NULL : mi, ob, do_rebuild, fmd->fracture_mode == MOD_FRACTURE_DYNAMIC, bbsize);
+				mi->constraint_index = 0;
 			}
 
 			/* update simulation object... */
@@ -4127,10 +4116,7 @@ static bool do_update_modifier(Scene* scene, Object* ob, RigidBodyWorld *rbw, bo
 				handle_plastic_breaking(rbsc, rbw, laststeps, lastscale);
 			}
 
-			//assign 2 different indexes here to broken constraint members
-			if (rbsc && rbsc->physics_constraint && !RB_constraint_is_enabled(rbsc->physics_constraint)) {
-				split_constraint_index(fmd, rbsc);
-			}
+			set_constraint_index(fmd, rbsc);
 
 			rbsc->flag &= ~RBC_FLAG_NEEDS_VALIDATE;
 			lastscale = rbw->time_scale;




More information about the Bf-blender-cvs mailing list