diff options
author | Porteries Tristan <republicthunderbolt9@gmail.com> | 2015-07-25 14:45:13 +0300 |
---|---|---|
committer | Porteries Tristan <republicthunderbolt9@gmail.com> | 2015-07-25 14:50:15 +0300 |
commit | 04b3694d937d4b0a7b5936d193f110a72567b591 (patch) | |
tree | bc95aacd9953cfc5dffca5c63d8553556c507f4e | |
parent | 221aee7ecdb352f87e6baae87061fbfc05e8f819 (diff) |
BGE: Fix T35454: Soft body joints crash.
Constraint on soft bodies are special and return 0 as constraint id.
So we have to check that the id is not 0 in function setParam, getParam, getAppliedImpulse and removeConstraint.
-rw-r--r-- | source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp index 71a603fc747..2c8b862a3a9 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp +++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp @@ -1103,7 +1103,10 @@ int CcdPhysicsEnvironment::CreateUniversalD6Constraint( void CcdPhysicsEnvironment::RemoveConstraint(int constraintId) { - + // For soft body constraints + if (constraintId == 0) + return; + int i; int numConstraints = m_dynamicsWorld->getNumConstraints(); for (i=0;i<numConstraints;i++) @@ -2047,6 +2050,9 @@ CcdPhysicsEnvironment::~CcdPhysicsEnvironment() float CcdPhysicsEnvironment::GetConstraintParam(int constraintId,int param) { btTypedConstraint* typedConstraint = GetConstraintById(constraintId); + if (!typedConstraint) + return 0.0f; + switch (typedConstraint->getUserConstraintType()) { case PHY_GENERIC_6DOF_CONSTRAINT: @@ -2086,6 +2092,9 @@ float CcdPhysicsEnvironment::GetConstraintParam(int constraintId,int param) void CcdPhysicsEnvironment::SetConstraintParam(int constraintId,int param,float value0,float value1) { btTypedConstraint* typedConstraint = GetConstraintById(constraintId); + if (!typedConstraint) + return; + switch (typedConstraint->getUserConstraintType()) { case PHY_GENERIC_6DOF_CONSTRAINT: @@ -2195,6 +2204,9 @@ void CcdPhysicsEnvironment::SetConstraintParam(int constraintId,int param,float btTypedConstraint* CcdPhysicsEnvironment::GetConstraintById(int constraintId) { + // For soft body constraints + if (constraintId == 0) + return NULL; int numConstraints = m_dynamicsWorld->getNumConstraints(); int i; @@ -2975,6 +2987,10 @@ PHY_IPhysicsController* CcdPhysicsEnvironment::CreateConeController(float conera float CcdPhysicsEnvironment::getAppliedImpulse(int constraintid) { + // For soft body constraints + if (constraintid == 0) + return NULL; + int i; int numConstraints = m_dynamicsWorld->getNumConstraints(); for (i=0;i<numConstraints;i++) |