From a7ffb7df1d1dd13c30914e55152f66482ac86255 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Fri, 31 Jan 2014 13:17:12 -0800 Subject: [PATCH] Moved LookAtTargetAvatar stuff from AvatarManager to MyAvatar. --- interface/src/Application.cpp | 8 +++--- interface/src/avatar/AvatarManager.cpp | 39 +------------------------- interface/src/avatar/AvatarManager.h | 8 ------ interface/src/avatar/MyAvatar.cpp | 36 +++++++++++++++++++++++- interface/src/avatar/MyAvatar.h | 8 ++++++ 5 files changed, 48 insertions(+), 51 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a178288fb2..916109c290 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1196,8 +1196,8 @@ void Application::mouseMoveEvent(QMouseEvent* event) { if (activeWindow() == _window) { // orbit behavior if (_mousePressed && !Menu::getInstance()->isVoxelModeActionChecked()) { - if (_avatarManager.getLookAtTargetAvatar()) { - _myAvatar->orbit(_avatarManager.getLookAtTargetAvatar()->getPosition(), deltaX, deltaY); + if (_myAvatar->getLookAtTargetAvatar()) { + _myAvatar->orbit(_myAvatar->getLookAtTargetAvatar()->getPosition(), deltaX, deltaY); return; } if (_isHoverVoxel) { @@ -1256,7 +1256,7 @@ void Application::mousePressEvent(QMouseEvent* event) { return; } - if (!_palette.isActive() && (!_isHoverVoxel || _avatarManager.getLookAtTargetAvatar())) { + if (!_palette.isActive() && (!_isHoverVoxel || _myAvatar->getLookAtTargetAvatar())) { // disable for now // _pieMenu.mousePressEvent(_mouseX, _mouseY); } @@ -2363,7 +2363,7 @@ void Application::update(float deltaTime) { glm::vec3 lookAtSpot; updateFaceshift(); - _avatarManager.updateLookAtTargetAvatar(lookAtSpot); + _myAvatar->updateLookAtTargetAvatar(lookAtSpot); updateMyAvatarLookAtPosition(lookAtSpot); // Find the voxel we are hovering over, and respond if clicked diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 3540d465a8..c7cf83c20a 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -20,9 +20,6 @@ const QUuid MY_AVATAR_KEY; // NULL key AvatarManager::AvatarManager(QObject* parent) : - _lookAtTargetAvatar(), - _lookAtOtherPosition(), - _lookAtIndicatorScale(1.0f), _avatarFades() { // register a meta type for the weak pointer we'll use for the owning avatar mixer for each avatar qRegisterMetaType >("NodeWeakPointer"); @@ -36,40 +33,6 @@ void AvatarManager::init() { _avatarHash.insert(MY_AVATAR_KEY, _myAvatar); } -void AvatarManager::updateLookAtTargetAvatar(glm::vec3 &eyePosition) { - bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings); - PerformanceWarning warn(showWarnings, "Application::updateLookatTargetAvatar()"); - - Application* applicationInstance = Application::getInstance(); - - if (!applicationInstance->isMousePressed()) { - glm::vec3 mouseOrigin = applicationInstance->getMouseRayOrigin(); - glm::vec3 mouseDirection = applicationInstance->getMouseRayDirection(); - - foreach (const AvatarSharedPointer& avatarPointer, _avatarHash) { - Avatar* avatar = static_cast(avatarPointer.data()); - if (avatar != static_cast(_myAvatar.data())) { - float distance; - if (avatar->findRayIntersection(mouseOrigin, mouseDirection, distance)) { - // rescale to compensate for head embiggening - eyePosition = (avatar->getHead().calculateAverageEyePosition() - avatar->getHead().getScalePivot()) * - (avatar->getScale() / avatar->getHead().getScale()) + avatar->getHead().getScalePivot(); - - _lookAtIndicatorScale = avatar->getHead().getScale(); - _lookAtOtherPosition = avatar->getHead().getPosition(); - - _lookAtTargetAvatar = avatarPointer; - - // found the look at target avatar, return - return; - } - } - } - - _lookAtTargetAvatar.clear(); - } -} - void AvatarManager::updateAvatars(float deltaTime) { bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings); PerformanceWarning warn(showWarnings, "Application::updateAvatars()"); @@ -267,5 +230,5 @@ void AvatarManager::clearMixedAvatars() { while (removeAvatar != _avatarHash.end()) { removeAvatar = erase(removeAvatar); } - _lookAtTargetAvatar.clear(); + _myAvatar->clearLookAtTargetAvatar(); } diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index 3f8e8571cc..e9ff77281f 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -29,10 +29,6 @@ public: MyAvatar* getMyAvatar() { return _myAvatar.data(); } - AvatarData* getLookAtTargetAvatar() const { return _lookAtTargetAvatar.data(); } - - void updateLookAtTargetAvatar(glm::vec3& eyePosition); - void updateAvatars(float deltaTime); void renderAvatars(bool forceRenderHead, bool selfAvatarOnly = false); @@ -53,10 +49,6 @@ private: // virtual override AvatarHash::iterator erase(const AvatarHash::iterator& iterator); - QWeakPointer _lookAtTargetAvatar; - glm::vec3 _lookAtOtherPosition; - float _lookAtIndicatorScale; - QVector _avatarFades; QSharedPointer _myAvatar; }; diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index a874fd60a7..c1822e5df8 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -53,13 +53,18 @@ MyAvatar::MyAvatar() : _isThrustOn(false), _thrustMultiplier(1.0f), _moveTarget(0,0,0), - _moveTargetStepCounter(0) + _moveTargetStepCounter(0), + _lookAtTargetAvatar() { for (int i = 0; i < MAX_DRIVE_KEYS; i++) { _driveKeys[i] = 0.0f; } } +MyAvatar::~MyAvatar() { + _lookAtTargetAvatar.clear(); +} + void MyAvatar::reset() { _head.reset(); _hand.reset(); @@ -492,6 +497,35 @@ void MyAvatar::orbit(const glm::vec3& position, int deltaX, int deltaY) { setPosition(position + rotation * (getPosition() - position)); } +void MyAvatar::updateLookAtTargetAvatar(glm::vec3 &eyePosition) { + Application* applicationInstance = Application::getInstance(); + + if (!applicationInstance->isMousePressed()) { + glm::vec3 mouseOrigin = applicationInstance->getMouseRayOrigin(); + glm::vec3 mouseDirection = applicationInstance->getMouseRayDirection(); + + foreach (const AvatarSharedPointer& avatarPointer, Application::getInstance()->getAvatarManager().getAvatarHash()) { + Avatar* avatar = static_cast(avatarPointer.data()); + if (avatar == static_cast(this)) { + continue; + } + float distance; + if (avatar->findRayIntersection(mouseOrigin, mouseDirection, distance)) { + // rescale to compensate for head embiggening + eyePosition = (avatar->getHead().calculateAverageEyePosition() - avatar->getHead().getScalePivot()) * + (avatar->getScale() / avatar->getHead().getScale()) + avatar->getHead().getScalePivot(); + _lookAtTargetAvatar = avatarPointer; + return; + } + } + _lookAtTargetAvatar.clear(); + } +} + +void MyAvatar::clearLookAtTargetAvatar() { + _lookAtTargetAvatar.clear(); +} + float MyAvatar::getAbsoluteHeadYaw() const { return glm::yaw(_head.getOrientation()); } diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index b7f359ca1d..cf25517fb8 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -27,6 +27,7 @@ class MyAvatar : public Avatar { public: MyAvatar(); + ~MyAvatar(); void reset(); void simulate(float deltaTime, Transmitter* transmitter); @@ -74,6 +75,12 @@ public: void orbit(const glm::vec3& position, int deltaX, int deltaY); + AvatarData* getLookAtTargetAvatar() const { return _lookAtTargetAvatar.data(); } + + void updateLookAtTargetAvatar(glm::vec3& eyePosition); + + void clearLookAtTargetAvatar(); + public slots: void goHome(); void setWantCollisionsOn(bool wantCollisionsOn) { _isCollisionsOn = wantCollisionsOn; } @@ -100,6 +107,7 @@ private: float _collisionRadius; glm::vec3 _moveTarget; int _moveTargetStepCounter; + QWeakPointer _lookAtTargetAvatar; // private methods void renderBody(bool forceRenderHead);