[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54406] trunk/blender/source/blender/ blenkernel/intern/depsgraph.c: rigidbody: Fix force field changes not invalidating cache

Sergej Reich sergej.reich at googlemail.com
Sat Feb 9 11:04:27 CET 2013


Revision: 54406
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54406
Author:   sergof
Date:     2013-02-09 10:04:27 +0000 (Sat, 09 Feb 2013)
Log Message:
-----------
rigidbody: Fix force field changes not invalidating cache

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/depsgraph.c

Modified: trunk/blender/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2013-02-09 10:04:25 UTC (rev 54405)
+++ trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2013-02-09 10:04:27 UTC (rev 54406)
@@ -424,7 +424,7 @@
 		dag_add_shader_nodetree_driver_relations(dag, node, la->nodetree);
 }
 
-static void dag_add_collision_field_relation(DagForest *dag, Scene *scene, Object *ob, DagNode *node, int skip_forcefield)
+static void dag_add_collision_field_relation(DagForest *dag, Scene *scene, Object *ob, DagNode *node, int skip_forcefield, bool no_collision)
 {
 	Base *base;
 	DagNode *node2;
@@ -435,7 +435,7 @@
 		if ((base->lay & ob->lay) && base->object->pd) {
 			Object *ob1 = base->object;
 			if ((ob1->pd->deflect || ob1->pd->forcefield) && (ob1 != ob)) {
-				if (skip_forcefield && ob1->pd->forcefield == skip_forcefield)
+				if ((skip_forcefield && ob1->pd->forcefield == skip_forcefield) || (no_collision && ob1->pd->forcefield == 0))
 					continue;
 				node2 = dag_get_node(dag, ob1);
 				dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Field Collision");
@@ -599,11 +599,14 @@
 		    modifiers_isModifierEnabled(ob, eModifierType_Cloth) ||
 		    modifiers_isModifierEnabled(ob, eModifierType_DynamicPaint))
 		{
-			dag_add_collision_field_relation(dag, scene, ob, node, 0);  /* TODO: use effectorweight->group */
+			dag_add_collision_field_relation(dag, scene, ob, node, 0, false);  /* TODO: use effectorweight->group */
 		}
 		else if (modifiers_isModifierEnabled(ob, eModifierType_Smoke)) {
-			dag_add_collision_field_relation(dag, scene, ob, node, PFIELD_SMOKEFLOW);
+			dag_add_collision_field_relation(dag, scene, ob, node, PFIELD_SMOKEFLOW, false);
 		}
+		else if (ob->rigidbody_object) {
+			dag_add_collision_field_relation(dag, scene, ob, node, 0, true);
+		}
 	}
 	
 	/* object data drivers */




More information about the Bf-blender-cvs mailing list