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,6 +1103,9 @@ 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();
|
||||||
@ -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++)
|
||||||
|
Loading…
Reference in New Issue
Block a user