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:
Diffstat (limited to 'extern/bullet/Extras/PhysicsInterface/CcdPhysics/CcdPhysicsController.cpp')
-rw-r--r--extern/bullet/Extras/PhysicsInterface/CcdPhysics/CcdPhysicsController.cpp24
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))