diff options
Diffstat (limited to 'extern/bullet/Extras/PhysicsInterface/CcdPhysics/CcdPhysicsController.cpp')
-rw-r--r-- | extern/bullet/Extras/PhysicsInterface/CcdPhysics/CcdPhysicsController.cpp | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/extern/bullet/Extras/PhysicsInterface/CcdPhysics/CcdPhysicsController.cpp b/extern/bullet/Extras/PhysicsInterface/CcdPhysics/CcdPhysicsController.cpp index c16a31ee18d..03c9cab53bf 100644 --- a/extern/bullet/Extras/PhysicsInterface/CcdPhysics/CcdPhysicsController.cpp +++ b/extern/bullet/Extras/PhysicsInterface/CcdPhysics/CcdPhysicsController.cpp @@ -7,8 +7,12 @@ class BP_Proxy; +///todo: fill all the empty CcdPhysicsController methods, hook them up to the RigidBody class + //'temporarily' global variables float gDeactivationTime = 2.f; +bool gDisableDeactivation = false; + float gLinearSleepingTreshold = 0.8f; float gAngularSleepingTreshold = 1.0f; @@ -121,12 +125,26 @@ void CcdPhysicsController::RelativeRotate(const float drot[9],bool local) } void CcdPhysicsController::getOrientation(float &quatImag0,float &quatImag1,float &quatImag2,float &quatReal) { + } void CcdPhysicsController::setOrientation(float quatImag0,float quatImag1,float quatImag2,float quatReal) { + m_body->activate(); + + SimdTransform xform = m_body->getCenterOfMassTransform(); + xform.setRotation(SimdQuaternion(quatImag0,quatImag1,quatImag2,quatReal)); + m_body->setCenterOfMassTransform(xform); + } + void CcdPhysicsController::setPosition(float posX,float posY,float posZ) { + m_body->activate(); + + SimdTransform xform = m_body->getCenterOfMassTransform(); + xform.setOrigin(SimdVector3(posX,posY,posZ)); + m_body->setCenterOfMassTransform(xform); + } void CcdPhysicsController::resolveCombinedVelocities(float linvelX,float linvelY,float linvelZ,float angVelX,float angVelY,float angVelZ) { @@ -167,9 +185,7 @@ void CcdPhysicsController::applyImpulse(float attachX,float attachY,float attac SimdVector3 impulse(impulseX,impulseY,impulseZ); SimdVector3 pos(attachX,attachY,attachZ); - //it might be sleeping... wake up ! - m_body->SetActivationState(1); - m_body->m_deactivationTime = 0.f; + m_body->activate(); m_body->applyImpulse(impulse,pos); @@ -226,7 +242,7 @@ bool CcdPhysicsController::wantsSleeping() { //disable deactivation - if (gDeactivationTime == 0.f) + if (gDisableDeactivation || (gDeactivationTime == 0.f)) return false; //2 == ISLAND_SLEEPING, 3 == WANTS_DEACTIVATION if ( (m_body->GetActivationState() == 2) || (m_body->GetActivationState() == 3)) |