diff options
5 files changed, 21 insertions, 27 deletions
diff --git a/doc/python_api/rst/bge.types.rst b/doc/python_api/rst/bge.types.rst index bd6ee3614d3..31ae45b9bf0 100644 --- a/doc/python_api/rst/bge.types.rst +++ b/doc/python_api/rst/bge.types.rst @@ -1335,18 +1335,10 @@ Game Types (bge.types) Rigid body physics allows the object to roll on collisions. - .. note:: - - This is not working with bullet physics yet. - .. method:: disableRigidBody() Disables rigid body physics for this object. - .. note:: - - This is not working with bullet physics yet. The angular is removed but rigid body physics can still rotate it later. - .. method:: setParent(parent, compound=True, ghost=True) Sets this object's parent. diff --git a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp index abc2460a5ba..b974886f60a 100644 --- a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp +++ b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp @@ -232,6 +232,7 @@ MT_Vector3 KX_BulletPhysicsController::getReactionForce() } void KX_BulletPhysicsController::setRigidBody(bool rigid) { + CcdPhysicsController::setRigidBody(rigid); } /* This function dynamically adds the collision shape of another controller to diff --git a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp index 227ca39281f..f1038c04499 100644 --- a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp +++ b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp @@ -118,6 +118,12 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj, ci.m_MotionState = motionstate; ci.m_gravity = btVector3(0,0,0); + ci.m_linearFactor = btVector3(objprop->m_lockXaxis? 0 : 1, + objprop->m_lockYaxis? 0 : 1, + objprop->m_lockZaxis? 0 : 1); + ci.m_angularFactor = btVector3(objprop->m_lockXRotaxis? 0 : 1, + objprop->m_lockYRotaxis? 0 : 1, + objprop->m_lockZRotaxis? 0 : 1); ci.m_localInertiaTensor =btVector3(0,0,0); ci.m_mass = objprop->m_dyna ? shapeprops->m_mass : 0.f; ci.m_clamp_vel_min = shapeprops->m_clamp_vel_min; @@ -441,16 +447,8 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj, { if (objprop->m_angular_rigidbody) { - btVector3 linearFactor( - objprop->m_lockXaxis? 0 : 1, - objprop->m_lockYaxis? 0 : 1, - objprop->m_lockZaxis? 0 : 1); - btVector3 angularFactor( - objprop->m_lockXRotaxis? 0 : 1, - objprop->m_lockYRotaxis? 0 : 1, - objprop->m_lockZRotaxis? 0 : 1); - rbody->setLinearFactor(linearFactor); - rbody->setAngularFactor(angularFactor); + rbody->setLinearFactor(ci.m_linearFactor); + rbody->setAngularFactor(ci.m_angularFactor); } if (rbody && objprop->m_disableSleeping) 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; |