diff options
Diffstat (limited to 'source/gameengine/Physics/Bullet')
-rw-r--r-- | source/gameengine/Physics/Bullet/CcdPhysicsController.cpp | 17 | ||||
-rw-r--r-- | source/gameengine/Physics/Bullet/CcdPhysicsController.h | 4 |
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; |