From b8dea4b86955781f6b1a7d641a6513bdd8223be1 Mon Sep 17 00:00:00 2001 From: Angus Antley Date: Tue, 26 Jun 2018 06:27:01 +0100 Subject: [PATCH 01/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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(); From ac6fcf092c52ab42d50c4d054bbaf512f305063d Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 27 Jun 2018 16:57:57 -0700 Subject: [PATCH 14/15] Fix memory corruption via lambdas that capture local variables by reference. The lambdas in ScriptEngine::fetchModuleSource() were referencing local stack variables by reference. This could lead to un-expected results including memory corruption. To workaround this issue the QTimer and QEventLoop variables are allocated on the heap and held onto by a shared_ptr. This shared_ptr is passed to the lambda. This will not result in cycles and should result in the QTimer and QEventLoop being destroyed when the BatchLoader object they are connected to is deleted. --- libraries/script-engine/src/ScriptEngine.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index f8c99b192f..99c02ba1f6 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1639,22 +1639,24 @@ QVariantMap ScriptEngine::fetchModuleSource(const QString& modulePath, const boo loader->start(MAX_RETRIES); if (!loader->isFinished()) { - QTimer monitor; - QEventLoop loop; - QObject::connect(loader, &BatchLoader::finished, this, [&monitor, &loop]{ - monitor.stop(); - loop.quit(); + // This lambda can get called AFTER this local scope has completed. + // This is why we pass smart ptrs to the lambda instead of references to local variables. + auto monitor = std::make_shared(); + auto loop = std::make_shared(); + QObject::connect(loader, &BatchLoader::finished, this, [monitor, loop] { + monitor->stop(); + loop->quit(); }); // this helps detect the case where stop() is invoked during the download // but not seen in time to abort processing in onload()... - connect(&monitor, &QTimer::timeout, this, [this, &loop]{ + connect(monitor.get(), &QTimer::timeout, this, [this, loop] { if (isStopping()) { - loop.exit(-1); + loop->exit(-1); } }); - monitor.start(500); - loop.exec(); + monitor->start(500); + loop->exec(); } loader->deleteLater(); return req; From 2d27de12bd906344244994fa686561a294035216 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 28 Jun 2018 12:06:31 -0700 Subject: [PATCH 15/15] Fix MS14743: Change SNAP prints such that they don't fall through the floor --- scripts/system/snapshot.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index f16dd04715..e265ddb621 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -285,6 +285,7 @@ function printToPolaroid(image_url) { var polaroid_url = image_url; var model_pos = Vec3.sum(MyAvatar.position, Vec3.multiply(1.25, Quat.getForward(MyAvatar.orientation))); + model_pos.y += 0.2; // Print a bit closer to the head var model_q1 = MyAvatar.orientation; var model_q2 = Quat.angleAxis(90, Quat.getRight(model_q1)); @@ -294,11 +295,11 @@ function printToPolaroid(image_url) { "type": 'Model', "shapeType": 'box', - "name": "New Snapshot", - "description": "Printed from Snaps", + "name": "Snapshot by " + MyAvatar.sessionDisplayName, + "description": "Printed from SNAP app", "modelURL": POLAROID_MODEL_URL, - "dimensions": { "x": 0.5667, "y": 0.0212, "z": 0.4176 }, + "dimensions": { "x": 0.5667, "y": 0.042, "z": 0.4176 }, "position": model_pos, "rotation": model_rot, @@ -306,9 +307,9 @@ function printToPolaroid(image_url) { "density": 200, "restitution": 0.15, - "gravity": { "x": 0, "y": -4.5, "z": 0 }, + "gravity": { "x": 0, "y": -2.5, "z": 0 }, - "velocity": { "x": 0, "y": 3.5, "z": 0 }, + "velocity": { "x": 0, "y": 1.95, "z": 0 }, "angularVelocity": { "x": -1.0, "y": 0, "z": -1.3 }, "dynamic": true,