Merge pull request #7702 from zzmp/fix/clear-octree-on-exit

Clear entities and avatars on exit
This commit is contained in:
Seth Alves 2016-04-18 15:48:35 -07:00
commit 3298883774
3 changed files with 16 additions and 2 deletions

View file

@ -1235,6 +1235,9 @@ void Application::cleanupBeforeQuit() {
} }
Application::~Application() { Application::~Application() {
_entityClipboard->eraseAllOctreeElements();
_entityClipboard.reset();
EntityTreePointer tree = getEntities()->getTree(); EntityTreePointer tree = getEntities()->getTree();
tree->setSimulation(nullptr); tree->setSimulation(nullptr);
@ -1244,7 +1247,7 @@ Application::~Application() {
_physicsEngine->setCharacterController(nullptr); _physicsEngine->setCharacterController(nullptr);
// remove avatars from physics engine // remove avatars from physics engine
DependencyManager::get<AvatarManager>()->clearOtherAvatars(); DependencyManager::get<AvatarManager>()->clearAllAvatars();
VectorOfMotionStates motionStates; VectorOfMotionStates motionStates;
DependencyManager::get<AvatarManager>()->getObjectsToRemoveFromPhysics(motionStates); DependencyManager::get<AvatarManager>()->getObjectsToRemoveFromPhysics(motionStates);
_physicsEngine->removeObjects(motionStates); _physicsEngine->removeObjects(motionStates);

View file

@ -77,7 +77,6 @@ AvatarManager::AvatarManager(QObject* parent) :
} }
AvatarManager::~AvatarManager() { AvatarManager::~AvatarManager() {
_myAvatar->die();
} }
void AvatarManager::init() { void AvatarManager::init() {
@ -250,6 +249,17 @@ void AvatarManager::clearOtherAvatars() {
_myAvatar->clearLookAtTargetAvatar(); _myAvatar->clearLookAtTargetAvatar();
} }
void AvatarManager::clearAllAvatars() {
clearOtherAvatars();
QWriteLocker locker(&_hashLock);
_myAvatar->die();
_myAvatar.reset();
_avatarHash.clear();
}
void AvatarManager::setLocalLights(const QVector<AvatarManager::LocalLight>& localLights) { void AvatarManager::setLocalLights(const QVector<AvatarManager::LocalLight>& localLights) {
if (QThread::currentThread() != thread()) { if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "setLocalLights", Q_ARG(const QVector<AvatarManager::LocalLight>&, localLights)); QMetaObject::invokeMethod(this, "setLocalLights", Q_ARG(const QVector<AvatarManager::LocalLight>&, localLights));

View file

@ -45,6 +45,7 @@ public:
void updateOtherAvatars(float deltaTime); void updateOtherAvatars(float deltaTime);
void clearOtherAvatars(); void clearOtherAvatars();
void clearAllAvatars();
bool shouldShowReceiveStats() const { return _shouldShowReceiveStats; } bool shouldShowReceiveStats() const { return _shouldShowReceiveStats; }