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
Notes: blender-bot 2023-02-14 12:16:41 +01:00
Referenced by issue #35454, Setting parameters on joints with softbodies causes blender to crash
1 changed files with 17 additions and 1 deletions

View File

@ -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++)