Exemplo n.º 1
0
void AvatarManager::clearOtherAvatars() {
    _myAvatar->clearLookAtTargetAvatar();

    // setup a vector of removed avatars outside the scope of the hash lock
    std::vector<AvatarSharedPointer> removedAvatars;

    {
        QWriteLocker locker(&_hashLock);

        removedAvatars.reserve(_avatarHash.size());

        auto avatarIterator =  _avatarHash.begin();
        while (avatarIterator != _avatarHash.end()) {
            auto avatar = std::static_pointer_cast<Avatar>(avatarIterator.value());
            if (avatar != _myAvatar) {
                removedAvatars.push_back(avatar);
                avatarIterator = _avatarHash.erase(avatarIterator);
            } else {
                ++avatarIterator;
            }
        }
    }

    for (auto& av : removedAvatars) {
        handleRemovedAvatar(av);
    }
}
Exemplo n.º 2
0
// virtual
void AvatarManager::removeAvatar(const QUuid& sessionUUID) {
    QWriteLocker locker(&_hashLock);

    auto removedAvatar = _avatarHash.take(sessionUUID);
    if (removedAvatar) {
        handleRemovedAvatar(removedAvatar);
    }
}
Exemplo n.º 3
0
void AvatarManager::clearOtherAvatars() {
    // clear any avatars that came from an avatar-mixer
    QWriteLocker locker(&_hashLock);

    AvatarHash::iterator avatarIterator =  _avatarHash.begin();
    while (avatarIterator != _avatarHash.end()) {
        auto avatar = std::static_pointer_cast<Avatar>(avatarIterator.value());
        if (avatar == _myAvatar || !avatar->isInitialized()) {
            // don't remove myAvatar or uninitialized avatars from the list
            ++avatarIterator;
        } else {
            auto removedAvatar = avatarIterator.value();
            avatarIterator = _avatarHash.erase(avatarIterator);

            handleRemovedAvatar(removedAvatar);
        }
    }
    _myAvatar->clearLookAtTargetAvatar();
}