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.
This commit is contained in:
Porteries Tristan 2015-07-25 13:45:13 +02:00
parent 221aee7ecd
commit 04b3694d93

@ -1103,7 +1103,10 @@ int CcdPhysicsEnvironment::CreateUniversalD6Constraint(
void CcdPhysicsEnvironment::RemoveConstraint(int constraintId) void CcdPhysicsEnvironment::RemoveConstraint(int constraintId)
{ {
// For soft body constraints
if (constraintId == 0)
return;
int i; int i;
int numConstraints = m_dynamicsWorld->getNumConstraints(); int numConstraints = m_dynamicsWorld->getNumConstraints();
for (i=0;i<numConstraints;i++) for (i=0;i<numConstraints;i++)
@ -2047,6 +2050,9 @@ CcdPhysicsEnvironment::~CcdPhysicsEnvironment()
float CcdPhysicsEnvironment::GetConstraintParam(int constraintId,int param) float CcdPhysicsEnvironment::GetConstraintParam(int constraintId,int param)
{ {
btTypedConstraint* typedConstraint = GetConstraintById(constraintId); btTypedConstraint* typedConstraint = GetConstraintById(constraintId);
if (!typedConstraint)
return 0.0f;
switch (typedConstraint->getUserConstraintType()) switch (typedConstraint->getUserConstraintType())
{ {
case PHY_GENERIC_6DOF_CONSTRAINT: 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) void CcdPhysicsEnvironment::SetConstraintParam(int constraintId,int param,float value0,float value1)
{ {
btTypedConstraint* typedConstraint = GetConstraintById(constraintId); btTypedConstraint* typedConstraint = GetConstraintById(constraintId);
if (!typedConstraint)
return;
switch (typedConstraint->getUserConstraintType()) switch (typedConstraint->getUserConstraintType())
{ {
case PHY_GENERIC_6DOF_CONSTRAINT: case PHY_GENERIC_6DOF_CONSTRAINT:
@ -2195,6 +2204,9 @@ void CcdPhysicsEnvironment::SetConstraintParam(int constraintId,int param,float
btTypedConstraint* CcdPhysicsEnvironment::GetConstraintById(int constraintId) btTypedConstraint* CcdPhysicsEnvironment::GetConstraintById(int constraintId)
{ {
// For soft body constraints
if (constraintId == 0)
return NULL;
int numConstraints = m_dynamicsWorld->getNumConstraints(); int numConstraints = m_dynamicsWorld->getNumConstraints();
int i; int i;
@ -2975,6 +2987,10 @@ PHY_IPhysicsController* CcdPhysicsEnvironment::CreateConeController(float conera
float CcdPhysicsEnvironment::getAppliedImpulse(int constraintid) float CcdPhysicsEnvironment::getAppliedImpulse(int constraintid)
{ {
// For soft body constraints
if (constraintid == 0)
return NULL;
int i; int i;
int numConstraints = m_dynamicsWorld->getNumConstraints(); int numConstraints = m_dynamicsWorld->getNumConstraints();
for (i=0;i<numConstraints;i++) for (i=0;i<numConstraints;i++)