mirror of
https://github.com/overte-org/overte.git
synced 2025-07-16 20:37:29 +02:00
fixes for some incorrect assumptions
This commit is contained in:
parent
22f5d4df6d
commit
19d3d80ff9
3 changed files with 11 additions and 3 deletions
|
@ -110,16 +110,22 @@ void AvatarManager::updateMyAvatar(float deltaTime) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarManager::updateOtherAvatars(float deltaTime) {
|
void AvatarManager::updateOtherAvatars(float deltaTime) {
|
||||||
|
// lock the hash for read to check the size
|
||||||
|
QReadLocker lock(&_hashLock);
|
||||||
|
|
||||||
if (_avatarHash.size() < 2 && _avatarFades.isEmpty()) {
|
if (_avatarHash.size() < 2 && _avatarFades.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lock.unlock();
|
||||||
|
|
||||||
bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings);
|
bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings);
|
||||||
PerformanceWarning warn(showWarnings, "Application::updateAvatars()");
|
PerformanceWarning warn(showWarnings, "Application::updateAvatars()");
|
||||||
|
|
||||||
PerformanceTimer perfTimer("otherAvatars");
|
PerformanceTimer perfTimer("otherAvatars");
|
||||||
|
|
||||||
// simulate avatars
|
// simulate avatars
|
||||||
auto hashCopy = _avatarHash;
|
auto hashCopy = getHashCopy();
|
||||||
|
|
||||||
AvatarHash::iterator avatarIterator = hashCopy.begin();
|
AvatarHash::iterator avatarIterator = hashCopy.begin();
|
||||||
while (avatarIterator != hashCopy.end()) {
|
while (avatarIterator != hashCopy.end()) {
|
||||||
|
@ -256,8 +262,10 @@ QVector<AvatarManager::LocalLight> AvatarManager::getLocalLights() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<QUuid> AvatarManager::getAvatarIdentifiers() {
|
QVector<QUuid> AvatarManager::getAvatarIdentifiers() {
|
||||||
|
QReadLocker lock(&_hashLock);
|
||||||
return _avatarHash.keys().toVector();
|
return _avatarHash.keys().toVector();
|
||||||
}
|
}
|
||||||
|
|
||||||
AvatarData* AvatarManager::getAvatar(QUuid avatarID) {
|
AvatarData* AvatarManager::getAvatar(QUuid avatarID) {
|
||||||
QReadLocker locker(&_hashLock);
|
QReadLocker locker(&_hashLock);
|
||||||
return _avatarHash[avatarID].get(); // Non-obvious: A bogus avatarID answers your own avatar.
|
return _avatarHash[avatarID].get(); // Non-obvious: A bogus avatarID answers your own avatar.
|
||||||
|
|
|
@ -23,7 +23,7 @@ AvatarHashMap::AvatarHashMap() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AvatarHashMap::isAvatarInRange(const glm::vec3& position, const float range) {
|
bool AvatarHashMap::isAvatarInRange(const glm::vec3& position, const float range) {
|
||||||
auto hashCopy = _avatarHash;
|
auto hashCopy = getHashCopy();
|
||||||
foreach(const AvatarSharedPointer& sharedAvatar, hashCopy) {
|
foreach(const AvatarSharedPointer& sharedAvatar, hashCopy) {
|
||||||
glm::vec3 avatarPosition = sharedAvatar->getPosition();
|
glm::vec3 avatarPosition = sharedAvatar->getPosition();
|
||||||
float distance = glm::distance(avatarPosition, position);
|
float distance = glm::distance(avatarPosition, position);
|
||||||
|
|
|
@ -31,7 +31,7 @@ class AvatarHashMap : public QObject, public Dependency {
|
||||||
SINGLETON_DEPENDENCY
|
SINGLETON_DEPENDENCY
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AvatarHash getHashCopy() { return _avatarHash; }
|
AvatarHash getHashCopy() { QReadLocker lock(&_hashLock); return _avatarHash; }
|
||||||
int size() { return _avatarHash.size(); }
|
int size() { return _avatarHash.size(); }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
Loading…
Reference in a new issue