From ee70c93a3e7a7c35a5a757e12c4a67f38dd2eba6 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 25 Feb 2014 13:42:07 -0800 Subject: [PATCH] have scripted avatars send billboard, if they have one --- libraries/avatars/src/AvatarData.cpp | 13 ++++++++----- libraries/script-engine/src/ScriptEngine.cpp | 14 ++++++++++++-- libraries/script-engine/src/ScriptEngine.h | 2 ++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 95e0cfe7d5..482cd7564a 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -43,7 +43,8 @@ AvatarData::AvatarData() : _handData(NULL), _displayNameBoundingRect(), _displayNameTargetAlpha(0.0f), - _displayNameAlpha(0.0f) + _displayNameAlpha(0.0f), + _billboard() { } @@ -388,8 +389,10 @@ void AvatarData::sendIdentityPacket() { } void AvatarData::sendBillboardPacket() { - QByteArray billboardPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarBillboard); - billboardPacket.append(_billboard); - - NodeList::getInstance()->broadcastToNodes(billboardPacket, NodeSet() << NodeType::AvatarMixer); + if (!_billboard.isEmpty()) { + QByteArray billboardPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarBillboard); + billboardPacket.append(_billboard); + + NodeList::getInstance()->broadcastToNodes(billboardPacket, NodeSet() << NodeType::AvatarMixer); + } } diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 076f941222..c1b122b523 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -45,6 +45,7 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems, co AbstractControllerScriptingInterface* controllerScriptingInterface) : _isAvatar(false), _avatarIdentityTimer(NULL), + _avatarBillboardTimer(NULL), _avatarData(NULL) { _scriptContents = scriptContents; @@ -79,14 +80,17 @@ void ScriptEngine::setIsAvatar(bool isAvatar) { _isAvatar = isAvatar; if (_isAvatar && !_avatarIdentityTimer) { - // set up the avatar identity timer + // set up the avatar timers _avatarIdentityTimer = new QTimer(this); + _avatarBillboardTimer = new QTimer(this); // connect our slot connect(_avatarIdentityTimer, &QTimer::timeout, this, &ScriptEngine::sendAvatarIdentityPacket); + connect(_avatarBillboardTimer, &QTimer::timeout, this, &ScriptEngine::sendAvatarBillboardPacket); - // start the timer + // start the timers _avatarIdentityTimer->start(AVATAR_IDENTITY_PACKET_SEND_INTERVAL_MSECS); + _avatarBillboardTimer->start(AVATAR_BILLBOARD_PACKET_SEND_INTERVAL_MSECS); } } @@ -196,6 +200,12 @@ void ScriptEngine::sendAvatarIdentityPacket() { } } +void ScriptEngine::sendAvatarBillboardPacket() { + if (_isAvatar && _avatarData) { + _avatarData->sendBillboardPacket(); + } +} + void ScriptEngine::run() { if (!_isInitialized) { init(); diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index cf5ad1a68b..72ac848bff 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -85,10 +85,12 @@ protected: QScriptEngine _engine; bool _isAvatar; QTimer* _avatarIdentityTimer; + QTimer* _avatarBillboardTimer; QHash _timerFunctionMap; private: void sendAvatarIdentityPacket(); + void sendAvatarBillboardPacket(); QObject* setupTimerWithInterval(const QScriptValue& function, int intervalMS, bool isSingleShot); void stopTimer(QTimer* timer);