From 2d973e5288c5f0568f7896085db1096e8841d6fc Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 29 Jan 2015 16:55:32 -0800 Subject: [PATCH] Move updateMyAvatar to AvatarManager --- interface/src/Application.cpp | 26 +------------------------- interface/src/Application.h | 8 -------- interface/src/avatar/AvatarManager.cpp | 20 ++++++++++++++++++++ interface/src/avatar/AvatarManager.h | 2 ++ libraries/avatars/src/AvatarData.cpp | 7 +++++++ libraries/avatars/src/AvatarData.h | 4 +++- 6 files changed, 33 insertions(+), 34 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c0e28d6abc..3cece4b7bc 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2072,7 +2072,7 @@ void Application::update(float deltaTime) { { PerformanceTimer perfTimer("myAvatar"); updateMyAvatarLookAtPosition(); - updateMyAvatar(deltaTime); // Sample hardware, update view frustum if needed, and send avatar data to mixer/nodes + DependencyManager::get()->updateMyAvatar(deltaTime); // Sample hardware, update view frustum if needed, and send avatar data to mixer/nodes } { @@ -2134,26 +2134,6 @@ void Application::update(float deltaTime) { } } -void Application::updateMyAvatar(float deltaTime) { - bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings); - PerformanceWarning warn(showWarnings, "Application::updateMyAvatar()"); - - _myAvatar->update(deltaTime); - - quint64 now = usecTimestampNow(); - quint64 dt = now - _lastSendAvatarDataTime; - - if (dt > MIN_TIME_BETWEEN_MY_AVATAR_DATA_SENDS) { - // send head/hand data to the avatar mixer and voxel server - PerformanceTimer perfTimer("send"); - QByteArray packet = byteArrayWithPopulatedHeader(PacketTypeAvatarData); - packet.append(_myAvatar->toByteArray()); - controlledBroadcastToNodes(packet, NodeSet() << NodeType::AvatarMixer); - - _lastSendAvatarDataTime = now; - } -} - int Application::sendNackPackets() { if (Menu::getInstance()->isOptionChecked(MenuOption::DisableNackPackets)) { @@ -3802,10 +3782,6 @@ void Application::toggleLogDialog() { } } -void Application::initAvatarAndViewFrustum() { - updateMyAvatar(0.0f); -} - void Application::checkVersion() { QNetworkRequest latestVersionRequest((QUrl(CHECK_VERSION_URL))); latestVersionRequest.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache); diff --git a/interface/src/Application.h b/interface/src/Application.h index 1b305a4e38..175f3eb2df 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -110,10 +110,6 @@ static const float MIRROR_REARVIEW_DISTANCE = 0.722f; static const float MIRROR_REARVIEW_BODY_DISTANCE = 2.56f; static const float MIRROR_FIELD_OF_VIEW = 30.0f; -// 70 times per second - target is 60hz, but this helps account for any small deviations -// in the update loop -static const quint64 MIN_TIME_BETWEEN_MY_AVATAR_DATA_SENDS = (1000 * 1000) / 70; - static const quint64 TOO_LONG_SINCE_LAST_SEND_DOWNSTREAM_AUDIO_STATS = 1 * USECS_PER_SECOND; static const QString INFO_HELP_PATH = "html/interface-welcome-allsvg.html"; @@ -334,7 +330,6 @@ public slots: void loadDialog(); void loadScriptURLDialog(); void toggleLogDialog(); - void initAvatarAndViewFrustum(); ScriptEngine* loadScript(const QString& scriptFilename = QString(), bool isUserLoaded = true, bool loadScriptFromEditor = false, bool activateMainWindow = false); void scriptFinished(const QString& scriptName); @@ -425,7 +420,6 @@ private: void renderLookatIndicator(glm::vec3 pointOfInterest); - void updateMyAvatar(float deltaTime); void queryOctree(NodeType_t serverType, PacketType packetType, NodeToJurisdictionMap& jurisdictions); void loadViewFrustum(Camera& camera, ViewFrustum& viewFrustum); @@ -576,8 +570,6 @@ private: quint64 _lastNackTime; quint64 _lastSendDownstreamAudioStats; - quint64 _lastSendAvatarDataTime; - bool _isVSyncOn; bool _aboutToQuit; diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index ee9172a112..316496c62a 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -26,6 +26,9 @@ #include "Menu.h" #include "MyAvatar.h" +// 70 times per second - target is 60hz, but this helps account for any small deviations +// in the update loop +static const quint64 MIN_TIME_BETWEEN_MY_AVATAR_DATA_SENDS = (1000 * 1000) / 70; // We add _myAvatar into the hash with all the other AvatarData, and we use the default NULL QUid as the key. const QUuid MY_AVATAR_KEY; // NULL key @@ -59,6 +62,23 @@ void AvatarManager::init() { _avatarHash.insert(MY_AVATAR_KEY, _myAvatar); } +void AvatarManager::updateMyAvatar(float deltaTime) { + bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings); + PerformanceWarning warn(showWarnings, "Application::updateMyAvatar()"); + + _myAvatar->update(deltaTime); + + quint64 now = usecTimestampNow(); + quint64 dt = now - _lastSendAvatarDataTime; + + if (dt > MIN_TIME_BETWEEN_MY_AVATAR_DATA_SENDS) { + // send head/hand data to the avatar mixer and voxel server + PerformanceTimer perfTimer("send"); + _myAvatar->sendAvatarDataPacket(); + _lastSendAvatarDataTime = now; + } +} + void AvatarManager::updateOtherAvatars(float deltaTime) { if (_avatarHash.size() < 2 && _avatarFades.isEmpty()) { return; diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index 5ad1e552fe..ae6fbe5fc2 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -35,6 +35,7 @@ public: MyAvatar* getMyAvatar() { return _myAvatar.data(); } + void updateMyAvatar(float deltaTime); void updateOtherAvatars(float deltaTime); void renderAvatars(Avatar::RenderMode renderMode, bool postLighting = false, bool selfAvatarOnly = false); @@ -63,6 +64,7 @@ private: QVector _avatarFades; QSharedPointer _myAvatar; + quint64 _lastSendAvatarDataTime = 0; // Controls MyAvatar send data rate. QVector _localLights; }; diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 21bbdefc80..c46b143f61 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1067,6 +1067,13 @@ void AvatarData::setJointMappingsFromNetworkReply() { networkReply->deleteLater(); } +void AvatarData::sendAvatarDataPacket() { + QByteArray dataPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarData); + dataPacket.append(toByteArray()); + + DependencyManager::get()->broadcastToNodes(dataPacket, NodeSet() << NodeType::AvatarMixer); +} + void AvatarData::sendIdentityPacket() { QByteArray identityPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarIdentity); identityPacket.append(identityByteArray()); diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 7feb122d81..88e41f91b4 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -112,7 +112,7 @@ const QUrl DEFAULT_BODY_MODEL_URL = QUrl("http://public.highfidelity.io/models/s // Where one's own Avatar begins in the world (will be overwritten if avatar data file is found). // This is the start location in the Sandbox (xyz: 6270, 211, 6000). -const glm::vec3 START_LOCATION(0.38269043f * TREE_SCALE, 0.01287842f * TREE_SCALE, 0.36621094f * TREE_SCALE); +const glm::vec3 START_LOCATION(6270, 211, 6000); enum KeyState { NO_KEY_DOWN = 0, @@ -301,8 +301,10 @@ public: const Referential* getReferential() const { return _referential; } public slots: + void sendAvatarDataPacket(); void sendIdentityPacket(); void sendBillboardPacket(); + void setBillboardFromNetworkReply(); void setJointMappingsFromNetworkReply(); void setSessionUUID(const QUuid& sessionUUID) { _sessionUUID = sessionUUID; }