diff options
author | Daniel Genrich <daniel.genrich@gmx.net> | 2008-09-26 12:58:15 +0400 |
---|---|---|
committer | Daniel Genrich <daniel.genrich@gmx.net> | 2008-09-26 12:58:15 +0400 |
commit | c301a059bd59672daf022755181f114ce70a21e9 (patch) | |
tree | 3819a1a1a6f647a1def1279bcd293df8b34d2534 /source/gameengine/Ketsji/KX_BulletPhysicsController.cpp | |
parent | 5adff90b0868f88050e601092b35628fa3ae132b (diff) | |
parent | 06a5e9b58a0c1281609ee1ddb850fc058fe56c4f (diff) |
svn merge -r 16667:16741 https://svn.blender.org/svnroot/bf-blender/trunk/blender
Diffstat (limited to 'source/gameengine/Ketsji/KX_BulletPhysicsController.cpp')
-rw-r--r-- | source/gameengine/Ketsji/KX_BulletPhysicsController.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp index 539eaec4a7b..d7bd1e9c7cd 100644 --- a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp +++ b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp @@ -14,6 +14,7 @@ #include "PHY_IPhysicsEnvironment.h" #include "CcdPhysicsEnvironment.h" +#include "BulletSoftBody/btSoftBody.h" KX_BulletPhysicsController::KX_BulletPhysicsController (const CcdConstructionInfo& ci, bool dyna) @@ -148,8 +149,12 @@ void KX_BulletPhysicsController::setScaling(const MT_Vector3& scaling) } MT_Scalar KX_BulletPhysicsController::GetMass() { - - MT_Scalar invmass = GetRigidBody()->getInvMass(); + if (GetSoftBody()) + return GetSoftBody()->getTotalMass(); + + MT_Scalar invmass = 0.f; + if (GetRigidBody()) + invmass = GetRigidBody()->getInvMass(); if (invmass) return 1.f/invmass; return 0.f; @@ -167,7 +172,7 @@ void KX_BulletPhysicsController::setRigidBody(bool rigid) void KX_BulletPhysicsController::SuspendDynamics(bool ghost) { btRigidBody *body = GetRigidBody(); - if (body->getActivationState() != DISABLE_SIMULATION) + if (body && body->getActivationState() != DISABLE_SIMULATION) { btBroadphaseProxy* handle = body->getBroadphaseHandle(); m_savedCollisionFlags = body->getCollisionFlags(); @@ -186,7 +191,7 @@ void KX_BulletPhysicsController::SuspendDynamics(bool ghost) void KX_BulletPhysicsController::RestoreDynamics() { btRigidBody *body = GetRigidBody(); - if (body->getActivationState() == DISABLE_SIMULATION) + if (body && body->getActivationState() == DISABLE_SIMULATION) { GetPhysicsEnvironment()->updateCcdPhysicsController(this, m_savedMass, @@ -241,18 +246,22 @@ SG_Controller* KX_BulletPhysicsController::GetReplica(class SG_Node* destnode) void KX_BulletPhysicsController::SetSumoTransform(bool nondynaonly) { - GetRigidBody()->activate(true); + if (GetRigidBody()) + GetRigidBody()->activate(true); if (!m_bDyna) { - GetRigidBody()->setCollisionFlags(GetRigidBody()->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT); + GetCollisionObject()->setCollisionFlags(GetRigidBody()->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT); } else { if (!nondynaonly) { btTransform worldTrans; - GetRigidBody()->getMotionState()->getWorldTransform(worldTrans); - GetRigidBody()->setCenterOfMassTransform(worldTrans); + if (GetRigidBody()) + { + GetRigidBody()->getMotionState()->getWorldTransform(worldTrans); + GetRigidBody()->setCenterOfMassTransform(worldTrans); + } /* scaling? |