[Bf-blender-cvs] [04b3694] master: BGE: Fix T35454: Soft body joints crash.
Porteries Tristan
noreply at git.blender.org
Sat Jul 25 14:00:18 CEST 2015
Commit: 04b3694d937d4b0a7b5936d193f110a72567b591
Author: Porteries Tristan
Date: Sat Jul 25 13:45:13 2015 +0200
Branches: master
https://developer.blender.org/rB04b3694d937d4b0a7b5936d193f110a72567b591
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.
===================================================================
M source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
===================================================================
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
index 71a603f..2c8b862 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++)
More information about the Bf-blender-cvs
mailing list