mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 18:50:00 +02:00
unravel one loop of spaghetti
This commit is contained in:
parent
b9c7d6351f
commit
2775b17a65
2 changed files with 24 additions and 39 deletions
|
@ -68,7 +68,7 @@ void AvatarManager::registerMetaTypes(QScriptEngine* engine) {
|
||||||
}
|
}
|
||||||
|
|
||||||
AvatarManager::AvatarManager(QObject* parent) :
|
AvatarManager::AvatarManager(QObject* parent) :
|
||||||
_avatarFades(),
|
_avatarsToFade(),
|
||||||
_myAvatar(std::make_shared<MyAvatar>(std::make_shared<Rig>()))
|
_myAvatar(std::make_shared<MyAvatar>(std::make_shared<Rig>()))
|
||||||
{
|
{
|
||||||
// register a meta type for the weak pointer we'll use for the owning avatar mixer for each avatar
|
// register a meta type for the weak pointer we'll use for the owning avatar mixer for each avatar
|
||||||
|
@ -151,7 +151,7 @@ float AvatarManager::getAvatarSimulationRate(const QUuid& sessionID, const QStri
|
||||||
void AvatarManager::updateOtherAvatars(float deltaTime) {
|
void AvatarManager::updateOtherAvatars(float deltaTime) {
|
||||||
// lock the hash for read to check the size
|
// lock the hash for read to check the size
|
||||||
QReadLocker lock(&_hashLock);
|
QReadLocker lock(&_hashLock);
|
||||||
if (_avatarHash.size() < 2 && _avatarFades.isEmpty()) {
|
if (_avatarHash.size() < 2 && _avatarsToFade.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
|
@ -277,22 +277,22 @@ void AvatarManager::postUpdate(float deltaTime) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarManager::simulateAvatarFades(float deltaTime) {
|
void AvatarManager::simulateAvatarFades(float deltaTime) {
|
||||||
QVector<AvatarSharedPointer>::iterator fadingIterator = _avatarFades.begin();
|
QVector<AvatarSharedPointer>::iterator fadingIterator = _avatarsToFade.begin();
|
||||||
|
|
||||||
const float SHRINK_RATE = 0.15f;
|
const float SHRINK_RATE = 0.15f;
|
||||||
const float MIN_FADE_SCALE = MIN_AVATAR_SCALE;
|
const float MIN_FADE_SCALE = MIN_AVATAR_SCALE;
|
||||||
|
|
||||||
render::ScenePointer scene = qApp->getMain3DScene();
|
render::ScenePointer scene = qApp->getMain3DScene();
|
||||||
render::Transaction transaction;
|
render::Transaction transaction;
|
||||||
while (fadingIterator != _avatarFades.end()) {
|
while (fadingIterator != _avatarsToFade.end()) {
|
||||||
auto avatar = std::static_pointer_cast<Avatar>(*fadingIterator);
|
auto avatar = std::static_pointer_cast<Avatar>(*fadingIterator);
|
||||||
avatar->setTargetScale(avatar->getUniformScale() * SHRINK_RATE);
|
avatar->setTargetScale(avatar->getUniformScale() * SHRINK_RATE);
|
||||||
avatar->animateScaleChanges(deltaTime);
|
avatar->animateScaleChanges(deltaTime);
|
||||||
if (avatar->getTargetScale() <= MIN_FADE_SCALE) {
|
if (avatar->getTargetScale() <= MIN_FADE_SCALE) {
|
||||||
avatar->removeFromScene(*fadingIterator, scene, transaction);
|
avatar->removeFromScene(*fadingIterator, scene, transaction);
|
||||||
// only remove from _avatarFades if we're sure its motionState has been removed from PhysicsEngine
|
// only remove from _avatarsToFade if we're sure its motionState has been removed from PhysicsEngine
|
||||||
if (_motionStatesToRemoveFromPhysics.empty()) {
|
if (_motionStatesToRemoveFromPhysics.empty()) {
|
||||||
fadingIterator = _avatarFades.erase(fadingIterator);
|
fadingIterator = _avatarsToFade.erase(fadingIterator);
|
||||||
} else {
|
} else {
|
||||||
++fadingIterator;
|
++fadingIterator;
|
||||||
}
|
}
|
||||||
|
@ -306,26 +306,9 @@ void AvatarManager::simulateAvatarFades(float deltaTime) {
|
||||||
}
|
}
|
||||||
|
|
||||||
AvatarSharedPointer AvatarManager::newSharedAvatar() {
|
AvatarSharedPointer AvatarManager::newSharedAvatar() {
|
||||||
return std::make_shared<Avatar>(std::make_shared<Rig>());
|
std::shared_ptr<Avatar> avatar = std::make_shared<Avatar>(std::make_shared<Rig>());
|
||||||
}
|
avatar->addToScene(avatar);
|
||||||
|
return avatar;
|
||||||
AvatarSharedPointer AvatarManager::addAvatar(const QUuid& sessionUUID, const QWeakPointer<Node>& mixerWeakPointer) {
|
|
||||||
auto newAvatar = AvatarHashMap::addAvatar(sessionUUID, mixerWeakPointer);
|
|
||||||
auto rawRenderableAvatar = std::static_pointer_cast<Avatar>(newAvatar);
|
|
||||||
|
|
||||||
rawRenderableAvatar->addToScene(rawRenderableAvatar);
|
|
||||||
|
|
||||||
return newAvatar;
|
|
||||||
}
|
|
||||||
|
|
||||||
// virtual
|
|
||||||
void AvatarManager::removeAvatar(const QUuid& sessionUUID, KillAvatarReason removalReason) {
|
|
||||||
QWriteLocker locker(&_hashLock);
|
|
||||||
|
|
||||||
auto removedAvatar = _avatarHash.take(sessionUUID);
|
|
||||||
if (removedAvatar) {
|
|
||||||
handleRemovedAvatar(removedAvatar, removalReason);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar, KillAvatarReason removalReason) {
|
void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar, KillAvatarReason removalReason) {
|
||||||
|
@ -353,7 +336,7 @@ void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar
|
||||||
DependencyManager::get<NodeList>()->removeFromIgnoreMuteSets(avatar->getSessionUUID());
|
DependencyManager::get<NodeList>()->removeFromIgnoreMuteSets(avatar->getSessionUUID());
|
||||||
DependencyManager::get<UsersScriptingInterface>()->avatarDisconnected(avatar->getSessionUUID());
|
DependencyManager::get<UsersScriptingInterface>()->avatarDisconnected(avatar->getSessionUUID());
|
||||||
}
|
}
|
||||||
_avatarFades.push_back(removedAvatar);
|
_avatarsToFade.push_back(removedAvatar);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarManager::clearOtherAvatars() {
|
void AvatarManager::clearOtherAvatars() {
|
||||||
|
|
|
@ -91,21 +91,27 @@ public slots:
|
||||||
void setShouldShowReceiveStats(bool shouldShowReceiveStats) { _shouldShowReceiveStats = shouldShowReceiveStats; }
|
void setShouldShowReceiveStats(bool shouldShowReceiveStats) { _shouldShowReceiveStats = shouldShowReceiveStats; }
|
||||||
void updateAvatarRenderStatus(bool shouldRenderAvatars);
|
void updateAvatarRenderStatus(bool shouldRenderAvatars);
|
||||||
|
|
||||||
private slots:
|
|
||||||
virtual void removeAvatar(const QUuid& sessionUUID, KillAvatarReason removalReason = KillAvatarReason::NoReason) override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit AvatarManager(QObject* parent = 0);
|
explicit AvatarManager(QObject* parent = 0);
|
||||||
explicit AvatarManager(const AvatarManager& other);
|
explicit AvatarManager(const AvatarManager& other);
|
||||||
|
|
||||||
void simulateAvatarFades(float deltaTime);
|
void simulateAvatarFades(float deltaTime);
|
||||||
|
|
||||||
// virtual overrides
|
AvatarSharedPointer newSharedAvatar() override;
|
||||||
virtual AvatarSharedPointer newSharedAvatar() override;
|
void handleRemovedAvatar(const AvatarSharedPointer& removedAvatar, KillAvatarReason removalReason = KillAvatarReason::NoReason) override;
|
||||||
virtual AvatarSharedPointer addAvatar(const QUuid& sessionUUID, const QWeakPointer<Node>& mixerWeakPointer) override;
|
|
||||||
virtual void handleRemovedAvatar(const AvatarSharedPointer& removedAvatar, KillAvatarReason removalReason = KillAvatarReason::NoReason) override;
|
/* TODO: maintain these lists
|
||||||
|
QVector<AvatarSharedPointer> _avatarsToRemoveFromScene;
|
||||||
|
QVector<AvatarSharedPointer> _avatarsToAddToScene;
|
||||||
|
QVector<AvatarSharedPointer> _avatarsToRemoveFromPhysicsEngine;
|
||||||
|
QVector<AvatarSharedPointer> _avatarsToAddToPhysicsEngine;
|
||||||
|
*/
|
||||||
|
QVector<AvatarSharedPointer> _avatarsToFade;
|
||||||
|
|
||||||
|
SetOfAvatarMotionStates _motionStatesThatMightUpdate;
|
||||||
|
VectorOfMotionStates _motionStatesToRemoveFromPhysics;
|
||||||
|
SetOfMotionStates _motionStatesToAddToPhysics;
|
||||||
|
|
||||||
QVector<AvatarSharedPointer> _avatarFades;
|
|
||||||
std::shared_ptr<MyAvatar> _myAvatar;
|
std::shared_ptr<MyAvatar> _myAvatar;
|
||||||
quint64 _lastSendAvatarDataTime = 0; // Controls MyAvatar send data rate.
|
quint64 _lastSendAvatarDataTime = 0; // Controls MyAvatar send data rate.
|
||||||
|
|
||||||
|
@ -115,10 +121,6 @@ private:
|
||||||
|
|
||||||
std::list<QPointer<AudioInjector>> _collisionInjectors;
|
std::list<QPointer<AudioInjector>> _collisionInjectors;
|
||||||
|
|
||||||
SetOfAvatarMotionStates _motionStatesThatMightUpdate;
|
|
||||||
SetOfMotionStates _motionStatesToAddToPhysics;
|
|
||||||
VectorOfMotionStates _motionStatesToRemoveFromPhysics;
|
|
||||||
|
|
||||||
RateCounter<> _myAvatarSendRate;
|
RateCounter<> _myAvatarSendRate;
|
||||||
int _numAvatarsUpdated { 0 };
|
int _numAvatarsUpdated { 0 };
|
||||||
int _numAvatarsNotUpdated { 0 };
|
int _numAvatarsNotUpdated { 0 };
|
||||||
|
|
Loading…
Reference in a new issue