Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Stokes <mogurijin@gmail.com>2012-07-09 08:57:21 +0400
committerMitchell Stokes <mogurijin@gmail.com>2012-07-09 08:57:21 +0400
commit9d73cbf2c4104282eef7b022a3381da64d3077f1 (patch)
tree95acbadc114ef4c6b2291c7caef25ca11339c554 /source/gameengine/Physics/Bullet
parent4ff0efd5a2a1790f7f4407d732bf01ec3d2f00b3 (diff)
As a response to issue [#28483] "Enable/Disable Rigid Body actuator do nothing" reported by Jean-Francois Gallant (pyroevil), I'm adding preliminary support to enable and disable rigid body physics on dynamic objects. This is can be done via the Edit Object Actuator or through KX_GameObject.enableRigidBody() and KX_GameObject.disableRigidBody(). Thanks to Sergej Reich for his help with the patch.
Diffstat (limited to 'source/gameengine/Physics/Bullet')
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.cpp17
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.h4
2 files changed, 12 insertions, 9 deletions
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
index c7ba17e7f97..e63724fffc6 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
@@ -1294,17 +1294,16 @@ void CcdPhysicsController::getReactionForce(float& forceX,float& forceY,float&
// dyna's that are rigidbody are free in orientation, dyna's with non-rigidbody are restricted
void CcdPhysicsController::setRigidBody(bool rigid)
{
- if (!rigid)
+ btRigidBody* body = GetRigidBody();
+ if (body)
{
- btRigidBody* body = GetRigidBody();
- if (body)
- {
- //fake it for now
- btVector3 inertia = body->getInvInertiaDiagLocal();
- inertia[1] = 0.f;
- body->setInvInertiaDiagLocal(inertia);
- body->updateInertiaTensor();
+ m_cci.m_bRigid = rigid;
+ if (!rigid) {
+ body->setAngularFactor(0.f);
+ body->setAngularVelocity(btVector3(0.f, 0.f, 0.f));
}
+ else
+ body->setAngularFactor(m_cci.m_angularFactor);
}
}
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.h b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
index 869211ffd31..94dc796df23 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.h
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
@@ -229,6 +229,8 @@ struct CcdConstructionInfo
:m_localInertiaTensor(1.f, 1.f, 1.f),
m_gravity(0,0,0),
m_scaling(1.f,1.f,1.f),
+ m_linearFactor(0.f, 0.f, 0.f),
+ m_angularFactor(0.f, 0.f, 0.f),
m_mass(0.f),
m_clamp_vel_min(-1.f),
m_clamp_vel_max(-1.f),
@@ -292,6 +294,8 @@ struct CcdConstructionInfo
btVector3 m_localInertiaTensor;
btVector3 m_gravity;
btVector3 m_scaling;
+ btVector3 m_linearFactor;
+ btVector3 m_angularFactor;
btScalar m_mass;
btScalar m_clamp_vel_min;
btScalar m_clamp_vel_max;