[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54310] trunk/blender/source/blender/ blenkernel/intern/rigidbody.c: rigidbody: Avoid always making passive objects kinematic

Sergej Reich sergej.reich at googlemail.com
Tue Feb 5 00:50:38 CET 2013


Revision: 54310
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54310
Author:   sergof
Date:     2013-02-04 23:50:38 +0000 (Mon, 04 Feb 2013)
Log Message:
-----------
rigidbody: Avoid always making passive objects kinematic

It's only needed when they're being transformed.
Also deactivate passive objects after transformation so they don't keep
acitvating deactivated objects.

Fixes issues with using "start deactivated".

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

Modified: trunk/blender/source/blender/blenkernel/intern/rigidbody.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/rigidbody.c	2013-02-04 23:50:36 UTC (rev 54309)
+++ trunk/blender/source/blender/blenkernel/intern/rigidbody.c	2013-02-04 23:50:38 UTC (rev 54310)
@@ -958,7 +958,7 @@
 		RB_shape_set_margin(rbo->physics_shape, RBO_GET_MARGIN(rbo) * MIN3(scale[0], scale[1], scale[2]));
 
 	/* make transformed objects temporarily kinmatic so that they can be moved by the user during simulation */
-	if ((ob->flag & SELECT && G.moving & G_TRANSFORM_OBJ) || rbo->type == RBO_TYPE_PASSIVE) {
+	if (ob->flag & SELECT && G.moving & G_TRANSFORM_OBJ) {
 		RB_body_set_kinematic_state(rbo->physics_object, TRUE);
 		RB_body_set_mass(rbo->physics_object, 0.0f);
 	}
@@ -1118,6 +1118,9 @@
 			if (ob->flag & SELECT && G.moving & G_TRANSFORM_OBJ) {
 				RB_body_set_kinematic_state(rbo->physics_object, rbo->flag & RBO_FLAG_KINEMATIC || rbo->flag & RBO_FLAG_DISABLED);
 				RB_body_set_mass(rbo->physics_object, RBO_GET_MASS(rbo));
+				/* deactivate passive objects so they don't interfere with deactivation of active objects */
+				if (rbo->type == RBO_TYPE_PASSIVE)
+					RB_body_deactivate(rbo->physics_object);
 			}
 		}
 	}
@@ -1178,8 +1181,12 @@
 		copy_qt_qt(rbo->orn, ob->quat);
 		copy_qt_qt(ob->quat, quat);
 	}
-	if (rbo->physics_object)
+	if (rbo->physics_object) {
+		/* allow passive objects to return to original transform */
+		if (rbo->type == RBO_TYPE_PASSIVE)
+			RB_body_set_kinematic_state(rbo->physics_object, TRUE);
 		RB_body_set_loc_rot(rbo->physics_object, rbo->pos, rbo->orn);
+	}
 	// RB_TODO update rigid body physics object's loc/rot for dynamic objects here as well (needs to be done outside bullet's update loop)
 }
 




More information about the Bf-blender-cvs mailing list