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(); Menu::getInstance()->deleteLater();
_physicsEngine.setCharacterController(NULL);
_myAvatar = NULL; _myAvatar = NULL;
ModelEntityItem::cleanupLoadedAnimations(); ModelEntityItem::cleanupLoadedAnimations();

View file

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

View file

@ -241,6 +241,12 @@ CharacterController::CharacterController(AvatarData* avatarData) {
} }
CharacterController::~CharacterController() { 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() { btPairCachingGhostObject* CharacterController::getGhostObject() {

View file

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