This commit is contained in:
Stephen Birarda 2015-03-30 16:44:33 -07:00
commit 79ef05831d
4 changed files with 19 additions and 3 deletions

View file

@ -608,6 +608,7 @@ Application::~Application() {
Menu::getInstance()->deleteLater();
_physicsEngine.setCharacterController(NULL);
_myAvatar = NULL;
ModelEntityItem::cleanupLoadedAnimations();

View file

@ -282,7 +282,7 @@ bool RenderableModelEntityItem::hasCollisionModel() const {
}
const QString& RenderableModelEntityItem::getCollisionModelURL() const {
assert (!_model || _collisionModelURL == _model->getCollisionURL().toString());
// assert (!_model || _collisionModelURL == _model->getCollisionURL().toString());
return _collisionModelURL;
}

View file

@ -241,6 +241,12 @@ CharacterController::CharacterController(AvatarData* avatarData) {
}
CharacterController::~CharacterController() {
delete _ghostObject;
_ghostObject = NULL;
delete _convexShape;
_convexShape = NULL;
// make sure you remove this Character from its DynamicsWorld before reaching this spot
assert(_dynamicsWorld == NULL);
}
btPairCachingGhostObject* CharacterController::getGhostObject() {

View file

@ -28,12 +28,15 @@ PhysicsEngine::PhysicsEngine(const glm::vec3& offset)
}
PhysicsEngine::~PhysicsEngine() {
if (_characterController) {
_characterController->setDynamicsWorld(NULL);
}
// TODO: delete engine components... if we ever plan to create more than one instance
delete _collisionConfig;
delete _collisionDispatcher;
delete _broadphaseFilter;
delete _constraintSolver;
delete _dynamicsWorld;
// delete _dynamicsWorld;
// delete _ghostPairCallback;
}
@ -614,8 +617,14 @@ bool PhysicsEngine::updateObjectHard(btRigidBody* body, ObjectMotionState* motio
}
void PhysicsEngine::setCharacterController(CharacterController* character) {
if (!_characterController) {
if (_characterController != character) {
lock();
if (_characterController) {
// remove the character from the DynamicsWorld immediately
_characterController->setDynamicsWorld(NULL);
_characterController = NULL;
}
// the character will be added to the DynamicsWorld later
_characterController = character;
unlock();
}