Update Avatar*Pointers to use std::*_ptr instead of Q*Pointer

This commit is contained in:
Ryan Huffman 2015-05-27 12:36:55 -07:00
parent b90e04e451
commit 389d5556f5
6 changed files with 30 additions and 27 deletions

View file

@ -2287,8 +2287,8 @@ void Application::updateMyAvatarLookAtPosition() {
} }
} else { } else {
AvatarSharedPointer lookingAt = _myAvatar->getLookAtTargetAvatar().toStrongRef(); AvatarSharedPointer lookingAt = _myAvatar->getLookAtTargetAvatar().lock();
if (lookingAt && _myAvatar != lookingAt.data()) { if (lookingAt && _myAvatar != lookingAt.get()) {
isLookingAtSomeone = true; isLookingAtSomeone = true;
// If I am looking at someone else, look directly at one of their eyes // If I am looking at someone else, look directly at one of their eyes
@ -2296,17 +2296,17 @@ void Application::updateMyAvatarLookAtPosition() {
// If a face tracker is active, look at the eye for the side my gaze is biased toward // If a face tracker is active, look at the eye for the side my gaze is biased toward
if (tracker->getEstimatedEyeYaw() > _myAvatar->getHead()->getFinalYaw()) { if (tracker->getEstimatedEyeYaw() > _myAvatar->getHead()->getFinalYaw()) {
// Look at their right eye // Look at their right eye
lookAtSpot = static_cast<Avatar*>(lookingAt.data())->getHead()->getRightEyePosition(); lookAtSpot = static_cast<Avatar*>(lookingAt.get())->getHead()->getRightEyePosition();
} else { } else {
// Look at their left eye // Look at their left eye
lookAtSpot = static_cast<Avatar*>(lookingAt.data())->getHead()->getLeftEyePosition(); lookAtSpot = static_cast<Avatar*>(lookingAt.get())->getHead()->getLeftEyePosition();
} }
} else { } else {
// Need to add randomly looking back and forth between left and right eye for case with no tracker // Need to add randomly looking back and forth between left and right eye for case with no tracker
if (_myAvatar->isLookingAtLeftEye()) { if (_myAvatar->isLookingAtLeftEye()) {
lookAtSpot = static_cast<Avatar*>(lookingAt.data())->getHead()->getLeftEyePosition(); lookAtSpot = static_cast<Avatar*>(lookingAt.get())->getHead()->getLeftEyePosition();
} else { } else {
lookAtSpot = static_cast<Avatar*>(lookingAt.data())->getHead()->getRightEyePosition(); lookAtSpot = static_cast<Avatar*>(lookingAt.get())->getHead()->getRightEyePosition();
} }
} }
} else { } else {

View file

@ -144,7 +144,7 @@ void AvatarManager::simulateAvatarFades(float deltaTime) {
const float MIN_FADE_SCALE = 0.001f; const float MIN_FADE_SCALE = 0.001f;
while (fadingIterator != _avatarFades.end()) { while (fadingIterator != _avatarFades.end()) {
Avatar* avatar = static_cast<Avatar*>(fadingIterator->data()); Avatar* avatar = static_cast<Avatar*>(fadingIterator->get());
avatar->setTargetScale(avatar->getScale() * SHRINK_RATE, true); avatar->setTargetScale(avatar->getScale() * SHRINK_RATE, true);
if (avatar->getTargetScale() < MIN_FADE_SCALE) { if (avatar->getTargetScale() < MIN_FADE_SCALE) {
fadingIterator = _avatarFades.erase(fadingIterator); fadingIterator = _avatarFades.erase(fadingIterator);
@ -160,9 +160,9 @@ void AvatarManager::renderAvatarFades(RenderArgs* renderArgs, const glm::vec3& c
Glower glower(renderArgs, renderArgs->_renderMode == RenderArgs::NORMAL_RENDER_MODE ? 1.0f : 0.0f); Glower glower(renderArgs, renderArgs->_renderMode == RenderArgs::NORMAL_RENDER_MODE ? 1.0f : 0.0f);
foreach(const AvatarSharedPointer& fadingAvatar, _avatarFades) { foreach(const AvatarSharedPointer& fadingAvatar, _avatarFades) {
Avatar* avatar = static_cast<Avatar*>(fadingAvatar.data());
if (avatar != static_cast<Avatar*>(_myAvatar.data()) && avatar->isInitialized()) {
avatar->render(renderArgs, cameraPosition); avatar->render(renderArgs, cameraPosition);
Avatar* avatar = static_cast<Avatar*>(fadingAvatar.get());
if (avatar != static_cast<Avatar*>(_myAvatar.get()) && avatar->isInitialized()) {
} }
} }
} }
@ -194,8 +194,8 @@ void AvatarManager::removeAvatarMotionState(Avatar* avatar) {
void AvatarManager::removeAvatar(const QUuid& sessionUUID) { void AvatarManager::removeAvatar(const QUuid& sessionUUID) {
AvatarHash::iterator avatarIterator = _avatarHash.find(sessionUUID); AvatarHash::iterator avatarIterator = _avatarHash.find(sessionUUID);
if (avatarIterator != _avatarHash.end()) { if (avatarIterator != _avatarHash.end()) {
Avatar* avatar = reinterpret_cast<Avatar*>(avatarIterator.value().data()); Avatar* avatar = reinterpret_cast<Avatar*>(avatarIterator.value().get());
if (avatar != _myAvatar && avatar->isInitialized()) { if (avatar != _myAvatar.get() && avatar->isInitialized()) {
removeAvatarMotionState(avatar); removeAvatarMotionState(avatar);
_avatarFades.push_back(avatarIterator.value()); _avatarFades.push_back(avatarIterator.value());
@ -208,8 +208,8 @@ void AvatarManager::clearOtherAvatars() {
// clear any avatars that came from an avatar-mixer // clear any avatars that came from an avatar-mixer
AvatarHash::iterator avatarIterator = _avatarHash.begin(); AvatarHash::iterator avatarIterator = _avatarHash.begin();
while (avatarIterator != _avatarHash.end()) { while (avatarIterator != _avatarHash.end()) {
Avatar* avatar = reinterpret_cast<Avatar*>(avatarIterator.value().data()); Avatar* avatar = reinterpret_cast<Avatar*>(avatarIterator.value().get());
if (avatar == _myAvatar || !avatar->isInitialized()) { if (avatar == _myAvatar.get() || !avatar->isInitialized()) {
// don't remove myAvatar or uninitialized avatars from the list // don't remove myAvatar or uninitialized avatars from the list
++avatarIterator; ++avatarIterator;
} else { } else {
@ -276,7 +276,7 @@ void AvatarManager::handleCollisionEvents(CollisionEvents& collisionEvents) {
void AvatarManager::updateAvatarPhysicsShape(const QUuid& id) { void AvatarManager::updateAvatarPhysicsShape(const QUuid& id) {
AvatarHash::iterator avatarItr = _avatarHash.find(id); AvatarHash::iterator avatarItr = _avatarHash.find(id);
if (avatarItr != _avatarHash.end()) { if (avatarItr != _avatarHash.end()) {
Avatar* avatar = static_cast<Avatar*>(avatarItr.value().data()); Avatar* avatar = static_cast<Avatar*>(avatarItr.value().get());
AvatarMotionState* motionState = avatar->_motionState; AvatarMotionState* motionState = avatar->_motionState;
if (motionState) { if (motionState) {
motionState->addDirtyFlags(EntityItem::DIRTY_SHAPE); motionState->addDirtyFlags(EntityItem::DIRTY_SHAPE);

View file

@ -35,7 +35,7 @@ public:
void init(); void init();
MyAvatar* getMyAvatar() { return _myAvatar.data(); } MyAvatar* getMyAvatar() { return _myAvatar.get(); }
void updateMyAvatar(float deltaTime); void updateMyAvatar(float deltaTime);
void updateOtherAvatars(float deltaTime); void updateOtherAvatars(float deltaTime);
@ -79,7 +79,7 @@ private:
virtual void removeAvatar(const QUuid& sessionUUID); virtual void removeAvatar(const QUuid& sessionUUID);
QVector<AvatarSharedPointer> _avatarFades; QVector<AvatarSharedPointer> _avatarFades;
QSharedPointer<MyAvatar> _myAvatar; std::shared_ptr<MyAvatar> _myAvatar;
quint64 _lastSendAvatarDataTime = 0; // Controls MyAvatar send data rate. quint64 _lastSendAvatarDataTime = 0; // Controls MyAvatar send data rate.
QVector<AvatarManager::LocalLight> _localLights; QVector<AvatarManager::LocalLight> _localLights;

View file

@ -105,7 +105,7 @@ MyAvatar::MyAvatar() :
} }
MyAvatar::~MyAvatar() { MyAvatar::~MyAvatar() {
_lookAtTargetAvatar.clear(); _lookAtTargetAvatar.reset();
} }
QByteArray MyAvatar::toByteArray() { QByteArray MyAvatar::toByteArray() {
@ -335,7 +335,7 @@ void MyAvatar::render(RenderArgs* renderArgs, const glm::vec3& cameraPosition, b
} }
Avatar::render(renderArgs, cameraPosition, postLighting); Avatar::render(renderArgs, cameraPosition, postLighting);
// don't display IK constraints in shadow mode // don't display IK constraints in shadow mode
if (Menu::getInstance()->isOptionChecked(MenuOption::ShowIKConstraints) && postLighting) { if (Menu::getInstance()->isOptionChecked(MenuOption::ShowIKConstraints) && postLighting) {
_skeletonModel.renderIKConstraints(); _skeletonModel.renderIKConstraints();
@ -856,7 +856,7 @@ void MyAvatar::updateLookAtTargetAvatar() {
// //
// Look at the avatar whose eyes are closest to the ray in direction of my avatar's head // Look at the avatar whose eyes are closest to the ray in direction of my avatar's head
// //
_lookAtTargetAvatar.clear(); _lookAtTargetAvatar.reset();
_targetAvatarPosition = glm::vec3(0.0f); _targetAvatarPosition = glm::vec3(0.0f);
glm::vec3 lookForward = getHead()->getFinalOrientationInWorldFrame() * IDENTITY_FRONT; glm::vec3 lookForward = getHead()->getFinalOrientationInWorldFrame() * IDENTITY_FRONT;
@ -868,7 +868,7 @@ void MyAvatar::updateLookAtTargetAvatar() {
int howManyLookingAtMe = 0; int howManyLookingAtMe = 0;
foreach (const AvatarSharedPointer& avatarPointer, DependencyManager::get<AvatarManager>()->getAvatarHash()) { foreach (const AvatarSharedPointer& avatarPointer, DependencyManager::get<AvatarManager>()->getAvatarHash()) {
Avatar* avatar = static_cast<Avatar*>(avatarPointer.data()); Avatar* avatar = static_cast<Avatar*>(avatarPointer.get());
bool isCurrentTarget = avatar->getIsLookAtTarget(); bool isCurrentTarget = avatar->getIsLookAtTarget();
float distanceTo = glm::length(avatar->getHead()->getEyePosition() - cameraPosition); float distanceTo = glm::length(avatar->getHead()->getEyePosition() - cameraPosition);
avatar->setIsLookAtTarget(false); avatar->setIsLookAtTarget(false);
@ -896,13 +896,14 @@ void MyAvatar::updateLookAtTargetAvatar() {
} }
} }
} }
if (_lookAtTargetAvatar) { auto avatarPointer = _lookAtTargetAvatar.lock();
static_cast<Avatar*>(_lookAtTargetAvatar.data())->setIsLookAtTarget(true); if (avatarPointer) {
static_cast<Avatar*>(avatarPointer.get())->setIsLookAtTarget(true);
} }
} }
void MyAvatar::clearLookAtTargetAvatar() { void MyAvatar::clearLookAtTargetAvatar() {
_lookAtTargetAvatar.clear(); _lookAtTargetAvatar.reset();
} }
bool MyAvatar::isLookingAtLeftEye() { bool MyAvatar::isLookingAtLeftEye() {

View file

@ -108,7 +108,7 @@ public:
Q_INVOKABLE glm::vec3 getEyePosition() const { return getHead()->getEyePosition(); } Q_INVOKABLE glm::vec3 getEyePosition() const { return getHead()->getEyePosition(); }
Q_INVOKABLE glm::vec3 getTargetAvatarPosition() const { return _targetAvatarPosition; } Q_INVOKABLE glm::vec3 getTargetAvatarPosition() const { return _targetAvatarPosition; }
QWeakPointer<AvatarData> getLookAtTargetAvatar() const { return _lookAtTargetAvatar; } AvatarWeakPointer getLookAtTargetAvatar() const { return _lookAtTargetAvatar; }
void updateLookAtTargetAvatar(); void updateLookAtTargetAvatar();
void clearLookAtTargetAvatar(); void clearLookAtTargetAvatar();
@ -226,7 +226,7 @@ private:
DynamicCharacterController _characterController; DynamicCharacterController _characterController;
QWeakPointer<AvatarData> _lookAtTargetAvatar; AvatarWeakPointer _lookAtTargetAvatar;
glm::vec3 _targetAvatarPosition; glm::vec3 _targetAvatarPosition;
bool _shouldRender; bool _shouldRender;
bool _billboardValid; bool _billboardValid;

View file

@ -16,14 +16,16 @@
#include <QtCore/QSharedPointer> #include <QtCore/QSharedPointer>
#include <QtCore/QUuid> #include <QtCore/QUuid>
#include <memory>
#include <DependencyManager.h> #include <DependencyManager.h>
#include <Node.h> #include <Node.h>
#include "AvatarData.h" #include "AvatarData.h"
#include <glm/glm.hpp> #include <glm/glm.hpp>
typedef QSharedPointer<AvatarData> AvatarSharedPointer; typedef std::shared_ptr<AvatarData> AvatarSharedPointer;
typedef QWeakPointer<AvatarData> AvatarWeakPointer; typedef std::weak_ptr<AvatarData> AvatarWeakPointer;
typedef QHash<QUuid, AvatarSharedPointer> AvatarHash; typedef QHash<QUuid, AvatarSharedPointer> AvatarHash;
class AvatarHashMap : public QObject, public Dependency { class AvatarHashMap : public QObject, public Dependency {