From f2a70bf27549aade51f57aa90be96459d0f7de6b Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 25 Feb 2014 13:38:20 -0800 Subject: [PATCH] add support for billboard setting from URL --- libraries/avatars/src/AvatarData.cpp | 27 +++++++++++++++++++++++++++ libraries/avatars/src/AvatarData.h | 13 ++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 2cb719c446..95e0cfe7d5 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -11,6 +11,9 @@ #include #include +#include +#include +#include #include #include @@ -24,6 +27,8 @@ using namespace std; static const float fingerVectorRadix = 4; // bits of precision when converting from float<->fixed +QNetworkAccessManager* AvatarData::networkAccessManager = NULL; + AvatarData::AvatarData() : NodeData(), _handPosition(0,0,0), @@ -338,6 +343,28 @@ void AvatarData::setBillboard(const QByteArray& billboard) { qDebug() << "Changing billboard for avatar."; } +void AvatarData::setBillboardFromURL(const QString &billboardURL) { + _billboardURL = billboardURL; + + if (AvatarData::networkAccessManager) { + qDebug() << "Changing billboard for avatar to PNG at" << qPrintable(billboardURL); + + QNetworkRequest billboardRequest; + billboardRequest.setUrl(QUrl(billboardURL)); + + QNetworkReply* networkReply = AvatarData::networkAccessManager->get(billboardRequest); + connect(networkReply, SIGNAL(finished()), this, SLOT(setBillboardFromNetworkReply())); + + } else { + qDebug() << "Billboard PNG download requested but no network access manager is available."; + } +} + +void AvatarData::setBillboardFromNetworkReply() { + QNetworkReply* networkReply = reinterpret_cast(sender()); + setBillboard(networkReply->readAll()); +} + void AvatarData::setClampedTargetScale(float targetScale) { targetScale = glm::clamp(targetScale, MIN_AVATAR_SCALE, MAX_AVATAR_SCALE); diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index c5cd72c184..0ce2910398 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -68,6 +68,8 @@ enum KeyState { const glm::vec3 vec3Zero(0.0f); +class QNetworkAccessManager; + class AvatarData : public NodeData { Q_OBJECT @@ -88,6 +90,7 @@ class AvatarData : public NodeData { Q_PROPERTY(QString faceModelURL READ getFaceModelURLFromScript WRITE setFaceModelURLFromScript) Q_PROPERTY(QString skeletonModelURL READ getSkeletonModelURLFromScript WRITE setSkeletonModelURLFromScript) + Q_PROPERTY(QString billboardURL READ getBillboardURL WRITE setBillboardFromURL) public: AvatarData(); ~AvatarData(); @@ -170,6 +173,9 @@ public: virtual void setBillboard(const QByteArray& billboard); const QByteArray& getBillboard() const { return _billboard; } + void setBillboardFromURL(const QString& billboardURL); + const QString& getBillboardURL() { return _billboardURL; } + QString getFaceModelURLFromScript() const { return _faceModelURL.toString(); } void setFaceModelURLFromScript(const QString& faceModelString) { setFaceModelURL(faceModelString); } @@ -177,11 +183,13 @@ public: void setSkeletonModelURLFromScript(const QString& skeletonModelString) { setSkeletonModelURL(QUrl(skeletonModelString)); } virtual float getBoundingRadius() const { return 1.f; } + + static void setNetworkAccessManager(QNetworkAccessManager* sharedAccessManager) { networkAccessManager = sharedAccessManager; } public slots: void sendIdentityPacket(); void sendBillboardPacket(); - + void setBillboardFromNetworkReply(); protected: glm::vec3 _position; glm::vec3 _handPosition; @@ -217,6 +225,9 @@ protected: float _displayNameAlpha; QByteArray _billboard; + QString _billboardURL; + + static QNetworkAccessManager* networkAccessManager; private: // privatize the copy constructor and assignment operator so they cannot be called