mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 18:41:10 +02:00
addressing review requests
This commit is contained in:
parent
db17f094da
commit
fcb838a71f
6 changed files with 24 additions and 74 deletions
|
@ -84,7 +84,6 @@ AvatarManager::AvatarManager(QObject* parent) :
|
||||||
|
|
||||||
AvatarSharedPointer AvatarManager::addAvatar(const QUuid& sessionUUID, const QWeakPointer<Node>& mixerWeakPointer) {
|
AvatarSharedPointer AvatarManager::addAvatar(const QUuid& sessionUUID, const QWeakPointer<Node>& mixerWeakPointer) {
|
||||||
AvatarSharedPointer avatar = AvatarHashMap::addAvatar(sessionUUID, mixerWeakPointer);
|
AvatarSharedPointer avatar = AvatarHashMap::addAvatar(sessionUUID, mixerWeakPointer);
|
||||||
|
|
||||||
const auto otherAvatar = std::static_pointer_cast<OtherAvatar>(avatar);
|
const auto otherAvatar = std::static_pointer_cast<OtherAvatar>(avatar);
|
||||||
if (otherAvatar && _space) {
|
if (otherAvatar && _space) {
|
||||||
std::unique_lock<std::mutex> lock(_spaceLock);
|
std::unique_lock<std::mutex> lock(_spaceLock);
|
||||||
|
@ -210,7 +209,7 @@ 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 && _avatarsToFadeOut.empty()) {
|
if (_avatarHash.size() < 2) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -375,18 +374,12 @@ void AvatarManager::updateOtherAvatars(float deltaTime) {
|
||||||
qApp->getMain3DScene()->enqueueTransaction(renderTransaction);
|
qApp->getMain3DScene()->enqueueTransaction(renderTransaction);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_spaceProxiesToDelete.empty() && _space) {
|
|
||||||
std::unique_lock<std::mutex> lock(_spaceLock);
|
|
||||||
workloadTransaction.remove(_spaceProxiesToDelete);
|
|
||||||
_spaceProxiesToDelete.clear();
|
|
||||||
}
|
|
||||||
_space->enqueueTransaction(workloadTransaction);
|
_space->enqueueTransaction(workloadTransaction);
|
||||||
|
|
||||||
_numAvatarsUpdated = numAvatarsUpdated;
|
_numAvatarsUpdated = numAvatarsUpdated;
|
||||||
_numAvatarsNotUpdated = numAvatarsNotUpdated;
|
_numAvatarsNotUpdated = numAvatarsNotUpdated;
|
||||||
_numHeroAvatarsUpdated = numHerosUpdated;
|
_numHeroAvatarsUpdated = numHerosUpdated;
|
||||||
|
|
||||||
removeFadedAvatars();
|
|
||||||
_avatarSimulationTime = (float)(usecTimestampNow() - startTime) / (float)USECS_PER_MSEC;
|
_avatarSimulationTime = (float)(usecTimestampNow() - startTime) / (float)USECS_PER_MSEC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -399,30 +392,6 @@ void AvatarManager::postUpdate(float deltaTime, const render::ScenePointer& scen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarManager::removeFadedAvatars() {
|
|
||||||
if (_avatarsToFadeOut.empty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QReadLocker locker(&_hashLock);
|
|
||||||
auto avatarItr = _avatarsToFadeOut.begin();
|
|
||||||
const render::ScenePointer& scene = qApp->getMain3DScene();
|
|
||||||
render::Transaction transaction;
|
|
||||||
while (avatarItr != _avatarsToFadeOut.end()) {
|
|
||||||
auto avatar = std::static_pointer_cast<Avatar>(*avatarItr);
|
|
||||||
if (!avatar->isFading()) {
|
|
||||||
// fading to zero is such a rare event we push a unique transaction for each
|
|
||||||
if (avatar->isInScene()) {
|
|
||||||
avatar->removeFromScene(*avatarItr, scene, transaction);
|
|
||||||
}
|
|
||||||
avatarItr = _avatarsToFadeOut.erase(avatarItr);
|
|
||||||
} else {
|
|
||||||
++avatarItr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
scene->enqueueTransaction(transaction);
|
|
||||||
}
|
|
||||||
|
|
||||||
AvatarSharedPointer AvatarManager::newSharedAvatar(const QUuid& sessionUUID) {
|
AvatarSharedPointer AvatarManager::newSharedAvatar(const QUuid& sessionUUID) {
|
||||||
auto otherAvatar = new OtherAvatar(qApp->thread());
|
auto otherAvatar = new OtherAvatar(qApp->thread());
|
||||||
otherAvatar->setSessionUUID(sessionUUID);
|
otherAvatar->setSessionUUID(sessionUUID);
|
||||||
|
@ -517,10 +486,6 @@ void AvatarManager::removeDeadAvatarEntities(const SetOfEntities& deadEntities)
|
||||||
|
|
||||||
void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar, KillAvatarReason removalReason) {
|
void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar, KillAvatarReason removalReason) {
|
||||||
auto avatar = std::static_pointer_cast<OtherAvatar>(removedAvatar);
|
auto avatar = std::static_pointer_cast<OtherAvatar>(removedAvatar);
|
||||||
{
|
|
||||||
std::unique_lock<std::mutex> lock(_spaceLock);
|
|
||||||
_spaceProxiesToDelete.push_back(avatar->getSpaceIndex());
|
|
||||||
}
|
|
||||||
AvatarHashMap::handleRemovedAvatar(avatar, removalReason);
|
AvatarHashMap::handleRemovedAvatar(avatar, removalReason);
|
||||||
avatar->tearDownGrabs();
|
avatar->tearDownGrabs();
|
||||||
|
|
||||||
|
@ -534,6 +499,15 @@ void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar
|
||||||
avatar->setIsFading(false);
|
avatar->setIsFading(false);
|
||||||
if (removalReason == KillAvatarReason::TheirAvatarEnteredYourBubble) {
|
if (removalReason == KillAvatarReason::TheirAvatarEnteredYourBubble) {
|
||||||
emit DependencyManager::get<UsersScriptingInterface>()->enteredIgnoreRadius();
|
emit DependencyManager::get<UsersScriptingInterface>()->enteredIgnoreRadius();
|
||||||
|
|
||||||
|
workload::Transaction workloadTransaction;
|
||||||
|
workloadTransaction.remove(avatar->getSpaceIndex());
|
||||||
|
_space->enqueueTransaction(workloadTransaction);
|
||||||
|
|
||||||
|
const render::ScenePointer& scene = qApp->getMain3DScene();
|
||||||
|
render::Transaction transaction;
|
||||||
|
avatar->removeFromScene(avatar, scene, transaction);
|
||||||
|
scene->enqueueTransaction(transaction);
|
||||||
} else if (removalReason == KillAvatarReason::AvatarDisconnected) {
|
} else if (removalReason == KillAvatarReason::AvatarDisconnected) {
|
||||||
// remove from node sets, if present
|
// remove from node sets, if present
|
||||||
DependencyManager::get<NodeList>()->removeFromIgnoreMuteSets(avatar->getSessionUUID());
|
DependencyManager::get<NodeList>()->removeFromIgnoreMuteSets(avatar->getSessionUUID());
|
||||||
|
@ -542,13 +516,20 @@ void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar
|
||||||
auto scene = qApp->getMain3DScene();
|
auto scene = qApp->getMain3DScene();
|
||||||
avatar->fadeOut(transaction, removalReason);
|
avatar->fadeOut(transaction, removalReason);
|
||||||
|
|
||||||
transaction.transitionFinishedOperator(avatar->getRenderItemID(), [avatar]() {
|
workload::SpacePointer space = _space;
|
||||||
|
transaction.transitionFinishedOperator(avatar->getRenderItemID(), [space, avatar]() {
|
||||||
avatar->setIsFading(false);
|
avatar->setIsFading(false);
|
||||||
|
const render::ScenePointer& scene = qApp->getMain3DScene();
|
||||||
|
render::Transaction transaction;
|
||||||
|
avatar->removeFromScene(avatar, scene, transaction);
|
||||||
|
scene->enqueueTransaction(transaction);
|
||||||
|
|
||||||
|
workload::Transaction workloadTransaction;
|
||||||
|
workloadTransaction.remove(avatar->getSpaceIndex());
|
||||||
|
space->enqueueTransaction(workloadTransaction);
|
||||||
});
|
});
|
||||||
scene->enqueueTransaction(transaction);
|
scene->enqueueTransaction(transaction);
|
||||||
}
|
}
|
||||||
|
|
||||||
_avatarsToFadeOut.push_back(removedAvatar);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarManager::clearOtherAvatars() {
|
void AvatarManager::clearOtherAvatars() {
|
||||||
|
|
|
@ -222,8 +222,6 @@ private:
|
||||||
|
|
||||||
AvatarSharedPointer newSharedAvatar(const QUuid& sessionUUID) override;
|
AvatarSharedPointer newSharedAvatar(const QUuid& sessionUUID) override;
|
||||||
|
|
||||||
void removeFadedAvatars();
|
|
||||||
|
|
||||||
// called only from the AvatarHashMap thread - cannot be called while this thread holds the
|
// called only from the AvatarHashMap thread - cannot be called while this thread holds the
|
||||||
// hash lock, since handleRemovedAvatar needs a write lock on the entity tree and the entity tree
|
// hash lock, since handleRemovedAvatar needs a write lock on the entity tree and the entity tree
|
||||||
// frequently grabs a read lock on the hash to get a given avatar by ID
|
// frequently grabs a read lock on the hash to get a given avatar by ID
|
||||||
|
@ -231,7 +229,6 @@ private:
|
||||||
KillAvatarReason removalReason = KillAvatarReason::NoReason) override;
|
KillAvatarReason removalReason = KillAvatarReason::NoReason) override;
|
||||||
void handleTransitAnimations(AvatarTransit::Status status);
|
void handleTransitAnimations(AvatarTransit::Status status);
|
||||||
|
|
||||||
std::vector<AvatarSharedPointer> _avatarsToFadeOut;
|
|
||||||
using SetOfOtherAvatars = std::set<OtherAvatarPointer>;
|
using SetOfOtherAvatars = std::set<OtherAvatarPointer>;
|
||||||
SetOfOtherAvatars _avatarsToChangeInPhysics;
|
SetOfOtherAvatars _avatarsToChangeInPhysics;
|
||||||
|
|
||||||
|
@ -251,7 +248,6 @@ private:
|
||||||
|
|
||||||
mutable std::mutex _spaceLock;
|
mutable std::mutex _spaceLock;
|
||||||
workload::SpacePointer _space;
|
workload::SpacePointer _space;
|
||||||
std::vector<int32_t> _spaceProxiesToDelete;
|
|
||||||
|
|
||||||
AvatarTransit::TransitConfig _transitConfig;
|
AvatarTransit::TransitConfig _transitConfig;
|
||||||
};
|
};
|
||||||
|
|
|
@ -439,7 +439,6 @@ void AvatarHashMap::removeAvatar(const QUuid& sessionUUID, KillAvatarReason remo
|
||||||
}
|
}
|
||||||
|
|
||||||
auto removedAvatar = _avatarHash.take(sessionUUID);
|
auto removedAvatar = _avatarHash.take(sessionUUID);
|
||||||
|
|
||||||
if (removedAvatar) {
|
if (removedAvatar) {
|
||||||
removedAvatars.push_back(removedAvatar);
|
removedAvatars.push_back(removedAvatar);
|
||||||
}
|
}
|
||||||
|
|
|
@ -214,30 +214,6 @@ void EntityTreeRenderer::stopDomainAndNonOwnedEntities() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityTreeRenderer::removeFadedRenderables() {
|
|
||||||
if (_entityRenderablesToFadeOut.empty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::unique_lock<std::mutex> lock(_entitiesToFadeLock);
|
|
||||||
auto entityIter = _entityRenderablesToFadeOut.begin();
|
|
||||||
auto scene = _viewState->getMain3DScene();
|
|
||||||
render::Transaction transaction;
|
|
||||||
|
|
||||||
while (entityIter != _entityRenderablesToFadeOut.end()) {
|
|
||||||
auto entityRenderable = *entityIter;
|
|
||||||
|
|
||||||
if (!entityRenderable->getIsFading()) {
|
|
||||||
entityRenderable->removeFromScene(scene, transaction);
|
|
||||||
entityIter = _entityRenderablesToFadeOut.erase(entityIter);
|
|
||||||
} else {
|
|
||||||
++entityIter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
scene->enqueueTransaction(transaction);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EntityTreeRenderer::clearDomainAndNonOwnedEntities() {
|
void EntityTreeRenderer::clearDomainAndNonOwnedEntities() {
|
||||||
stopDomainAndNonOwnedEntities();
|
stopDomainAndNonOwnedEntities();
|
||||||
|
|
||||||
|
@ -551,7 +527,6 @@ void EntityTreeRenderer::update(bool simulate) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
removeFadedRenderables();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityTreeRenderer::handleSpaceUpdate(std::pair<int32_t, glm::vec4> proxyUpdate) {
|
void EntityTreeRenderer::handleSpaceUpdate(std::pair<int32_t, glm::vec4> proxyUpdate) {
|
||||||
|
@ -1080,12 +1055,14 @@ void EntityTreeRenderer::fadeOutRenderable(const EntityRendererPointer& renderab
|
||||||
auto scene = _viewState->getMain3DScene();
|
auto scene = _viewState->getMain3DScene();
|
||||||
|
|
||||||
renderable->setIsFading(true);
|
renderable->setIsFading(true);
|
||||||
transaction.transitionFinishedOperator(renderable->getRenderItemID(), [renderable]() {
|
transaction.transitionFinishedOperator(renderable->getRenderItemID(), [scene, renderable]() {
|
||||||
renderable->setIsFading(false);
|
renderable->setIsFading(false);
|
||||||
|
render::Transaction transaction;
|
||||||
|
renderable->removeFromScene(scene, transaction);
|
||||||
|
scene->enqueueTransaction(transaction);
|
||||||
});
|
});
|
||||||
|
|
||||||
scene->enqueueTransaction(transaction);
|
scene->enqueueTransaction(transaction);
|
||||||
_entityRenderablesToFadeOut.push_back(renderable);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityTreeRenderer::playEntityCollisionSound(const EntityItemPointer& entity, const Collision& collision) {
|
void EntityTreeRenderer::playEntityCollisionSound(const EntityItemPointer& entity, const Collision& collision) {
|
||||||
|
|
|
@ -259,8 +259,6 @@ private:
|
||||||
std::unordered_map<EntityItemID, EntityRendererPointer> _entitiesInScene;
|
std::unordered_map<EntityItemID, EntityRendererPointer> _entitiesInScene;
|
||||||
std::unordered_map<EntityItemID, EntityItemWeakPointer> _entitiesToAdd;
|
std::unordered_map<EntityItemID, EntityItemWeakPointer> _entitiesToAdd;
|
||||||
|
|
||||||
std::mutex _entitiesToFadeLock;
|
|
||||||
std::vector<EntityRendererPointer> _entityRenderablesToFadeOut;
|
|
||||||
// For Scene.shouldRenderEntities
|
// For Scene.shouldRenderEntities
|
||||||
QList<EntityItemID> _entityIDsLastInScene;
|
QList<EntityItemID> _entityIDsLastInScene;
|
||||||
|
|
||||||
|
|
|
@ -559,7 +559,6 @@ void Scene::resetItemTransition(ItemID itemId) {
|
||||||
auto transitionStage = getStage<TransitionStage>(TransitionStage::getName());
|
auto transitionStage = getStage<TransitionStage>(TransitionStage::getName());
|
||||||
|
|
||||||
auto finishedOperators = _transitionFinishedOperatorMap[transitionId];
|
auto finishedOperators = _transitionFinishedOperatorMap[transitionId];
|
||||||
qDebug() << "removing transition: " << transitionId;
|
|
||||||
for (auto finishedOperator : finishedOperators) {
|
for (auto finishedOperator : finishedOperators) {
|
||||||
if (finishedOperator) {
|
if (finishedOperator) {
|
||||||
finishedOperator();
|
finishedOperator();
|
||||||
|
|
Loading…
Reference in a new issue