Fix ghost avatars/displaynames

This commit is contained in:
Atlante45 2015-06-10 14:59:27 +02:00
parent fb4e5a70bd
commit 3af8bec3d7
2 changed files with 6 additions and 5 deletions

View file

@ -304,6 +304,7 @@ bool Avatar::addToScene(AvatarSharedPointer self, std::shared_ptr<render::Scene>
void Avatar::removeFromScene(AvatarSharedPointer self, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges) { void Avatar::removeFromScene(AvatarSharedPointer self, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges) {
pendingChanges.removeItem(_renderItemID); pendingChanges.removeItem(_renderItemID);
_skeletonModel.removeFromScene(scene, pendingChanges); _skeletonModel.removeFromScene(scene, pendingChanges);
getHead()->getFaceModel().removeFromScene(scene, pendingChanges);
} }
void Avatar::render(RenderArgs* renderArgs, const glm::vec3& cameraPosition, bool postLighting) { void Avatar::render(RenderArgs* renderArgs, const glm::vec3& cameraPosition, bool postLighting) {

View file

@ -122,16 +122,20 @@ void AvatarManager::simulateAvatarFades(float deltaTime) {
const float SHRINK_RATE = 0.9f; const float SHRINK_RATE = 0.9f;
const float MIN_FADE_SCALE = 0.001f; const float MIN_FADE_SCALE = 0.001f;
render::ScenePointer scene = Application::getInstance()->getMain3DScene();
render::PendingChanges pendingChanges;
while (fadingIterator != _avatarFades.end()) { while (fadingIterator != _avatarFades.end()) {
Avatar* avatar = static_cast<Avatar*>(fadingIterator->get()); Avatar* avatar = static_cast<Avatar*>(fadingIterator->get());
avatar->setTargetScale(avatar->getScale() * SHRINK_RATE, true); avatar->setTargetScale(avatar->getScale() * SHRINK_RATE, true);
if (avatar->getTargetScale() < MIN_FADE_SCALE) { if (avatar->getTargetScale() < MIN_FADE_SCALE) {
avatar->removeFromScene(*fadingIterator, scene, pendingChanges);
fadingIterator = _avatarFades.erase(fadingIterator); fadingIterator = _avatarFades.erase(fadingIterator);
} else { } else {
avatar->simulate(deltaTime); avatar->simulate(deltaTime);
++fadingIterator; ++fadingIterator;
} }
} }
scene->enqueuePendingChanges(pendingChanges);
} }
AvatarSharedPointer AvatarManager::newSharedAvatar() { AvatarSharedPointer AvatarManager::newSharedAvatar() {
@ -171,10 +175,6 @@ void AvatarManager::removeAvatar(const QUuid& sessionUUID) {
_avatarFades.push_back(avatarIterator.value()); _avatarFades.push_back(avatarIterator.value());
_avatarHash.erase(avatarIterator); _avatarHash.erase(avatarIterator);
} }
render::ScenePointer scene = Application::getInstance()->getMain3DScene();
render::PendingChanges pendingChanges;
avatar->removeFromScene(avatar, scene, pendingChanges);
scene->enqueuePendingChanges(pendingChanges);
} }
} }