From da9ceac9ae086287c0c23e6fd2ffc59e6eba3d81 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 30 Mar 2015 11:06:02 -0700 Subject: [PATCH] fix crash for bad avatar body on login --- libraries/physics/src/CharacterController.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/libraries/physics/src/CharacterController.cpp b/libraries/physics/src/CharacterController.cpp index 09c6b5599f..518e49ed81 100644 --- a/libraries/physics/src/CharacterController.cpp +++ b/libraries/physics/src/CharacterController.cpp @@ -786,14 +786,17 @@ void CharacterController::setEnabled(bool enabled) { void CharacterController::setDynamicsWorld(btDynamicsWorld* world) { if (_dynamicsWorld != world) { - if (_dynamicsWorld) { - _dynamicsWorld->removeCollisionObject(getGhostObject()); - _dynamicsWorld->removeAction(this); + if (_dynamicsWorld) { + if (_ghostObject) { + _dynamicsWorld->removeCollisionObject(_ghostObject); + _dynamicsWorld->removeAction(this); + } + _dynamicsWorld = NULL; } - _dynamicsWorld = world; - if (_dynamicsWorld) { + if (world && _ghostObject) { + _dynamicsWorld = world; _pendingFlags &= ~ PENDING_FLAG_JUMP; - _dynamicsWorld->addCollisionObject(getGhostObject(), + _dynamicsWorld->addCollisionObject(_ghostObject, btBroadphaseProxy::CharacterFilter, btBroadphaseProxy::StaticFilter | btBroadphaseProxy::DefaultFilter); _dynamicsWorld->addAction(this); @@ -876,7 +879,7 @@ void CharacterController::preSimulation(btScalar timeStep) { } void CharacterController::postSimulation() { - if (_enabled) { + if (_enabled && _ghostObject) { const btTransform& avatarTransform = _ghostObject->getWorldTransform(); glm::quat rotation = bulletToGLM(avatarTransform.getRotation()); glm::vec3 position = bulletToGLM(avatarTransform.getOrigin());