From b8dea4b86955781f6b1a7d641a6513bdd8223be1 Mon Sep 17 00:00:00 2001 From: Angus Antley Date: Tue, 26 Jun 2018 06:27:01 +0100 Subject: [PATCH 01/13] adding changes to add the orb when an avatar is processed by the avatar mixer and when a new model is being loaded for an avatar. The orb is removed when the geometry has loaded. --- interface/src/avatar/AvatarManager.cpp | 8 +++++ .../src/avatars-renderer/Avatar.cpp | 31 +++++++++++++++++++ .../src/avatars-renderer/Avatar.h | 8 ++++- 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index c63095a204..0b03a660bc 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -193,6 +193,14 @@ void AvatarManager::updateOtherAvatars(float deltaTime) { const SortableAvatar& sortData = sortedAvatars.top(); const auto avatar = std::static_pointer_cast(sortData.getAvatar()); + //if the geometry is loaded then turn off the orb + if (avatar->getSkeletonModel()->isLoaded()) { + //remove the orb if it is there + avatar->removeOrb(); + } else { + avatar->updateOrbPosition(); + } + bool ignoring = DependencyManager::get()->isPersonalMutingNode(avatar->getID()); if (ignoring) { sortedAvatars.pop(); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index a99838d810..6d23b524d3 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -34,6 +34,7 @@ #include #include "ModelEntityItem.h" #include "RenderableModelEntityItem.h" +#include "../../interface/src/Application.h" #include @@ -1338,6 +1339,27 @@ void Avatar::scaleVectorRelativeToPosition(glm::vec3 &positionToScale) const { } void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { + if (!isMyAvatar()) { + if (_purpleOrbMeshPlaceholderID == UNKNOWN_OVERLAY_ID || + !qApp->getOverlays().isAddedOverlay(_purpleOrbMeshPlaceholderID)) { + qCWarning(avatars_renderer) << "change model add the purple orb************************"; + _purpleOrbMeshPlaceholder = std::make_shared(); + _purpleOrbMeshPlaceholder->setAlpha(1.0f); + _purpleOrbMeshPlaceholder->setColor({ 0xFF, 0x00, 0xFF }); + _purpleOrbMeshPlaceholder->setIsSolid(false); + _purpleOrbMeshPlaceholder->setPulseMin(0.5); + _purpleOrbMeshPlaceholder->setPulseMax(1.0); + _purpleOrbMeshPlaceholder->setColorPulse(1.0); + _purpleOrbMeshPlaceholder->setIgnoreRayIntersection(true); + _purpleOrbMeshPlaceholder->setDrawInFront(false); + _purpleOrbMeshPlaceholderID = qApp->getOverlays().addOverlay(_purpleOrbMeshPlaceholder); + // Position focus + _purpleOrbMeshPlaceholder->setWorldOrientation(glm::quat(0.0f, 0.0f, 0.0f, 1.0)); + _purpleOrbMeshPlaceholder->setWorldPosition(getHead()->getPosition()); + _purpleOrbMeshPlaceholder->setDimensions(glm::vec3(0.5f, 0.5f, 0.5f)); + _purpleOrbMeshPlaceholder->setVisible(true); + } + } AvatarData::setSkeletonModelURL(skeletonModelURL); if (QThread::currentThread() == thread()) { _skeletonModel->setURL(_skeletonModelURL); @@ -1869,7 +1891,16 @@ void Avatar::processMaterials() { } } } +void Avatar::removeOrb() { + if (qApp->getOverlays().isAddedOverlay(_purpleOrbMeshPlaceholderID)) { + qApp->getOverlays().deleteOverlay(_purpleOrbMeshPlaceholderID); + qCWarning(avatars_renderer) << "remove the purple orb***************************"; + } +} +void Avatar::updateOrbPosition() { + _purpleOrbMeshPlaceholder->setWorldPosition(getHead()->getPosition()); +} scriptable::ScriptableModelBase Avatar::getScriptableModel() { if (!_skeletonModel || !_skeletonModel->isLoaded()) { return scriptable::ScriptableModelBase(); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index 98246330c4..c480c5905e 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -27,6 +27,9 @@ #include "Head.h" #include "SkeletonModel.h" #include "Rig.h" +#include "../../interface/src/ui/overlays/Overlays.h" +#include "../../interface/src/ui/overlays/Sphere3DOverlay.h" + #include namespace render { @@ -364,7 +367,10 @@ public: void removeMaterial(graphics::MaterialPointer material, const std::string& parentMaterialName) override; virtual scriptable::ScriptableModelBase getScriptableModel() override; - + void removeOrb(); + void updateOrbPosition(); + std::shared_ptr _purpleOrbMeshPlaceholder{ nullptr }; + OverlayID _purpleOrbMeshPlaceholderID{ UNKNOWN_OVERLAY_ID }; public slots: // FIXME - these should be migrated to use Pose data instead From 232dc21c7b34494490036588d65922eceb4cfd10 Mon Sep 17 00:00:00 2001 From: Angus Antley Date: Tue, 26 Jun 2018 06:38:09 +0100 Subject: [PATCH 02/13] add orb code added to otheravatar.cpp --- .../src/avatars-renderer/OtherAvatar.cpp | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.cpp index 7678c03276..11281334eb 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.cpp @@ -7,6 +7,7 @@ // #include "OtherAvatar.h" +#include "../../interface/src/Application.h" OtherAvatar::OtherAvatar(QThread* thread) : Avatar(thread) { // give the pointer to our head to inherited _headData variable from AvatarData @@ -16,4 +17,23 @@ OtherAvatar::OtherAvatar(QThread* thread) : Avatar(thread) { connect(_skeletonModel.get(), &Model::setURLFinished, this, &Avatar::setModelURLFinished); connect(_skeletonModel.get(), &Model::rigReady, this, &Avatar::rigReady); connect(_skeletonModel.get(), &Model::rigReset, this, &Avatar::rigReset); + + //add the purple orb + if (_purpleOrbMeshPlaceholderID == UNKNOWN_OVERLAY_ID || !qApp->getOverlays().isAddedOverlay(_purpleOrbMeshPlaceholderID)) { + _purpleOrbMeshPlaceholder = std::make_shared(); + _purpleOrbMeshPlaceholder->setAlpha(1.0f); + _purpleOrbMeshPlaceholder->setColor({ 0xFF, 0x00, 0xFF }); + _purpleOrbMeshPlaceholder->setIsSolid(false); + _purpleOrbMeshPlaceholder->setPulseMin(0.5); + _purpleOrbMeshPlaceholder->setPulseMax(1.0); + _purpleOrbMeshPlaceholder->setColorPulse(1.0); + _purpleOrbMeshPlaceholder->setIgnoreRayIntersection(true); + _purpleOrbMeshPlaceholder->setDrawInFront(false); + _purpleOrbMeshPlaceholderID = qApp->getOverlays().addOverlay(_purpleOrbMeshPlaceholder); + // Position focus + _purpleOrbMeshPlaceholder->setWorldOrientation(glm::quat(0.0f, 0.0f, 0.0f, 1.0)); + _purpleOrbMeshPlaceholder->setWorldPosition(glm::vec3(476.0f, 500.0f, 493.0f)); + _purpleOrbMeshPlaceholder->setDimensions(glm::vec3(0.5f, 0.5f, 0.5f)); + _purpleOrbMeshPlaceholder->setVisible(true); + } } From fa1a9d04e07e945cffb35de8685f10f5c49eecb7 Mon Sep 17 00:00:00 2001 From: amantley Date: Tue, 26 Jun 2018 13:18:26 -0700 Subject: [PATCH 03/13] everything working before trying to move otheravatar to interface --- interface/src/avatar/AvatarManager.cpp | 40 ++++++++++++++++++- interface/src/avatar/AvatarManager.h | 2 + .../src/avatars-renderer/Avatar.cpp | 9 +---- .../src/avatars-renderer/Avatar.h | 4 +- .../src/avatars-renderer/OtherAvatar.cpp | 2 + libraries/avatars/src/AvatarData.h | 2 + 6 files changed, 48 insertions(+), 11 deletions(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 0b03a660bc..8866ae68f9 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -196,7 +196,7 @@ void AvatarManager::updateOtherAvatars(float deltaTime) { //if the geometry is loaded then turn off the orb if (avatar->getSkeletonModel()->isLoaded()) { //remove the orb if it is there - avatar->removeOrb(); + removeOrb(avatar->_purpleOrbMeshPlaceholderID); } else { avatar->updateOrbPosition(); } @@ -325,7 +325,34 @@ void AvatarManager::simulateAvatarFades(float deltaTime) { } AvatarSharedPointer AvatarManager::newSharedAvatar() { - return AvatarSharedPointer(new OtherAvatar(qApp->thread()), [](OtherAvatar* ptr) { ptr->deleteLater(); }); + + auto newOtherAvatar = AvatarSharedPointer(new OtherAvatar(qApp->thread()), [](OtherAvatar* ptr) { ptr->deleteLater(); }); + + //add the purple orb + /* + if (newOtherAvatar->_purpleOrbMeshPlaceholderID == UNKNOWN_OVERLAY_ID || + !qApp->getOverlays().isAddedOverlay(newOtherAvatar->_purpleOrbMeshPlaceholderID)) { + newOtherAvatar->_purpleOrbMeshPlaceholder = std::make_shared(); + newOtherAvatar->_purpleOrbMeshPlaceholder->setAlpha(1.0f); + newOtherAvatar->_purpleOrbMeshPlaceholder->setColor({ 0xFF, 0x00, 0xFF }); + newOtherAvatar->_purpleOrbMeshPlaceholder->setIsSolid(false); + newOtherAvatar->_purpleOrbMeshPlaceholder->setPulseMin(0.5); + newOtherAvatar->_purpleOrbMeshPlaceholder->setPulseMax(1.0); + newOtherAvatar->_purpleOrbMeshPlaceholder->setColorPulse(1.0); + newOtherAvatar->_purpleOrbMeshPlaceholder->setIgnoreRayIntersection(true); + newOtherAvatar->_purpleOrbMeshPlaceholder->setDrawInFront(false); + newOtherAvatar->_purpleOrbMeshPlaceholderID = qApp->getOverlays().addOverlay(newOtherAvatar->_purpleOrbMeshPlaceholder); + // Position focus + newOtherAvatar->_purpleOrbMeshPlaceholder->setWorldOrientation(glm::quat(0.0f, 0.0f, 0.0f, 1.0)); + newOtherAvatar->_purpleOrbMeshPlaceholder->setWorldPosition(glm::vec3(476.0f, 500.0f, 493.0f)); + newOtherAvatar->_purpleOrbMeshPlaceholder->setDimensions(glm::vec3(0.5f, 0.5f, 0.5f)); + newOtherAvatar->_purpleOrbMeshPlaceholder->setVisible(true); + } + */ + + + + return newOtherAvatar; } void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar, KillAvatarReason removalReason) { @@ -621,3 +648,12 @@ void AvatarManager::setAvatarSortCoefficient(const QString& name, const QScriptV DependencyManager::get()->broadcastToNodes(std::move(packet), NodeSet() << NodeType::AvatarMixer); } } + +void AvatarManager::removeOrb(OverlayID orbID) { + if (qApp->getOverlays().isAddedOverlay(orbID)) { + qApp->getOverlays().deleteOverlay(orbID); + //qCWarning(avatars_renderer) << "remove the purple orb***************************"; + } +} + + diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index 6a3d0355f6..600da65b85 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -158,6 +158,8 @@ public: float getMyAvatarSendRate() const { return _myAvatarSendRate.rate(); } + void removeOrb(OverlayID orbID); + public slots: /**jsdoc diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 6d23b524d3..4fc987d6dd 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1891,16 +1891,11 @@ void Avatar::processMaterials() { } } } -void Avatar::removeOrb() { - if (qApp->getOverlays().isAddedOverlay(_purpleOrbMeshPlaceholderID)) { - qApp->getOverlays().deleteOverlay(_purpleOrbMeshPlaceholderID); - qCWarning(avatars_renderer) << "remove the purple orb***************************"; - } -} void Avatar::updateOrbPosition() { _purpleOrbMeshPlaceholder->setWorldPosition(getHead()->getPosition()); -} +} + scriptable::ScriptableModelBase Avatar::getScriptableModel() { if (!_skeletonModel || !_skeletonModel->isLoaded()) { return scriptable::ScriptableModelBase(); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index c480c5905e..e4052865dd 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -367,10 +367,10 @@ public: void removeMaterial(graphics::MaterialPointer material, const std::string& parentMaterialName) override; virtual scriptable::ScriptableModelBase getScriptableModel() override; - void removeOrb(); + void updateOrbPosition(); std::shared_ptr _purpleOrbMeshPlaceholder{ nullptr }; - OverlayID _purpleOrbMeshPlaceholderID{ UNKNOWN_OVERLAY_ID }; + OverlayID _purpleOrbMeshPlaceholderID{ UNKNOWN_OVERLAY_ID }; public slots: // FIXME - these should be migrated to use Pose data instead diff --git a/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.cpp index 11281334eb..a6c69d24f6 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.cpp @@ -19,6 +19,7 @@ OtherAvatar::OtherAvatar(QThread* thread) : Avatar(thread) { connect(_skeletonModel.get(), &Model::rigReset, this, &Avatar::rigReset); //add the purple orb + if (_purpleOrbMeshPlaceholderID == UNKNOWN_OVERLAY_ID || !qApp->getOverlays().isAddedOverlay(_purpleOrbMeshPlaceholderID)) { _purpleOrbMeshPlaceholder = std::make_shared(); _purpleOrbMeshPlaceholder->setAlpha(1.0f); @@ -36,4 +37,5 @@ OtherAvatar::OtherAvatar(QThread* thread) : Avatar(thread) { _purpleOrbMeshPlaceholder->setDimensions(glm::vec3(0.5f, 0.5f, 0.5f)); _purpleOrbMeshPlaceholder->setVisible(true); } + } diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 51b3257ba2..2d150609d1 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -55,6 +55,8 @@ #include "PathUtils.h" #include +//#include "Overlays.h" +//#include "Sphere3DOverlay.h" using AvatarSharedPointer = std::shared_ptr; using AvatarWeakPointer = std::weak_ptr; From 46c70d948f054a06dd54adcf2317180bf1ee0a80 Mon Sep 17 00:00:00 2001 From: amantley Date: Tue, 26 Jun 2018 15:11:58 -0700 Subject: [PATCH 04/13] Moved OtherAvatar class to interface project. This allows AvatarManager to create and delete the orb overlay that is drawn when an avatar is present in a domain but for some reason the geometry is not loaded. OtherAvatar has new members orbMeshPlaceholder and orbMeshPlaceholderID for a spherical orb that is drawn --- interface/src/avatar/AvatarManager.cpp | 38 +----- interface/src/avatar/OtherAvatar.cpp | 58 +++++++++ interface/src/avatar/OtherAvatar.h | 28 +++++ .../src/avatars-renderer/Avatar.cpp | 24 +--- .../src/avatars-renderer/Avatar.h | 118 ++++++++++-------- .../src/avatars-renderer/OtherAvatar.cpp | 41 ------ .../src/avatars-renderer/OtherAvatar.h | 20 --- 7 files changed, 157 insertions(+), 170 deletions(-) create mode 100644 interface/src/avatar/OtherAvatar.cpp create mode 100644 interface/src/avatar/OtherAvatar.h delete mode 100644 libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.cpp delete mode 100644 libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.h diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 8866ae68f9..1304fa84a9 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -36,13 +36,13 @@ #include #include #include -#include #include #include "Application.h" #include "InterfaceLogging.h" #include "Menu.h" #include "MyAvatar.h" +#include "OtherAvatar.h" #include "SceneScriptingInterface.h" // 50 times per second - target is 45hz, but this helps account for any small deviations @@ -192,13 +192,14 @@ void AvatarManager::updateOtherAvatars(float deltaTime) { while (!sortedAvatars.empty()) { const SortableAvatar& sortData = sortedAvatars.top(); const auto avatar = std::static_pointer_cast(sortData.getAvatar()); + const auto otherAvatar = std::static_pointer_cast(sortData.getAvatar()); //if the geometry is loaded then turn off the orb if (avatar->getSkeletonModel()->isLoaded()) { //remove the orb if it is there - removeOrb(avatar->_purpleOrbMeshPlaceholderID); + otherAvatar->removeOrb(); } else { - avatar->updateOrbPosition(); + otherAvatar->updateOrbPosition(); } bool ignoring = DependencyManager::get()->isPersonalMutingNode(avatar->getID()); @@ -327,30 +328,6 @@ void AvatarManager::simulateAvatarFades(float deltaTime) { AvatarSharedPointer AvatarManager::newSharedAvatar() { auto newOtherAvatar = AvatarSharedPointer(new OtherAvatar(qApp->thread()), [](OtherAvatar* ptr) { ptr->deleteLater(); }); - - //add the purple orb - /* - if (newOtherAvatar->_purpleOrbMeshPlaceholderID == UNKNOWN_OVERLAY_ID || - !qApp->getOverlays().isAddedOverlay(newOtherAvatar->_purpleOrbMeshPlaceholderID)) { - newOtherAvatar->_purpleOrbMeshPlaceholder = std::make_shared(); - newOtherAvatar->_purpleOrbMeshPlaceholder->setAlpha(1.0f); - newOtherAvatar->_purpleOrbMeshPlaceholder->setColor({ 0xFF, 0x00, 0xFF }); - newOtherAvatar->_purpleOrbMeshPlaceholder->setIsSolid(false); - newOtherAvatar->_purpleOrbMeshPlaceholder->setPulseMin(0.5); - newOtherAvatar->_purpleOrbMeshPlaceholder->setPulseMax(1.0); - newOtherAvatar->_purpleOrbMeshPlaceholder->setColorPulse(1.0); - newOtherAvatar->_purpleOrbMeshPlaceholder->setIgnoreRayIntersection(true); - newOtherAvatar->_purpleOrbMeshPlaceholder->setDrawInFront(false); - newOtherAvatar->_purpleOrbMeshPlaceholderID = qApp->getOverlays().addOverlay(newOtherAvatar->_purpleOrbMeshPlaceholder); - // Position focus - newOtherAvatar->_purpleOrbMeshPlaceholder->setWorldOrientation(glm::quat(0.0f, 0.0f, 0.0f, 1.0)); - newOtherAvatar->_purpleOrbMeshPlaceholder->setWorldPosition(glm::vec3(476.0f, 500.0f, 493.0f)); - newOtherAvatar->_purpleOrbMeshPlaceholder->setDimensions(glm::vec3(0.5f, 0.5f, 0.5f)); - newOtherAvatar->_purpleOrbMeshPlaceholder->setVisible(true); - } - */ - - return newOtherAvatar; } @@ -649,11 +626,6 @@ void AvatarManager::setAvatarSortCoefficient(const QString& name, const QScriptV } } -void AvatarManager::removeOrb(OverlayID orbID) { - if (qApp->getOverlays().isAddedOverlay(orbID)) { - qApp->getOverlays().deleteOverlay(orbID); - //qCWarning(avatars_renderer) << "remove the purple orb***************************"; - } -} + diff --git a/interface/src/avatar/OtherAvatar.cpp b/interface/src/avatar/OtherAvatar.cpp new file mode 100644 index 0000000000..e6c3553b1e --- /dev/null +++ b/interface/src/avatar/OtherAvatar.cpp @@ -0,0 +1,58 @@ +// +// Created by Bradley Austin Davis on 2017/04/27 +// Copyright 2013-2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "OtherAvatar.h" +#include "../../interface/src/Application.h" + +OtherAvatar::OtherAvatar(QThread* thread) : Avatar(thread) { + // give the pointer to our head to inherited _headData variable from AvatarData + _headData = new Head(this); + _skeletonModel = std::make_shared(this, nullptr); + _skeletonModel->setLoadingPriority(OTHERAVATAR_LOADING_PRIORITY); + connect(_skeletonModel.get(), &Model::setURLFinished, this, &Avatar::setModelURLFinished); + connect(_skeletonModel.get(), &Model::rigReady, this, &Avatar::rigReady); + connect(_skeletonModel.get(), &Model::rigReset, this, &Avatar::rigReset); + + //add the purple orb + createOrb(); + + +} + +void OtherAvatar::removeOrb() { + if (qApp->getOverlays().isAddedOverlay(_otherAvatarOrbMeshPlaceholderID)) { + qApp->getOverlays().deleteOverlay(_otherAvatarOrbMeshPlaceholderID); + //qCWarning(avatars_renderer) << "remove the purple orb***************************"; + } +} + +void OtherAvatar::updateOrbPosition() { + _otherAvatarOrbMeshPlaceholder->setWorldPosition(getHead()->getPosition()); +} + +void OtherAvatar::createOrb() { + qCDebug(interfaceapp) << "we are in create orb otherAvatar.h"; + if (_otherAvatarOrbMeshPlaceholderID == UNKNOWN_OVERLAY_ID || + !qApp->getOverlays().isAddedOverlay(_otherAvatarOrbMeshPlaceholderID)) { + _otherAvatarOrbMeshPlaceholder = std::make_shared(); + _otherAvatarOrbMeshPlaceholder->setAlpha(1.0f); + _otherAvatarOrbMeshPlaceholder->setColor({ 0xFF, 0x00, 0xFF }); + _otherAvatarOrbMeshPlaceholder->setIsSolid(false); + _otherAvatarOrbMeshPlaceholder->setPulseMin(0.5); + _otherAvatarOrbMeshPlaceholder->setPulseMax(1.0); + _otherAvatarOrbMeshPlaceholder->setColorPulse(1.0); + _otherAvatarOrbMeshPlaceholder->setIgnoreRayIntersection(true); + _otherAvatarOrbMeshPlaceholder->setDrawInFront(false); + _otherAvatarOrbMeshPlaceholderID = qApp->getOverlays().addOverlay(_otherAvatarOrbMeshPlaceholder); + // Position focus + _otherAvatarOrbMeshPlaceholder->setWorldOrientation(glm::quat(0.0f, 0.0f, 0.0f, 1.0)); + _otherAvatarOrbMeshPlaceholder->setWorldPosition(glm::vec3(476.0f, 500.0f, 493.0f)); + _otherAvatarOrbMeshPlaceholder->setDimensions(glm::vec3(0.5f, 0.5f, 0.5f)); + _otherAvatarOrbMeshPlaceholder->setVisible(true); + } +} diff --git a/interface/src/avatar/OtherAvatar.h b/interface/src/avatar/OtherAvatar.h new file mode 100644 index 0000000000..707dd1fcc8 --- /dev/null +++ b/interface/src/avatar/OtherAvatar.h @@ -0,0 +1,28 @@ +// +// Created by Bradley Austin Davis on 2017/04/27 +// Copyright 2013-2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_OtherAvatar_h +#define hifi_OtherAvatar_h + +#include +#include "ui/overlays/Overlays.h" +#include "ui/overlays/Sphere3DOverlay.h" +#include "InterfaceLogging.h" + +class OtherAvatar : public Avatar { +public: + explicit OtherAvatar(QThread* thread); + virtual void instantiableAvatar() override{}; + void createOrb() override; + void updateOrbPosition(); + void removeOrb(); + std::shared_ptr _otherAvatarOrbMeshPlaceholder{ nullptr }; + OverlayID _otherAvatarOrbMeshPlaceholderID{ UNKNOWN_OVERLAY_ID }; +}; + +#endif // hifi_OtherAvatar_h diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 4fc987d6dd..64545f326d 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1340,25 +1340,7 @@ void Avatar::scaleVectorRelativeToPosition(glm::vec3 &positionToScale) const { void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { if (!isMyAvatar()) { - if (_purpleOrbMeshPlaceholderID == UNKNOWN_OVERLAY_ID || - !qApp->getOverlays().isAddedOverlay(_purpleOrbMeshPlaceholderID)) { - qCWarning(avatars_renderer) << "change model add the purple orb************************"; - _purpleOrbMeshPlaceholder = std::make_shared(); - _purpleOrbMeshPlaceholder->setAlpha(1.0f); - _purpleOrbMeshPlaceholder->setColor({ 0xFF, 0x00, 0xFF }); - _purpleOrbMeshPlaceholder->setIsSolid(false); - _purpleOrbMeshPlaceholder->setPulseMin(0.5); - _purpleOrbMeshPlaceholder->setPulseMax(1.0); - _purpleOrbMeshPlaceholder->setColorPulse(1.0); - _purpleOrbMeshPlaceholder->setIgnoreRayIntersection(true); - _purpleOrbMeshPlaceholder->setDrawInFront(false); - _purpleOrbMeshPlaceholderID = qApp->getOverlays().addOverlay(_purpleOrbMeshPlaceholder); - // Position focus - _purpleOrbMeshPlaceholder->setWorldOrientation(glm::quat(0.0f, 0.0f, 0.0f, 1.0)); - _purpleOrbMeshPlaceholder->setWorldPosition(getHead()->getPosition()); - _purpleOrbMeshPlaceholder->setDimensions(glm::vec3(0.5f, 0.5f, 0.5f)); - _purpleOrbMeshPlaceholder->setVisible(true); - } + createOrb(); } AvatarData::setSkeletonModelURL(skeletonModelURL); if (QThread::currentThread() == thread()) { @@ -1892,9 +1874,7 @@ void Avatar::processMaterials() { } } -void Avatar::updateOrbPosition() { - _purpleOrbMeshPlaceholder->setWorldPosition(getHead()->getPosition()); -} + scriptable::ScriptableModelBase Avatar::getScriptableModel() { if (!_skeletonModel || !_skeletonModel->isLoaded()) { diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index e4052865dd..964ce91a30 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -23,29 +23,34 @@ #include #include - #include "Head.h" #include "SkeletonModel.h" #include "Rig.h" #include "../../interface/src/ui/overlays/Overlays.h" #include "../../interface/src/ui/overlays/Sphere3DOverlay.h" +#include "Logging.h" + #include namespace render { - template <> const ItemKey payloadGetKey(const AvatarSharedPointer& avatar); - template <> const Item::Bound payloadGetBound(const AvatarSharedPointer& avatar); - template <> void payloadRender(const AvatarSharedPointer& avatar, RenderArgs* args); - template <> uint32_t metaFetchMetaSubItems(const AvatarSharedPointer& avatar, ItemIDs& subItems); -} +template <> +const ItemKey payloadGetKey(const AvatarSharedPointer& avatar); +template <> +const Item::Bound payloadGetBound(const AvatarSharedPointer& avatar); +template <> +void payloadRender(const AvatarSharedPointer& avatar, RenderArgs* args); +template <> +uint32_t metaFetchMetaSubItems(const AvatarSharedPointer& avatar, ItemIDs& subItems); +} // namespace render static const float SCALING_RATIO = .05f; extern const float CHAT_MESSAGE_SCALE; extern const float CHAT_MESSAGE_HEIGHT; - -enum ScreenTintLayer { +enum ScreenTintLayer +{ SCREEN_TINT_BEFORE_LANDSCAPE = 0, SCREEN_TINT_BEFORE_AVATARS, SCREEN_TINT_BEFORE_MY_AVATAR, @@ -85,11 +90,9 @@ public: virtual void render(RenderArgs* renderArgs); - void addToScene(AvatarSharedPointer self, const render::ScenePointer& scene, - render::Transaction& transaction); + void addToScene(AvatarSharedPointer self, const render::ScenePointer& scene, render::Transaction& transaction); - void removeFromScene(AvatarSharedPointer self, const render::ScenePointer& scene, - render::Transaction& transaction); + void removeFromScene(AvatarSharedPointer self, const render::ScenePointer& scene, render::Transaction& transaction); void updateRenderItem(render::Transaction& transaction); @@ -112,6 +115,7 @@ public: float getLODDistance() const; virtual bool isMyAvatar() const override { return false; } + virtual void createOrb() { qCDebug(avatars_renderer) << "we are in create orb avatar.h"; } virtual QVector getJointRotations() const override; using AvatarData::getJointRotation; @@ -166,14 +170,18 @@ public: virtual void setAttachmentData(const QVector& attachmentData) override; void updateDisplayNameAlpha(bool showDisplayName); - virtual void setSessionDisplayName(const QString& sessionDisplayName) override { }; // no-op + virtual void setSessionDisplayName(const QString& sessionDisplayName) override{}; // no-op virtual int parseDataFromBuffer(const QByteArray& buffer) override; - static void renderJointConnectingCone( gpu::Batch& batch, glm::vec3 position1, glm::vec3 position2, - float radius1, float radius2, const glm::vec4& color); + static void renderJointConnectingCone(gpu::Batch& batch, + glm::vec3 position1, + glm::vec3 position2, + float radius1, + float radius2, + const glm::vec4& color); - virtual void applyCollision(const glm::vec3& contactPoint, const glm::vec3& penetration) { } + virtual void applyCollision(const glm::vec3& contactPoint, const glm::vec3& penetration) {} /**jsdoc * Set the offset applied to the current avatar. The offset adjusts the position that the avatar is rendered. For example, @@ -238,7 +246,7 @@ public: /// Scales a world space position vector relative to the avatar position and scale /// \param vector position to be scaled. Will store the result - void scaleVectorRelativeToPosition(glm::vec3 &positionToScale) const; + void scaleVectorRelativeToPosition(glm::vec3& positionToScale) const; void slamPosition(const glm::vec3& position); virtual void updateAttitude(const glm::quat& orientation) override; @@ -257,7 +265,6 @@ public: void setPositionViaScript(const glm::vec3& position) override; void setOrientationViaScript(const glm::quat& orientation) override; - /**jsdoc * @function MyAvatar.getParentID * @returns {Uuid} @@ -286,7 +293,6 @@ public: // This calls through to the SpatiallyNestable versions, but is here to expose these to JavaScript. Q_INVOKABLE virtual void setParentJointIndex(quint16 parentJointIndex) override; - /**jsdoc * Returns an array of joints, where each joint is an object containing name, index, and parentIndex fields. * @function MyAvatar.getSkeleton @@ -324,7 +330,8 @@ public: bool hasNewJointData() const { return _hasNewJointData; } float getBoundingRadius() const; - AABox getRenderBounds() const; // THis call is accessible from rendering thread only to report the bounding box of the avatar during the frame. + AABox getRenderBounds() + const; // THis call is accessible from rendering thread only to report the bounding box of the avatar during the frame. void addToScene(AvatarSharedPointer self, const render::ScenePointer& scene); void ensureInScene(AvatarSharedPointer self, const render::ScenePointer& scene); @@ -352,7 +359,6 @@ public: // not all subclasses of AvatarData have access to this data. virtual bool canMeasureEyeHeight() const override { return true; } - virtual float getModelScale() const { return _modelScale; } virtual void setModelScale(float scale) { _modelScale = scale; } virtual glm::vec3 scaleForChildren() const override { return glm::vec3(getModelScale()); } @@ -367,10 +373,10 @@ public: void removeMaterial(graphics::MaterialPointer material, const std::string& parentMaterialName) override; virtual scriptable::ScriptableModelBase getScriptableModel() override; - - void updateOrbPosition(); - std::shared_ptr _purpleOrbMeshPlaceholder{ nullptr }; - OverlayID _purpleOrbMeshPlaceholderID{ UNKNOWN_OVERLAY_ID }; + + //void updateOrbPosition(); + //std::shared_ptr _purpleOrbMeshPlaceholder{ nullptr }; + //OverlayID _purpleOrbMeshPlaceholderID{ UNKNOWN_OVERLAY_ID }; public slots: // FIXME - these should be migrated to use Pose data instead @@ -432,9 +438,13 @@ protected: float getUnscaledEyeHeightFromSkeleton() const; void buildUnscaledEyeHeightCache(); void clearUnscaledEyeHeightCache(); - virtual const QString& getSessionDisplayNameForTransport() const override { return _empty; } // Save a tiny bit of bandwidth. Mixer won't look at what we send. + virtual const QString& getSessionDisplayNameForTransport() const override { + return _empty; + } // Save a tiny bit of bandwidth. Mixer won't look at what we send. QString _empty{}; - virtual void maybeUpdateSessionDisplayNameFromTransport(const QString& sessionDisplayName) override { _sessionDisplayName = sessionDisplayName; } // don't use no-op setter! + virtual void maybeUpdateSessionDisplayNameFromTransport(const QString& sessionDisplayName) override { + _sessionDisplayName = sessionDisplayName; + } // don't use no-op setter! SkeletonModelPointer _skeletonModel; @@ -442,7 +452,7 @@ protected: void withValidJointIndicesCache(std::function const& worker) const; mutable QHash _modelJointIndicesCache; mutable QReadWriteLock _modelJointIndicesCacheLock; - mutable bool _modelJointsCached { false }; + mutable bool _modelJointsCached{ false }; glm::vec3 _skeletonOffset; std::vector> _attachmentModels; @@ -450,7 +460,7 @@ protected: std::vector> _attachmentsToRemove; std::vector> _attachmentsToDelete; - float _bodyYawDelta { 0.0f }; // degrees/sec + float _bodyYawDelta{ 0.0f }; // degrees/sec // These position histories and derivatives are in the world-frame. // The derivatives are the MEASURED results of all external and internal forces @@ -466,8 +476,8 @@ protected: glm::vec3 _angularAcceleration; glm::quat _lastOrientation; - glm::vec3 _worldUpDirection { Vectors::UP }; - bool _moving { false }; ///< set when position is changing + glm::vec3 _worldUpDirection{ Vectors::UP }; + bool _moving{ false }; ///< set when position is changing // protected methods... bool isLookingAtMe(AvatarSharedPointer avatar) const; @@ -493,10 +503,10 @@ protected: render::ItemID _renderItemID{ render::Item::INVALID_ITEM_ID }; - ThreadSafeValueCache _leftPalmPositionCache { glm::vec3() }; - ThreadSafeValueCache _leftPalmRotationCache { glm::quat() }; - ThreadSafeValueCache _rightPalmPositionCache { glm::vec3() }; - ThreadSafeValueCache _rightPalmRotationCache { glm::quat() }; + ThreadSafeValueCache _leftPalmPositionCache{ glm::vec3() }; + ThreadSafeValueCache _leftPalmRotationCache{ glm::quat() }; + ThreadSafeValueCache _rightPalmPositionCache{ glm::vec3() }; + ThreadSafeValueCache _rightPalmRotationCache{ glm::quat() }; // Some rate tracking support RateCounter<> _simulationRate; @@ -507,36 +517,36 @@ protected: protected: class AvatarEntityDataHash { public: - AvatarEntityDataHash(uint32_t h) : hash(h) {}; - uint32_t hash { 0 }; - bool success { false }; + AvatarEntityDataHash(uint32_t h) : hash(h){}; + uint32_t hash{ 0 }; + bool success{ false }; }; using MapOfAvatarEntityDataHashes = QMap; MapOfAvatarEntityDataHashes _avatarEntityDataHashes; - uint64_t _lastRenderUpdateTime { 0 }; - int _leftPointerGeometryID { 0 }; - int _rightPointerGeometryID { 0 }; - int _nameRectGeometryID { 0 }; - bool _initialized { false }; - bool _isLookAtTarget { false }; - bool _isAnimatingScale { false }; - bool _mustFadeIn { false }; - bool _isFading { false }; - bool _reconstructSoftEntitiesJointMap { false }; - float _modelScale { 1.0f }; + uint64_t _lastRenderUpdateTime{ 0 }; + int _leftPointerGeometryID{ 0 }; + int _rightPointerGeometryID{ 0 }; + int _nameRectGeometryID{ 0 }; + bool _initialized{ false }; + bool _isLookAtTarget{ false }; + bool _isAnimatingScale{ false }; + bool _mustFadeIn{ false }; + bool _isFading{ false }; + bool _reconstructSoftEntitiesJointMap{ false }; + float _modelScale{ 1.0f }; static int _jointConesID; int _voiceSphereID; - AvatarPhysicsCallback _physicsCallback { nullptr }; + AvatarPhysicsCallback _physicsCallback{ nullptr }; - float _displayNameTargetAlpha { 1.0f }; - float _displayNameAlpha { 1.0f }; + float _displayNameTargetAlpha{ 1.0f }; + float _displayNameAlpha{ 1.0f }; - ThreadSafeValueCache _unscaledEyeHeightCache { DEFAULT_AVATAR_EYE_HEIGHT }; + ThreadSafeValueCache _unscaledEyeHeightCache{ DEFAULT_AVATAR_EYE_HEIGHT }; std::unordered_map _materials; std::mutex _materialsLock; @@ -552,4 +562,4 @@ protected: static const float ATTACHMENT_LOADING_PRIORITY; }; -#endif // hifi_Avatar_h +#endif // hifi_Avatar_h diff --git a/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.cpp deleted file mode 100644 index a6c69d24f6..0000000000 --- a/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// -// Created by Bradley Austin Davis on 2017/04/27 -// Copyright 2013-2017 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#include "OtherAvatar.h" -#include "../../interface/src/Application.h" - -OtherAvatar::OtherAvatar(QThread* thread) : Avatar(thread) { - // give the pointer to our head to inherited _headData variable from AvatarData - _headData = new Head(this); - _skeletonModel = std::make_shared(this, nullptr); - _skeletonModel->setLoadingPriority(OTHERAVATAR_LOADING_PRIORITY); - connect(_skeletonModel.get(), &Model::setURLFinished, this, &Avatar::setModelURLFinished); - connect(_skeletonModel.get(), &Model::rigReady, this, &Avatar::rigReady); - connect(_skeletonModel.get(), &Model::rigReset, this, &Avatar::rigReset); - - //add the purple orb - - if (_purpleOrbMeshPlaceholderID == UNKNOWN_OVERLAY_ID || !qApp->getOverlays().isAddedOverlay(_purpleOrbMeshPlaceholderID)) { - _purpleOrbMeshPlaceholder = std::make_shared(); - _purpleOrbMeshPlaceholder->setAlpha(1.0f); - _purpleOrbMeshPlaceholder->setColor({ 0xFF, 0x00, 0xFF }); - _purpleOrbMeshPlaceholder->setIsSolid(false); - _purpleOrbMeshPlaceholder->setPulseMin(0.5); - _purpleOrbMeshPlaceholder->setPulseMax(1.0); - _purpleOrbMeshPlaceholder->setColorPulse(1.0); - _purpleOrbMeshPlaceholder->setIgnoreRayIntersection(true); - _purpleOrbMeshPlaceholder->setDrawInFront(false); - _purpleOrbMeshPlaceholderID = qApp->getOverlays().addOverlay(_purpleOrbMeshPlaceholder); - // Position focus - _purpleOrbMeshPlaceholder->setWorldOrientation(glm::quat(0.0f, 0.0f, 0.0f, 1.0)); - _purpleOrbMeshPlaceholder->setWorldPosition(glm::vec3(476.0f, 500.0f, 493.0f)); - _purpleOrbMeshPlaceholder->setDimensions(glm::vec3(0.5f, 0.5f, 0.5f)); - _purpleOrbMeshPlaceholder->setVisible(true); - } - -} diff --git a/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.h b/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.h deleted file mode 100644 index df09d7fd99..0000000000 --- a/libraries/avatars-renderer/src/avatars-renderer/OtherAvatar.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Created by Bradley Austin Davis on 2017/04/27 -// Copyright 2013-2017 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#ifndef hifi_OtherAvatar_h -#define hifi_OtherAvatar_h - -#include "Avatar.h" - -class OtherAvatar : public Avatar { -public: - explicit OtherAvatar(QThread* thread); - virtual void instantiableAvatar() override {}; -}; - -#endif // hifi_OtherAvatar_h From a89c2ea734867763a692cb6abd6004ddb4c063ce Mon Sep 17 00:00:00 2001 From: amantley Date: Tue, 26 Jun 2018 16:40:51 -0700 Subject: [PATCH 05/13] removed crust --- interface/src/avatar/AvatarManager.cpp | 12 ++----- interface/src/avatar/AvatarManager.h | 2 -- interface/src/avatar/OtherAvatar.cpp | 4 +-- .../src/avatars-renderer/Avatar.cpp | 7 ++-- .../src/avatars-renderer/Avatar.h | 35 +++++++++---------- 5 files changed, 23 insertions(+), 37 deletions(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 1304fa84a9..d1fcfc7d4b 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -201,7 +201,7 @@ void AvatarManager::updateOtherAvatars(float deltaTime) { } else { otherAvatar->updateOrbPosition(); } - + bool ignoring = DependencyManager::get()->isPersonalMutingNode(avatar->getID()); if (ignoring) { sortedAvatars.pop(); @@ -326,10 +326,8 @@ void AvatarManager::simulateAvatarFades(float deltaTime) { } AvatarSharedPointer AvatarManager::newSharedAvatar() { - - auto newOtherAvatar = AvatarSharedPointer(new OtherAvatar(qApp->thread()), [](OtherAvatar* ptr) { ptr->deleteLater(); }); - return newOtherAvatar; + return AvatarSharedPointer(new OtherAvatar(qApp->thread()), [](OtherAvatar* ptr) { ptr->deleteLater(); }); } void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar, KillAvatarReason removalReason) { @@ -624,8 +622,4 @@ void AvatarManager::setAvatarSortCoefficient(const QString& name, const QScriptV packet->writePrimitive(AvatarData::_avatarSortCoefficientAge); DependencyManager::get()->broadcastToNodes(std::move(packet), NodeSet() << NodeType::AvatarMixer); } -} - - - - +} \ No newline at end of file diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index 600da65b85..6a3d0355f6 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -158,8 +158,6 @@ public: float getMyAvatarSendRate() const { return _myAvatarSendRate.rate(); } - void removeOrb(OverlayID orbID); - public slots: /**jsdoc diff --git a/interface/src/avatar/OtherAvatar.cpp b/interface/src/avatar/OtherAvatar.cpp index e6c3553b1e..035708b71d 100644 --- a/interface/src/avatar/OtherAvatar.cpp +++ b/interface/src/avatar/OtherAvatar.cpp @@ -7,7 +7,7 @@ // #include "OtherAvatar.h" -#include "../../interface/src/Application.h" +#include "Application.h" OtherAvatar::OtherAvatar(QThread* thread) : Avatar(thread) { // give the pointer to our head to inherited _headData variable from AvatarData @@ -20,8 +20,6 @@ OtherAvatar::OtherAvatar(QThread* thread) : Avatar(thread) { //add the purple orb createOrb(); - - } void OtherAvatar::removeOrb() { diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 64545f326d..0381168407 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -33,8 +33,7 @@ #include #include #include "ModelEntityItem.h" -#include "RenderableModelEntityItem.h" -#include "../../interface/src/Application.h" +#include "RenderableModelEntityItem.h" #include @@ -1339,9 +1338,9 @@ void Avatar::scaleVectorRelativeToPosition(glm::vec3 &positionToScale) const { } void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { - if (!isMyAvatar()) { + if (!isMyAvatar()) { createOrb(); - } + } AvatarData::setSkeletonModelURL(skeletonModelURL); if (QThread::currentThread() == thread()) { _skeletonModel->setURL(_skeletonModelURL); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index 964ce91a30..d3f4e7d327 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -29,28 +29,24 @@ #include "../../interface/src/ui/overlays/Overlays.h" #include "../../interface/src/ui/overlays/Sphere3DOverlay.h" -#include "Logging.h" #include namespace render { -template <> -const ItemKey payloadGetKey(const AvatarSharedPointer& avatar); -template <> -const Item::Bound payloadGetBound(const AvatarSharedPointer& avatar); -template <> -void payloadRender(const AvatarSharedPointer& avatar, RenderArgs* args); -template <> -uint32_t metaFetchMetaSubItems(const AvatarSharedPointer& avatar, ItemIDs& subItems); -} // namespace render + template <> const ItemKey payloadGetKey(const AvatarSharedPointer& avatar); + template <> const Item::Bound payloadGetBound(const AvatarSharedPointer& avatar); + template <> void payloadRender(const AvatarSharedPointer& avatar, RenderArgs* args); + template <> uint32_t metaFetchMetaSubItems(const AvatarSharedPointer& avatar, ItemIDs& subItems); +} + +// namespace render static const float SCALING_RATIO = .05f; extern const float CHAT_MESSAGE_SCALE; extern const float CHAT_MESSAGE_HEIGHT; -enum ScreenTintLayer -{ +enum ScreenTintLayer { SCREEN_TINT_BEFORE_LANDSCAPE = 0, SCREEN_TINT_BEFORE_AVATARS, SCREEN_TINT_BEFORE_MY_AVATAR, @@ -90,9 +86,11 @@ public: virtual void render(RenderArgs* renderArgs); - void addToScene(AvatarSharedPointer self, const render::ScenePointer& scene, render::Transaction& transaction); + void addToScene(AvatarSharedPointer self, const render::ScenePointer& scene, + render::Transaction& transaction); - void removeFromScene(AvatarSharedPointer self, const render::ScenePointer& scene, render::Transaction& transaction); + void removeFromScene(AvatarSharedPointer self, const render::ScenePointer& scene, + render::Transaction& transaction); void updateRenderItem(render::Transaction& transaction); @@ -115,7 +113,7 @@ public: float getLODDistance() const; virtual bool isMyAvatar() const override { return false; } - virtual void createOrb() { qCDebug(avatars_renderer) << "we are in create orb avatar.h"; } + virtual void createOrb() {} virtual QVector getJointRotations() const override; using AvatarData::getJointRotation; @@ -170,7 +168,7 @@ public: virtual void setAttachmentData(const QVector& attachmentData) override; void updateDisplayNameAlpha(bool showDisplayName); - virtual void setSessionDisplayName(const QString& sessionDisplayName) override{}; // no-op + virtual void setSessionDisplayName(const QString& sessionDisplayName) override { }; // no-op virtual int parseDataFromBuffer(const QByteArray& buffer) override; @@ -181,7 +179,7 @@ public: float radius2, const glm::vec4& color); - virtual void applyCollision(const glm::vec3& contactPoint, const glm::vec3& penetration) {} + virtual void applyCollision(const glm::vec3& contactPoint, const glm::vec3& penetration) { } /**jsdoc * Set the offset applied to the current avatar. The offset adjusts the position that the avatar is rendered. For example, @@ -330,8 +328,7 @@ public: bool hasNewJointData() const { return _hasNewJointData; } float getBoundingRadius() const; - AABox getRenderBounds() - const; // THis call is accessible from rendering thread only to report the bounding box of the avatar during the frame. + AABox getRenderBounds() const; // THis call is accessible from rendering thread only to report the bounding box of the avatar during the frame. void addToScene(AvatarSharedPointer self, const render::ScenePointer& scene); void ensureInScene(AvatarSharedPointer self, const render::ScenePointer& scene); From 1fcaf16b0c31c85971ff3de91c003862ab66b1be Mon Sep 17 00:00:00 2001 From: amantley Date: Tue, 26 Jun 2018 17:07:55 -0700 Subject: [PATCH 06/13] removed editor auto format errors --- .../src/avatars-renderer/Avatar.cpp | 4 +- .../src/avatars-renderer/Avatar.h | 88 ++++++++----------- libraries/avatars/src/AvatarData.h | 2 - 3 files changed, 38 insertions(+), 56 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 0381168407..843235c0e1 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -33,7 +33,7 @@ #include #include #include "ModelEntityItem.h" -#include "RenderableModelEntityItem.h" +#include "RenderableModelEntityItem.h" #include @@ -1873,8 +1873,6 @@ void Avatar::processMaterials() { } } - - scriptable::ScriptableModelBase Avatar::getScriptableModel() { if (!_skeletonModel || !_skeletonModel->isLoaded()) { return scriptable::ScriptableModelBase(); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index d3f4e7d327..1e80e3d2cf 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -26,10 +26,6 @@ #include "Head.h" #include "SkeletonModel.h" #include "Rig.h" -#include "../../interface/src/ui/overlays/Overlays.h" -#include "../../interface/src/ui/overlays/Sphere3DOverlay.h" - - #include namespace render { @@ -37,9 +33,7 @@ namespace render { template <> const Item::Bound payloadGetBound(const AvatarSharedPointer& avatar); template <> void payloadRender(const AvatarSharedPointer& avatar, RenderArgs* args); template <> uint32_t metaFetchMetaSubItems(const AvatarSharedPointer& avatar, ItemIDs& subItems); -} - -// namespace render +} static const float SCALING_RATIO = .05f; @@ -90,7 +84,7 @@ public: render::Transaction& transaction); void removeFromScene(AvatarSharedPointer self, const render::ScenePointer& scene, - render::Transaction& transaction); + render::Transaction& transaction); void updateRenderItem(render::Transaction& transaction); @@ -113,7 +107,7 @@ public: float getLODDistance() const; virtual bool isMyAvatar() const override { return false; } - virtual void createOrb() {} + virtual void createOrb() { } virtual QVector getJointRotations() const override; using AvatarData::getJointRotation; @@ -168,16 +162,12 @@ public: virtual void setAttachmentData(const QVector& attachmentData) override; void updateDisplayNameAlpha(bool showDisplayName); - virtual void setSessionDisplayName(const QString& sessionDisplayName) override { }; // no-op + virtual void setSessionDisplayName(const QString& sessionDisplayName) override { }; // no-op virtual int parseDataFromBuffer(const QByteArray& buffer) override; - static void renderJointConnectingCone(gpu::Batch& batch, - glm::vec3 position1, - glm::vec3 position2, - float radius1, - float radius2, - const glm::vec4& color); + static void renderJointConnectingCone(gpu::Batch& batch, glm::vec3 position1, glm::vec3 position2, + float radius1, float radius2, const glm::vec4& color); virtual void applyCollision(const glm::vec3& contactPoint, const glm::vec3& penetration) { } @@ -246,7 +236,7 @@ public: /// \param vector position to be scaled. Will store the result void scaleVectorRelativeToPosition(glm::vec3& positionToScale) const; - void slamPosition(const glm::vec3& position); + void slamPosition(const glm::vec3 &position); virtual void updateAttitude(const glm::quat& orientation) override; // Call this when updating Avatar position with a delta. This will allow us to @@ -328,7 +318,7 @@ public: bool hasNewJointData() const { return _hasNewJointData; } float getBoundingRadius() const; - AABox getRenderBounds() const; // THis call is accessible from rendering thread only to report the bounding box of the avatar during the frame. + AABox getRenderBounds() const; // THis call is accessible from rendering thread only to report the bounding box of the avatar during the frame. void addToScene(AvatarSharedPointer self, const render::ScenePointer& scene); void ensureInScene(AvatarSharedPointer self, const render::ScenePointer& scene); @@ -435,13 +425,9 @@ protected: float getUnscaledEyeHeightFromSkeleton() const; void buildUnscaledEyeHeightCache(); void clearUnscaledEyeHeightCache(); - virtual const QString& getSessionDisplayNameForTransport() const override { - return _empty; - } // Save a tiny bit of bandwidth. Mixer won't look at what we send. + virtual const QString& getSessionDisplayNameForTransport() const override { return _empty; } // Save a tiny bit of bandwidth. Mixer won't look at what we send. QString _empty{}; - virtual void maybeUpdateSessionDisplayNameFromTransport(const QString& sessionDisplayName) override { - _sessionDisplayName = sessionDisplayName; - } // don't use no-op setter! + virtual void maybeUpdateSessionDisplayNameFromTransport(const QString& sessionDisplayName) override { _sessionDisplayName = sessionDisplayName; } // don't use no-op setter! SkeletonModelPointer _skeletonModel; @@ -449,7 +435,7 @@ protected: void withValidJointIndicesCache(std::function const& worker) const; mutable QHash _modelJointIndicesCache; mutable QReadWriteLock _modelJointIndicesCacheLock; - mutable bool _modelJointsCached{ false }; + mutable bool _modelJointsCached { false }; glm::vec3 _skeletonOffset; std::vector> _attachmentModels; @@ -457,7 +443,7 @@ protected: std::vector> _attachmentsToRemove; std::vector> _attachmentsToDelete; - float _bodyYawDelta{ 0.0f }; // degrees/sec + float _bodyYawDelta { 0.0f }; // degrees/sec // These position histories and derivatives are in the world-frame. // The derivatives are the MEASURED results of all external and internal forces @@ -473,8 +459,8 @@ protected: glm::vec3 _angularAcceleration; glm::quat _lastOrientation; - glm::vec3 _worldUpDirection{ Vectors::UP }; - bool _moving{ false }; ///< set when position is changing + glm::vec3 _worldUpDirection { Vectors::UP }; + bool _moving { false }; ///< set when position is changing // protected methods... bool isLookingAtMe(AvatarSharedPointer avatar) const; @@ -500,10 +486,10 @@ protected: render::ItemID _renderItemID{ render::Item::INVALID_ITEM_ID }; - ThreadSafeValueCache _leftPalmPositionCache{ glm::vec3() }; - ThreadSafeValueCache _leftPalmRotationCache{ glm::quat() }; - ThreadSafeValueCache _rightPalmPositionCache{ glm::vec3() }; - ThreadSafeValueCache _rightPalmRotationCache{ glm::quat() }; + ThreadSafeValueCache _leftPalmPositionCache { glm::vec3() }; + ThreadSafeValueCache _leftPalmRotationCache { glm::quat() }; + ThreadSafeValueCache _rightPalmPositionCache { glm::vec3() }; + ThreadSafeValueCache _rightPalmRotationCache { glm::quat() }; // Some rate tracking support RateCounter<> _simulationRate; @@ -514,36 +500,36 @@ protected: protected: class AvatarEntityDataHash { public: - AvatarEntityDataHash(uint32_t h) : hash(h){}; - uint32_t hash{ 0 }; - bool success{ false }; + AvatarEntityDataHash(uint32_t h) : hash(h) {}; + uint32_t hash { 0 }; + bool success { false }; }; using MapOfAvatarEntityDataHashes = QMap; MapOfAvatarEntityDataHashes _avatarEntityDataHashes; - uint64_t _lastRenderUpdateTime{ 0 }; - int _leftPointerGeometryID{ 0 }; - int _rightPointerGeometryID{ 0 }; - int _nameRectGeometryID{ 0 }; - bool _initialized{ false }; - bool _isLookAtTarget{ false }; - bool _isAnimatingScale{ false }; - bool _mustFadeIn{ false }; - bool _isFading{ false }; - bool _reconstructSoftEntitiesJointMap{ false }; - float _modelScale{ 1.0f }; + uint64_t _lastRenderUpdateTime { 0 }; + int _leftPointerGeometryID { 0 }; + int _rightPointerGeometryID { 0 }; + int _nameRectGeometryID { 0 }; + bool _initialized { false }; + bool _isLookAtTarget { false }; + bool _isAnimatingScale { false }; + bool _mustFadeIn { false }; + bool _isFading { false }; + bool _reconstructSoftEntitiesJointMap { false }; + float _modelScale { 1.0f }; static int _jointConesID; int _voiceSphereID; - AvatarPhysicsCallback _physicsCallback{ nullptr }; + AvatarPhysicsCallback _physicsCallback { nullptr }; - float _displayNameTargetAlpha{ 1.0f }; - float _displayNameAlpha{ 1.0f }; + float _displayNameTargetAlpha { 1.0f }; + float _displayNameAlpha { 1.0f }; - ThreadSafeValueCache _unscaledEyeHeightCache{ DEFAULT_AVATAR_EYE_HEIGHT }; + ThreadSafeValueCache _unscaledEyeHeightCache { DEFAULT_AVATAR_EYE_HEIGHT }; std::unordered_map _materials; std::mutex _materialsLock; @@ -559,4 +545,4 @@ protected: static const float ATTACHMENT_LOADING_PRIORITY; }; -#endif // hifi_Avatar_h +#endif // hifi_Avatar_h diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 2d150609d1..51b3257ba2 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -55,8 +55,6 @@ #include "PathUtils.h" #include -//#include "Overlays.h" -//#include "Sphere3DOverlay.h" using AvatarSharedPointer = std::shared_ptr; using AvatarWeakPointer = std::weak_ptr; From ea76def2b58ce03c8564cefb016d7cf01ad0fd31 Mon Sep 17 00:00:00 2001 From: amantley Date: Tue, 26 Jun 2018 17:18:35 -0700 Subject: [PATCH 07/13] more white space errors --- .../avatars-renderer/src/avatars-renderer/Avatar.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index 1e80e3d2cf..abe7e4b620 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -166,7 +166,7 @@ public: virtual int parseDataFromBuffer(const QByteArray& buffer) override; - static void renderJointConnectingCone(gpu::Batch& batch, glm::vec3 position1, glm::vec3 position2, + static void renderJointConnectingCone(gpu::Batch& batch, glm::vec3 position1, glm::vec3 position2, float radius1, float radius2, const glm::vec4& color); virtual void applyCollision(const glm::vec3& contactPoint, const glm::vec3& penetration) { } @@ -234,9 +234,9 @@ public: /// Scales a world space position vector relative to the avatar position and scale /// \param vector position to be scaled. Will store the result - void scaleVectorRelativeToPosition(glm::vec3& positionToScale) const; + void scaleVectorRelativeToPosition(glm::vec3 &positionToScale) const; - void slamPosition(const glm::vec3 &position); + void slamPosition(const glm::vec3& position); virtual void updateAttitude(const glm::quat& orientation) override; // Call this when updating Avatar position with a delta. This will allow us to @@ -427,7 +427,7 @@ protected: void clearUnscaledEyeHeightCache(); virtual const QString& getSessionDisplayNameForTransport() const override { return _empty; } // Save a tiny bit of bandwidth. Mixer won't look at what we send. QString _empty{}; - virtual void maybeUpdateSessionDisplayNameFromTransport(const QString& sessionDisplayName) override { _sessionDisplayName = sessionDisplayName; } // don't use no-op setter! + virtual void maybeUpdateSessionDisplayNameFromTransport(const QString& sessionDisplayName) override { _sessionDisplayName = sessionDisplayName; } // don't use no-op setter! SkeletonModelPointer _skeletonModel; @@ -460,7 +460,7 @@ protected: glm::quat _lastOrientation; glm::vec3 _worldUpDirection { Vectors::UP }; - bool _moving { false }; ///< set when position is changing + bool _moving { false }; ///< set when position is changing // protected methods... bool isLookingAtMe(AvatarSharedPointer avatar) const; From 8b13905d6c158ca743fd86f3c2b30ce9bf5dc9ba Mon Sep 17 00:00:00 2001 From: amantley Date: Tue, 26 Jun 2018 17:43:45 -0700 Subject: [PATCH 08/13] final final final coding standards --- interface/src/avatar/AvatarManager.cpp | 3 +-- interface/src/avatar/OtherAvatar.cpp | 6 ++---- interface/src/avatar/OtherAvatar.h | 8 +++++--- libraries/avatars-renderer/src/avatars-renderer/Avatar.h | 5 +---- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index d1fcfc7d4b..094a49fd44 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -194,7 +194,7 @@ void AvatarManager::updateOtherAvatars(float deltaTime) { const auto avatar = std::static_pointer_cast(sortData.getAvatar()); const auto otherAvatar = std::static_pointer_cast(sortData.getAvatar()); - //if the geometry is loaded then turn off the orb + //if the geometry is loaded then turn off the orb if (avatar->getSkeletonModel()->isLoaded()) { //remove the orb if it is there otherAvatar->removeOrb(); @@ -326,7 +326,6 @@ void AvatarManager::simulateAvatarFades(float deltaTime) { } AvatarSharedPointer AvatarManager::newSharedAvatar() { - return AvatarSharedPointer(new OtherAvatar(qApp->thread()), [](OtherAvatar* ptr) { ptr->deleteLater(); }); } diff --git a/interface/src/avatar/OtherAvatar.cpp b/interface/src/avatar/OtherAvatar.cpp index 035708b71d..7ef4269b96 100644 --- a/interface/src/avatar/OtherAvatar.cpp +++ b/interface/src/avatar/OtherAvatar.cpp @@ -18,14 +18,13 @@ OtherAvatar::OtherAvatar(QThread* thread) : Avatar(thread) { connect(_skeletonModel.get(), &Model::rigReady, this, &Avatar::rigReady); connect(_skeletonModel.get(), &Model::rigReset, this, &Avatar::rigReset); - //add the purple orb + // add the purple orb createOrb(); } void OtherAvatar::removeOrb() { if (qApp->getOverlays().isAddedOverlay(_otherAvatarOrbMeshPlaceholderID)) { qApp->getOverlays().deleteOverlay(_otherAvatarOrbMeshPlaceholderID); - //qCWarning(avatars_renderer) << "remove the purple orb***************************"; } } @@ -34,7 +33,6 @@ void OtherAvatar::updateOrbPosition() { } void OtherAvatar::createOrb() { - qCDebug(interfaceapp) << "we are in create orb otherAvatar.h"; if (_otherAvatarOrbMeshPlaceholderID == UNKNOWN_OVERLAY_ID || !qApp->getOverlays().isAddedOverlay(_otherAvatarOrbMeshPlaceholderID)) { _otherAvatarOrbMeshPlaceholder = std::make_shared(); @@ -49,7 +47,7 @@ void OtherAvatar::createOrb() { _otherAvatarOrbMeshPlaceholderID = qApp->getOverlays().addOverlay(_otherAvatarOrbMeshPlaceholder); // Position focus _otherAvatarOrbMeshPlaceholder->setWorldOrientation(glm::quat(0.0f, 0.0f, 0.0f, 1.0)); - _otherAvatarOrbMeshPlaceholder->setWorldPosition(glm::vec3(476.0f, 500.0f, 493.0f)); + _otherAvatarOrbMeshPlaceholder->setWorldPosition(getHead()->getPosition()); _otherAvatarOrbMeshPlaceholder->setDimensions(glm::vec3(0.5f, 0.5f, 0.5f)); _otherAvatarOrbMeshPlaceholder->setVisible(true); } diff --git a/interface/src/avatar/OtherAvatar.h b/interface/src/avatar/OtherAvatar.h index 707dd1fcc8..483f400bed 100644 --- a/interface/src/avatar/OtherAvatar.h +++ b/interface/src/avatar/OtherAvatar.h @@ -17,12 +17,14 @@ class OtherAvatar : public Avatar { public: explicit OtherAvatar(QThread* thread); - virtual void instantiableAvatar() override{}; + virtual void instantiableAvatar() override { }; void createOrb() override; void updateOrbPosition(); void removeOrb(); - std::shared_ptr _otherAvatarOrbMeshPlaceholder{ nullptr }; - OverlayID _otherAvatarOrbMeshPlaceholderID{ UNKNOWN_OVERLAY_ID }; + +protected: + std::shared_ptr _otherAvatarOrbMeshPlaceholder { nullptr }; + OverlayID _otherAvatarOrbMeshPlaceholderID { UNKNOWN_OVERLAY_ID }; }; #endif // hifi_OtherAvatar_h diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index abe7e4b620..8a0957075d 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -234,7 +234,7 @@ public: /// Scales a world space position vector relative to the avatar position and scale /// \param vector position to be scaled. Will store the result - void scaleVectorRelativeToPosition(glm::vec3 &positionToScale) const; + void scaleVectorRelativeToPosition(glm::vec3& positionToScale) const; void slamPosition(const glm::vec3& position); virtual void updateAttitude(const glm::quat& orientation) override; @@ -361,9 +361,6 @@ public: virtual scriptable::ScriptableModelBase getScriptableModel() override; - //void updateOrbPosition(); - //std::shared_ptr _purpleOrbMeshPlaceholder{ nullptr }; - //OverlayID _purpleOrbMeshPlaceholderID{ UNKNOWN_OVERLAY_ID }; public slots: // FIXME - these should be migrated to use Pose data instead From 39edc21423259709e63c163a6b2e1a75128e6aad Mon Sep 17 00:00:00 2001 From: amantley Date: Tue, 26 Jun 2018 17:47:36 -0700 Subject: [PATCH 09/13] spaced comment fixed --- interface/src/avatar/AvatarManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 094a49fd44..e924f291b8 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -194,9 +194,9 @@ void AvatarManager::updateOtherAvatars(float deltaTime) { const auto avatar = std::static_pointer_cast(sortData.getAvatar()); const auto otherAvatar = std::static_pointer_cast(sortData.getAvatar()); - //if the geometry is loaded then turn off the orb + // if the geometry is loaded then turn off the orb if (avatar->getSkeletonModel()->isLoaded()) { - //remove the orb if it is there + // remove the orb if it is there otherAvatar->removeOrb(); } else { otherAvatar->updateOrbPosition(); From eba4a273296ed78082af2af1a5cc9b978e0bbfe7 Mon Sep 17 00:00:00 2001 From: Angus Antley Date: Wed, 27 Jun 2018 05:59:53 +0100 Subject: [PATCH 10/13] added newline to the end of AvatarManager.cpp --- interface/src/avatar/AvatarManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index e924f291b8..8a25c21946 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -621,4 +621,4 @@ void AvatarManager::setAvatarSortCoefficient(const QString& name, const QScriptV packet->writePrimitive(AvatarData::_avatarSortCoefficientAge); DependencyManager::get()->broadcastToNodes(std::move(packet), NodeSet() << NodeType::AvatarMixer); } -} \ No newline at end of file +} From 1804422df0d2d622374006818d3d66356e146ff2 Mon Sep 17 00:00:00 2001 From: amantley Date: Wed, 27 Jun 2018 11:15:33 -0700 Subject: [PATCH 11/13] remove orb in the otherAvatar destructor, and check _otherAvatarOrbMeshPlaceholder pointer before updating the position --- interface/src/avatar/OtherAvatar.cpp | 8 +++++++- interface/src/avatar/OtherAvatar.h | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/interface/src/avatar/OtherAvatar.cpp b/interface/src/avatar/OtherAvatar.cpp index 7ef4269b96..5e51658128 100644 --- a/interface/src/avatar/OtherAvatar.cpp +++ b/interface/src/avatar/OtherAvatar.cpp @@ -22,6 +22,10 @@ OtherAvatar::OtherAvatar(QThread* thread) : Avatar(thread) { createOrb(); } +OtherAvatar::~OtherAvatar() { + removeOrb(); +} + void OtherAvatar::removeOrb() { if (qApp->getOverlays().isAddedOverlay(_otherAvatarOrbMeshPlaceholderID)) { qApp->getOverlays().deleteOverlay(_otherAvatarOrbMeshPlaceholderID); @@ -29,7 +33,9 @@ void OtherAvatar::removeOrb() { } void OtherAvatar::updateOrbPosition() { - _otherAvatarOrbMeshPlaceholder->setWorldPosition(getHead()->getPosition()); + if (_otherAvatarOrbMeshPlaceholder != nullptr) { + _otherAvatarOrbMeshPlaceholder->setWorldPosition(getHead()->getPosition()); + } } void OtherAvatar::createOrb() { diff --git a/interface/src/avatar/OtherAvatar.h b/interface/src/avatar/OtherAvatar.h index 483f400bed..e6f5b9c433 100644 --- a/interface/src/avatar/OtherAvatar.h +++ b/interface/src/avatar/OtherAvatar.h @@ -17,6 +17,8 @@ class OtherAvatar : public Avatar { public: explicit OtherAvatar(QThread* thread); + ~OtherAvatar(); + virtual void instantiableAvatar() override { }; void createOrb() override; void updateOrbPosition(); From 99ff5f9140ae8b562567c2a55ea8296ac523c066 Mon Sep 17 00:00:00 2001 From: amantley Date: Wed, 27 Jun 2018 11:59:53 -0700 Subject: [PATCH 12/13] made the Avatar destructor virtual to ensure that MyAvatar and OtherAvatar cleanup correctly --- interface/src/avatar/MyAvatar.h | 2 +- interface/src/avatar/OtherAvatar.h | 2 +- libraries/avatars-renderer/src/avatars-renderer/Avatar.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 1a6feb142a..212abd6bde 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -250,7 +250,7 @@ public: Q_ENUM(DriveKeys) explicit MyAvatar(QThread* thread); - ~MyAvatar(); + ~MyAvatar() override; void instantiableAvatar() override {}; void registerMetaTypes(ScriptEnginePointer engine); diff --git a/interface/src/avatar/OtherAvatar.h b/interface/src/avatar/OtherAvatar.h index e6f5b9c433..f7ad0ed669 100644 --- a/interface/src/avatar/OtherAvatar.h +++ b/interface/src/avatar/OtherAvatar.h @@ -17,7 +17,7 @@ class OtherAvatar : public Avatar { public: explicit OtherAvatar(QThread* thread); - ~OtherAvatar(); + ~OtherAvatar() override; virtual void instantiableAvatar() override { }; void createOrb() override; diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index 8a0957075d..bb9d6d8cc9 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -67,7 +67,7 @@ public: static void setShowNamesAboveHeads(bool show); explicit Avatar(QThread* thread); - ~Avatar(); + virtual ~Avatar(); virtual void instantiableAvatar() = 0; From 205cd44a49b7d9b36dfed661b384e7982656bd94 Mon Sep 17 00:00:00 2001 From: amantley Date: Wed, 27 Jun 2018 14:31:33 -0700 Subject: [PATCH 13/13] removed override keyword from OtherAvatar and MyAvatar destructors, also added the virtual keyword to the createOrb virtual method in OtherAvatar --- interface/src/avatar/MyAvatar.h | 2 +- interface/src/avatar/OtherAvatar.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 212abd6bde..0a2f6f8354 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -250,7 +250,7 @@ public: Q_ENUM(DriveKeys) explicit MyAvatar(QThread* thread); - ~MyAvatar() override; + virtual ~MyAvatar(); void instantiableAvatar() override {}; void registerMetaTypes(ScriptEnginePointer engine); diff --git a/interface/src/avatar/OtherAvatar.h b/interface/src/avatar/OtherAvatar.h index f7ad0ed669..f33952b78b 100644 --- a/interface/src/avatar/OtherAvatar.h +++ b/interface/src/avatar/OtherAvatar.h @@ -17,10 +17,10 @@ class OtherAvatar : public Avatar { public: explicit OtherAvatar(QThread* thread); - ~OtherAvatar() override; + virtual ~OtherAvatar(); virtual void instantiableAvatar() override { }; - void createOrb() override; + virtual void createOrb() override; void updateOrbPosition(); void removeOrb();