From cabd6ccbad23c9d5655ee1050eacc60e4bb68cb4 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 27 Nov 2013 11:47:23 -0800 Subject: [PATCH] Advertise to others whether we have chat circling enabled, only include people with it enabled when doing the computations. --- interface/src/avatar/MyAvatar.cpp | 7 +++++-- libraries/avatars/src/AvatarData.cpp | 5 +++++ libraries/avatars/src/AvatarData.h | 5 +++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 65670aa4f3..1257788d60 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -1161,17 +1161,20 @@ bool operator<(const SortedAvatar& s1, const SortedAvatar& s2) { } void MyAvatar::updateChatCircle(float deltaTime) { - if (!Menu::getInstance()->isOptionChecked(MenuOption::ChatCircling)) { + if (!(_isChatCirclingEnabled = Menu::getInstance()->isOptionChecked(MenuOption::ChatCircling))) { return; } - // find all members and sort by distance + // find all circle-enabled members and sort by distance QVector sortedAvatars; NodeList* nodeList = NodeList::getInstance(); for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) { if (node->getLinkedData() && node->getType() == NODE_TYPE_AGENT) { SortedAvatar sortedAvatar; sortedAvatar.avatar = (Avatar*)node->getLinkedData(); + if (!sortedAvatar.avatar->isChatCirclingEnabled()) { + continue; + } sortedAvatar.distance = glm::distance(_position, sortedAvatar.avatar->getPosition()); sortedAvatars.append(sortedAvatar); } diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index dc5a9c96d3..042deb9d3d 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -120,6 +120,9 @@ int AvatarData::getBroadcastData(unsigned char* destinationBuffer) { setSemiNibbleAt(bitItems,HAND_STATE_START_BIT,_handState); // faceshift state if (_headData->_isFaceshiftConnected) { setAtBit(bitItems, IS_FACESHIFT_CONNECTED); } + if (_isChatCirclingEnabled) { + setAtBit(bitItems, IS_CHAT_CIRCLING_ENABLED); + } *destinationBuffer++ = bitItems; // If it is connected, pack up the data @@ -248,6 +251,8 @@ int AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { _headData->_isFaceshiftConnected = oneAtBit(bitItems, IS_FACESHIFT_CONNECTED); + _isChatCirclingEnabled = oneAtBit(bitItems, IS_CHAT_CIRCLING_ENABLED); + // If it is connected, pack up the data if (_headData->_isFaceshiftConnected) { memcpy(&_headData->_leftEyeBlink, sourceBuffer, sizeof(float)); diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index b99be1bb09..13c9b1e049 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -30,6 +30,7 @@ const int KEY_STATE_START_BIT = 0; // 1st and 2nd bits const int HAND_STATE_START_BIT = 2; // 3rd and 4th bits const int IS_FACESHIFT_CONNECTED = 4; // 5th bit +const int IS_CHAT_CIRCLING_ENABLED = 5; const float MAX_AUDIO_LOUDNESS = 1000.0; // close enough for mouth animation @@ -93,6 +94,8 @@ public: const std::string& setChatMessage() const { return _chatMessage; } QString getQStringChatMessage() { return QString(_chatMessage.data()); } + bool isChatCirclingEnabled() const { return _isChatCirclingEnabled; } + const QUuid& getLeaderUUID() const { return _leaderUUID; } void setHeadData(HeadData* headData) { _headData = headData; } @@ -124,6 +127,8 @@ protected: // chat message std::string _chatMessage; + bool _isChatCirclingEnabled; + std::vector _joints; HeadData* _headData;