[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