diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index eab67818c4..85d2b5512e 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -17,7 +17,7 @@ #include #include -#include +#include #include #include #include @@ -39,8 +39,7 @@ Agent::Agent(const QByteArray& packet) : _receivedAudioStream(AudioConstants::NETWORK_FRAME_SAMPLES_STEREO, RECEIVED_AUDIO_STREAM_CAPACITY_FRAMES, InboundAudioStream::Settings(0, false, RECEIVED_AUDIO_STREAM_CAPACITY_FRAMES, false, DEFAULT_WINDOW_STARVE_THRESHOLD, DEFAULT_WINDOW_SECONDS_FOR_DESIRED_CALC_ON_TOO_MANY_STARVES, - DEFAULT_WINDOW_SECONDS_FOR_DESIRED_REDUCTION, false)), - _avatarHashMap() + DEFAULT_WINDOW_SECONDS_FOR_DESIRED_REDUCTION, false)) { // be the parent of the script engine so it gets moved when we do _scriptEngine.setParent(this); @@ -133,7 +132,7 @@ void Agent::readPendingDatagrams() { || datagramPacketType == PacketTypeAvatarBillboard || datagramPacketType == PacketTypeKillAvatar) { // let the avatar hash map process it - _avatarHashMap.processAvatarMixerDatagram(receivedPacket, nodeList->sendingNodeForPacket(receivedPacket)); + DependencyManager::get()->processAvatarMixerDatagram(receivedPacket, nodeList->sendingNodeForPacket(receivedPacket)); // let this continue through to the NodeList so it updates last heard timestamp // for the sending avatar-mixer @@ -198,7 +197,7 @@ void Agent::run() { // give this AvatarData object to the script engine _scriptEngine.setAvatarData(&scriptedAvatar, "Avatar"); - _scriptEngine.setAvatarHashMap(&_avatarHashMap, "AvatarList"); + _scriptEngine.setAvatarHashMap(DependencyManager::get().data(), "AvatarList"); // register ourselves to the script engine _scriptEngine.registerGlobalObject("Agent", this); diff --git a/assignment-client/src/Agent.h b/assignment-client/src/Agent.h index ffae3c6c21..415b14c0da 100644 --- a/assignment-client/src/Agent.h +++ b/assignment-client/src/Agent.h @@ -18,7 +18,6 @@ #include #include -#include #include #include #include @@ -63,8 +62,6 @@ private: MixedAudioStream _receivedAudioStream; float _lastReceivedAudioLoudness; - - AvatarHashMap _avatarHashMap; }; #endif // hifi_Agent_h diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index 7a5ad26726..59d4e00f12 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -54,6 +55,7 @@ AssignmentClient::AssignmentClient(int &argc, char **argv) : DependencyManager::registerInheritance(); auto addressManager = DependencyManager::set(); auto nodeList = DependencyManager::set(NodeType::Unassigned); + auto avatarHashMap = DependencyManager::set(); // setup a shutdown event listener to handle SIGTERM or WM_CLOSE for us #ifdef _WIN32 diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 20f8e3f51a..5717372e6f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -84,6 +84,8 @@ #include "ModelUploader.h" #include "Util.h" +#include "avatar/AvatarManager.h" + #include "audio/AudioToolBox.h" #include "audio/AudioIOStatsRenderer.h" #include "audio/AudioScope.h" @@ -154,6 +156,7 @@ bool setupEssentials(int& argc, char** argv) { } DependencyManager::registerInheritance(); + DependencyManager::registerInheritance(); // Set dependencies auto glCanvas = DependencyManager::set(); @@ -173,6 +176,7 @@ bool setupEssentials(int& argc, char** argv) { auto ddeFaceTracker = DependencyManager::set(); auto modelBlender = DependencyManager::set(); auto audioToolBox = DependencyManager::set(); + auto avatarManager = DependencyManager::set(); return true; } @@ -244,7 +248,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : QSettings::setDefaultFormat(QSettings::IniFormat); - _myAvatar = _avatarManager.getMyAvatar(); + _myAvatar = DependencyManager::get()->getMyAvatar(); _applicationStartupTime = startup_time; @@ -1636,7 +1640,7 @@ void Application::init() { DependencyManager::get()->init(this); // TODO: move _myAvatar out of Application. Move relevant code to MyAvataar or AvatarManager - _avatarManager.init(); + DependencyManager::get()->init(); _myCamera.setMode(CAMERA_MODE_FIRST_PERSON); _mirrorCamera.setMode(CAMERA_MODE_MIRROR); @@ -1698,7 +1702,7 @@ void Application::init() { EntityTree* entityTree = _entities.getTree(); - _entityCollisionSystem.init(&_entityEditSender, entityTree, &_avatarManager); + _entityCollisionSystem.init(&_entityEditSender, entityTree); entityTree->setSimulation(&_entityCollisionSystem); @@ -2037,7 +2041,7 @@ void Application::update(float deltaTime) { updateThreads(deltaTime); // If running non-threaded, then give the threads some time to process... - _avatarManager.updateOtherAvatars(deltaTime); //loop through all the other avatars and simulate them... + DependencyManager::get()->updateOtherAvatars(deltaTime); //loop through all the other avatars and simulate them... updateMetavoxels(deltaTime); // update metavoxels updateCamera(deltaTime); // handle various camera tweaks like off axis projection @@ -2590,7 +2594,7 @@ void Application::updateShadowMap() { { PerformanceTimer perfTimer("avatarManager"); - _avatarManager.renderAvatars(Avatar::SHADOW_RENDER_MODE); + DependencyManager::get()->renderAvatars(Avatar::SHADOW_RENDER_MODE); } { @@ -2843,7 +2847,7 @@ void Application::displaySide(Camera& theCamera, bool selfAvatarOnly, RenderArgs bool mirrorMode = (theCamera.getMode() == CAMERA_MODE_MIRROR); { PerformanceTimer perfTimer("avatars"); - _avatarManager.renderAvatars(mirrorMode ? Avatar::MIRROR_RENDER_MODE : Avatar::NORMAL_RENDER_MODE, + DependencyManager::get()->renderAvatars(mirrorMode ? Avatar::MIRROR_RENDER_MODE : Avatar::NORMAL_RENDER_MODE, false, selfAvatarOnly); } @@ -2858,7 +2862,7 @@ void Application::displaySide(Camera& theCamera, bool selfAvatarOnly, RenderArgs { PerformanceTimer perfTimer("avatarsPostLighting"); - _avatarManager.renderAvatars(mirrorMode ? Avatar::MIRROR_RENDER_MODE : Avatar::NORMAL_RENDER_MODE, + DependencyManager::get()->renderAvatars(mirrorMode ? Avatar::MIRROR_RENDER_MODE : Avatar::NORMAL_RENDER_MODE, true, selfAvatarOnly); } @@ -3303,7 +3307,7 @@ void Application::nodeKilled(SharedNodePointer node) { } else if (node->getType() == NodeType::AvatarMixer) { // our avatar mixer has gone away - clear the hash of avatars - _avatarManager.clearOtherAvatars(); + DependencyManager::get()->clearOtherAvatars(); } } @@ -3453,7 +3457,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri // hook our avatar and avatar hash map object into this script engine scriptEngine->setAvatarData(_myAvatar, "MyAvatar"); // leave it as a MyAvatar class to expose thrust features - scriptEngine->setAvatarHashMap(&_avatarManager, "AvatarList"); + scriptEngine->setAvatarHashMap(DependencyManager::get().data(), "AvatarList"); scriptEngine->registerGlobalObject("Camera", &_myCamera); @@ -3494,7 +3498,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri scriptEngine->registerGlobalObject("GlobalServices", GlobalServicesScriptingInterface::getInstance()); qScriptRegisterMetaType(scriptEngine, DownloadInfoResultToScriptValue, DownloadInfoResultFromScriptValue); - scriptEngine->registerGlobalObject("AvatarManager", &_avatarManager); + scriptEngine->registerGlobalObject("AvatarManager", DependencyManager::get().data()); scriptEngine->registerGlobalObject("Joysticks", &JoystickScriptingInterface::getInstance()); qScriptRegisterMetaType(scriptEngine, joystickToScriptValue, joystickFromScriptValue); diff --git a/interface/src/Application.h b/interface/src/Application.h index 34377b73a2..b88bee7df4 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -51,7 +51,6 @@ #include "Physics.h" #include "Stars.h" #include "avatar/Avatar.h" -#include "avatar/AvatarManager.h" #include "avatar/MyAvatar.h" #include "devices/PrioVR.h" #include "devices/SixenseManager.h" @@ -233,8 +232,6 @@ public: virtual AbstractControllerScriptingInterface* getControllerScriptingInterface() { return &_controllerScriptingInterface; } virtual void registerScriptEngineWithApplicationServices(ScriptEngine* scriptEngine); - - AvatarManager& getAvatarManager() { return _avatarManager; } void resetProfile(const QString& username); void controlledBroadcastToNodes(const QByteArray& packet, const NodeSet& destinationNodeTypes); @@ -484,7 +481,6 @@ private: OctreeQuery _octreeQuery; // NodeData derived class for querying octee cells from octree servers - AvatarManager _avatarManager; MyAvatar* _myAvatar; // TODO: move this and relevant code to AvatarManager (or MyAvatar as the case may be) PrioVR _prioVR; diff --git a/interface/src/DatagramProcessor.cpp b/interface/src/DatagramProcessor.cpp index ffe82ec317..91c267c8b7 100644 --- a/interface/src/DatagramProcessor.cpp +++ b/interface/src/DatagramProcessor.cpp @@ -15,6 +15,7 @@ #include #include "Application.h" +#include "avatar/AvatarManager.h" #include "Menu.h" #include "DatagramProcessor.h" @@ -111,7 +112,7 @@ void DatagramProcessor::processDatagrams() { avatarMixer->setLastHeardMicrostamp(usecTimestampNow()); avatarMixer->recordBytesReceived(incomingPacket.size()); - QMetaObject::invokeMethod(&application->getAvatarManager(), "processAvatarMixerDatagram", + QMetaObject::invokeMethod(DependencyManager::get().data(), "processAvatarMixerDatagram", Q_ARG(const QByteArray&, incomingPacket), Q_ARG(const QWeakPointer&, avatarMixer)); } diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 7ad81d7bf5..90886f08e1 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -35,6 +35,7 @@ #include "Application.h" #include "Avatar.h" +#include "AvatarManager.h" #include "Hand.h" #include "Head.h" #include "Menu.h" @@ -376,7 +377,7 @@ void Avatar::render(const glm::vec3& cameraPosition, RenderMode renderMode, bool float distance = BASE_LIGHT_DISTANCE * _scale; glm::vec3 position = glm::mix(_skeletonModel.getTranslation(), getHead()->getFaceModel().getTranslation(), 0.9f); glm::quat orientation = getOrientation(); - foreach (const AvatarManager::LocalLight& light, Application::getInstance()->getAvatarManager().getLocalLights()) { + foreach (const AvatarManager::LocalLight& light, DependencyManager::get()->getLocalLights()) { glm::vec3 direction = orientation * light.direction; DependencyManager::get()->addSpotLight(position - direction * distance, distance * 2.0f, glm::vec3(), light.color, light.color, 1.0f, 0.5f, 0.0f, direction, diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 31c0e64491..1db94c7de7 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -34,6 +34,7 @@ #include #include "Application.h" +#include "AvatarManager.h" #include "Environment.h" #include "Menu.h" #include "ModelReferential.h" @@ -895,7 +896,7 @@ void MyAvatar::updateLookAtTargetAvatar() { const float GREATEST_LOOKING_AT_DISTANCE = 10.0f; int howManyLookingAtMe = 0; - foreach (const AvatarSharedPointer& avatarPointer, Application::getInstance()->getAvatarManager().getAvatarHash()) { + foreach (const AvatarSharedPointer& avatarPointer, DependencyManager::get()->getAvatarHash()) { Avatar* avatar = static_cast(avatarPointer.data()); bool isCurrentTarget = avatar->getIsLookAtTarget(); float distanceTo = glm::length(avatar->getHead()->getEyePosition() - cameraPosition); @@ -1612,7 +1613,7 @@ bool findAvatarAvatarPenetration(const glm::vec3 positionA, float radiusA, float void MyAvatar::updateCollisionWithAvatars(float deltaTime) { // Reset detector for nearest avatar _distanceToNearestAvatar = std::numeric_limits::max(); - const AvatarHash& avatars = Application::getInstance()->getAvatarManager().getAvatarHash(); + const AvatarHash& avatars = DependencyManager::get()->getAvatarHash(); if (avatars.size() <= 1) { // no need to compute a bunch of stuff if we have one or fewer avatars return; @@ -1687,7 +1688,7 @@ void MyAvatar::updateChatCircle(float deltaTime) { // find all circle-enabled members and sort by distance QVector sortedAvatars; - foreach (const AvatarSharedPointer& avatarPointer, Application::getInstance()->getAvatarManager().getAvatarHash()) { + foreach (const AvatarSharedPointer& avatarPointer, DependencyManager::get()->getAvatarHash()) { Avatar* avatar = static_cast(avatarPointer.data()); if ( ! avatar->isChatCirclingEnabled() || avatar == static_cast(this)) { diff --git a/interface/src/ui/Stats.cpp b/interface/src/ui/Stats.cpp index 486a4621af..aecd34dfc8 100644 --- a/interface/src/ui/Stats.cpp +++ b/interface/src/ui/Stats.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include "Stats.h" @@ -214,7 +215,7 @@ void Stats::display( glPointSize(1.0f); // we need to take one avatar out so we don't include ourselves - int totalAvatars = Application::getInstance()->getAvatarManager().size() - 1; + int totalAvatars = DependencyManager::get()->size() - 1; int totalServers = DependencyManager::get()->size(); lines = _expanded ? 5 : 3; diff --git a/libraries/entities/src/EntityCollisionSystem.cpp b/libraries/entities/src/EntityCollisionSystem.cpp index 172850bc64..1ac4132b3c 100644 --- a/libraries/entities/src/EntityCollisionSystem.cpp +++ b/libraries/entities/src/EntityCollisionSystem.cpp @@ -10,8 +10,9 @@ // #include + #include -#include +#include #include #include #include @@ -29,16 +30,14 @@ const int MAX_COLLISIONS_PER_Entity = 16; EntityCollisionSystem::EntityCollisionSystem() : SimpleEntitySimulation(), _packetSender(NULL), - _avatars(NULL), _collisions(MAX_COLLISIONS_PER_Entity) { } void EntityCollisionSystem::init(EntityEditPacketSender* packetSender, - EntityTree* entities, AvatarHashMap* avatars) { + EntityTree* entities) { assert(entities); setEntityTree(entities); _packetSender = packetSender; - _avatars = avatars; } EntityCollisionSystem::~EntityCollisionSystem() { @@ -202,7 +201,7 @@ void EntityCollisionSystem::updateCollisionWithEntities(EntityItem* entityA) { void EntityCollisionSystem::updateCollisionWithAvatars(EntityItem* entity) { // Entities that are in hand, don't collide with avatars - if (!_avatars) { + if (!DependencyManager::get()) { return; } @@ -217,7 +216,7 @@ void EntityCollisionSystem::updateCollisionWithAvatars(EntityItem* entity) { glm::vec3 penetration; _collisions.clear(); - foreach (const AvatarSharedPointer& avatarPointer, _avatars->getAvatarHash()) { + foreach (const AvatarSharedPointer& avatarPointer, DependencyManager::get()->getAvatarHash()) { AvatarData* avatar = avatarPointer.data(); float totalRadius = avatar->getBoundingRadius() + radius; diff --git a/libraries/entities/src/EntityCollisionSystem.h b/libraries/entities/src/EntityCollisionSystem.h index ce7d57bef7..1ab552973d 100644 --- a/libraries/entities/src/EntityCollisionSystem.h +++ b/libraries/entities/src/EntityCollisionSystem.h @@ -18,7 +18,6 @@ #include #include -#include #include #include #include @@ -36,7 +35,7 @@ Q_OBJECT public: EntityCollisionSystem(); - void init(EntityEditPacketSender* packetSender, EntityTree* entities, AvatarHashMap* _avatars = NULL); + void init(EntityEditPacketSender* packetSender, EntityTree* entities); ~EntityCollisionSystem(); @@ -58,7 +57,6 @@ private: EntityEditPacketSender* _packetSender; AbstractAudioInterface* _audio; - AvatarHashMap* _avatars; CollisionList _collisions; };