diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index bf373c8027..44490845e4 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -68,8 +68,7 @@ void AvatarManager::updateAvatars(float deltaTime, const glm::vec3& mouseRayOrig avatar->data()->setMouseRay(mouseRayOrigin, mouseRayDirection); } else { // the mixer that owned this avatar is gone, give it to the vector of fades and kill it - _avatarFades.push_back(*avatar); - avatar = _avatarHash.erase(avatar); + avatar = removeAvatarAtHashIterator(avatar); } } @@ -115,7 +114,6 @@ void AvatarManager::simulateAvatarFades(float deltaTime) { const float MIN_FADE_SCALE = 0.001f; if (fadingAvatar->data()->getTargetScale() < MIN_FADE_SCALE) { - fadingAvatar = _avatarFades.erase(fadingAvatar); } else { fadingAvatar->data()->simulate(deltaTime, NULL); @@ -207,15 +205,23 @@ void AvatarManager::processKillAvatar(const QByteArray& datagram) { NUM_BYTES_RFC4122_UUID)); // remove the avatar with that UUID from our hash, if it exists - AvatarSharedPointer removedAvatar = _avatarHash.take(nodeUUID); - - if (removedAvatar) { - // add this avatar to our vector of fades - _avatarFades.push_back(removedAvatar); + AvatarHash::iterator matchedAvatar = _avatarHash.find(nodeUUID); + if (matchedAvatar != _avatarHash.end()) { + removeAvatarAtHashIterator(matchedAvatar); } } +AvatarHash::iterator AvatarManager::removeAvatarAtHashIterator(const AvatarHash::iterator& iterator) { + qDebug() << "Removing Avatar with UUID" << iterator.key() << "from AvatarManager hash."; + _avatarFades.push_back(iterator.value()); + return _avatarHash.erase(iterator); +} + void AvatarManager::clearHash() { // clear the AvatarManager hash - typically happens on the removal of the avatar-mixer - _avatarHash.clear(); + AvatarHash::iterator removeAvatar = _avatarHash.begin(); + + while (removeAvatar != _avatarHash.end()) { + removeAvatar = removeAvatarAtHashIterator(removeAvatar); + } } \ No newline at end of file diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index 264b98547a..6013ae6d99 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -48,6 +48,8 @@ private: void simulateAvatarFades(float deltaTime); void renderAvatarFades(); + AvatarHash::iterator removeAvatarAtHashIterator(const AvatarHash::iterator& iterator); + QWeakPointer _lookAtTargetAvatar; glm::vec3 _lookAtOtherPosition; float _lookAtIndicatorScale;