forked from bartvdbraak/blender
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:
parent
221aee7ecd
commit
04b3694d93
@ -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++)
|
||||
|
Loading…
Reference in New Issue
Block a user