check for valid pointer of CcdPhysicsEnvironment before removal

also added additional assignment to motionstate, when 'setposition'/'setorientation' is called.
This commit is contained in:
ejcoumans
2006-09-07 23:01:53 +00:00
parent b8961f0308
commit 543ad0ed4c

View File

@@ -104,7 +104,9 @@ void CcdPhysicsController::CreateRigidbody()
CcdPhysicsController::~CcdPhysicsController() CcdPhysicsController::~CcdPhysicsController()
{ {
//will be reference counted, due to sharing //will be reference counted, due to sharing
if (m_cci.m_physicsEnv)
m_cci.m_physicsEnv->removeCcdPhysicsController(this); m_cci.m_physicsEnv->removeCcdPhysicsController(this);
delete m_MotionState; delete m_MotionState;
delete m_body; delete m_body;
} }
@@ -274,7 +276,7 @@ void CcdPhysicsController::getOrientation(float &quatImag0,float &quatImag1,flo
void CcdPhysicsController::setOrientation(float quatImag0,float quatImag1,float quatImag2,float quatReal) void CcdPhysicsController::setOrientation(float quatImag0,float quatImag1,float quatImag2,float quatReal)
{ {
m_body->activate(); m_body->activate();
m_MotionState->setWorldOrientation(quatImag0,quatImag1,quatImag2,quatReal);
SimdTransform xform = m_body->getCenterOfMassTransform(); SimdTransform xform = m_body->getCenterOfMassTransform();
xform.setRotation(SimdQuaternion(quatImag0,quatImag1,quatImag2,quatReal)); xform.setRotation(SimdQuaternion(quatImag0,quatImag1,quatImag2,quatReal));
m_body->setCenterOfMassTransform(xform); m_body->setCenterOfMassTransform(xform);
@@ -284,7 +286,7 @@ void CcdPhysicsController::setOrientation(float quatImag0,float quatImag1,float
void CcdPhysicsController::setPosition(float posX,float posY,float posZ) void CcdPhysicsController::setPosition(float posX,float posY,float posZ)
{ {
m_body->activate(); m_body->activate();
m_MotionState->setWorldPosition(posX,posY,posZ);
SimdTransform xform = m_body->getCenterOfMassTransform(); SimdTransform xform = m_body->getCenterOfMassTransform();
xform.setOrigin(SimdVector3(posX,posY,posZ)); xform.setOrigin(SimdVector3(posX,posY,posZ));
m_body->setCenterOfMassTransform(xform); m_body->setCenterOfMassTransform(xform);