Moved LookAtTargetAvatar stuff from AvatarManager to MyAvatar.

This commit is contained in:
Andrew Meadows 2014-01-31 13:17:12 -08:00
parent 1b99bc90cf
commit a7ffb7df1d
5 changed files with 48 additions and 51 deletions

View file

@ -1196,8 +1196,8 @@ void Application::mouseMoveEvent(QMouseEvent* event) {
if (activeWindow() == _window) { if (activeWindow() == _window) {
// orbit behavior // orbit behavior
if (_mousePressed && !Menu::getInstance()->isVoxelModeActionChecked()) { if (_mousePressed && !Menu::getInstance()->isVoxelModeActionChecked()) {
if (_avatarManager.getLookAtTargetAvatar()) { if (_myAvatar->getLookAtTargetAvatar()) {
_myAvatar->orbit(_avatarManager.getLookAtTargetAvatar()->getPosition(), deltaX, deltaY); _myAvatar->orbit(_myAvatar->getLookAtTargetAvatar()->getPosition(), deltaX, deltaY);
return; return;
} }
if (_isHoverVoxel) { if (_isHoverVoxel) {
@ -1256,7 +1256,7 @@ void Application::mousePressEvent(QMouseEvent* event) {
return; return;
} }
if (!_palette.isActive() && (!_isHoverVoxel || _avatarManager.getLookAtTargetAvatar())) { if (!_palette.isActive() && (!_isHoverVoxel || _myAvatar->getLookAtTargetAvatar())) {
// disable for now // disable for now
// _pieMenu.mousePressEvent(_mouseX, _mouseY); // _pieMenu.mousePressEvent(_mouseX, _mouseY);
} }
@ -2363,7 +2363,7 @@ void Application::update(float deltaTime) {
glm::vec3 lookAtSpot; glm::vec3 lookAtSpot;
updateFaceshift(); updateFaceshift();
_avatarManager.updateLookAtTargetAvatar(lookAtSpot); _myAvatar->updateLookAtTargetAvatar(lookAtSpot);
updateMyAvatarLookAtPosition(lookAtSpot); updateMyAvatarLookAtPosition(lookAtSpot);
// Find the voxel we are hovering over, and respond if clicked // Find the voxel we are hovering over, and respond if clicked

View file

@ -20,9 +20,6 @@
const QUuid MY_AVATAR_KEY; // NULL key const QUuid MY_AVATAR_KEY; // NULL key
AvatarManager::AvatarManager(QObject* parent) : AvatarManager::AvatarManager(QObject* parent) :
_lookAtTargetAvatar(),
_lookAtOtherPosition(),
_lookAtIndicatorScale(1.0f),
_avatarFades() { _avatarFades() {
// register a meta type for the weak pointer we'll use for the owning avatar mixer for each avatar // register a meta type for the weak pointer we'll use for the owning avatar mixer for each avatar
qRegisterMetaType<QWeakPointer<Node> >("NodeWeakPointer"); qRegisterMetaType<QWeakPointer<Node> >("NodeWeakPointer");
@ -36,40 +33,6 @@ void AvatarManager::init() {
_avatarHash.insert(MY_AVATAR_KEY, _myAvatar); _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<Avatar*>(avatarPointer.data());
if (avatar != static_cast<Avatar*>(_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) { void AvatarManager::updateAvatars(float deltaTime) {
bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings); bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings);
PerformanceWarning warn(showWarnings, "Application::updateAvatars()"); PerformanceWarning warn(showWarnings, "Application::updateAvatars()");
@ -267,5 +230,5 @@ void AvatarManager::clearMixedAvatars() {
while (removeAvatar != _avatarHash.end()) { while (removeAvatar != _avatarHash.end()) {
removeAvatar = erase(removeAvatar); removeAvatar = erase(removeAvatar);
} }
_lookAtTargetAvatar.clear(); _myAvatar->clearLookAtTargetAvatar();
} }

View file

@ -29,10 +29,6 @@ public:
MyAvatar* getMyAvatar() { return _myAvatar.data(); } MyAvatar* getMyAvatar() { return _myAvatar.data(); }
AvatarData* getLookAtTargetAvatar() const { return _lookAtTargetAvatar.data(); }
void updateLookAtTargetAvatar(glm::vec3& eyePosition);
void updateAvatars(float deltaTime); void updateAvatars(float deltaTime);
void renderAvatars(bool forceRenderHead, bool selfAvatarOnly = false); void renderAvatars(bool forceRenderHead, bool selfAvatarOnly = false);
@ -53,10 +49,6 @@ private:
// virtual override // virtual override
AvatarHash::iterator erase(const AvatarHash::iterator& iterator); AvatarHash::iterator erase(const AvatarHash::iterator& iterator);
QWeakPointer<AvatarData> _lookAtTargetAvatar;
glm::vec3 _lookAtOtherPosition;
float _lookAtIndicatorScale;
QVector<AvatarSharedPointer> _avatarFades; QVector<AvatarSharedPointer> _avatarFades;
QSharedPointer<MyAvatar> _myAvatar; QSharedPointer<MyAvatar> _myAvatar;
}; };

View file

@ -53,13 +53,18 @@ MyAvatar::MyAvatar() :
_isThrustOn(false), _isThrustOn(false),
_thrustMultiplier(1.0f), _thrustMultiplier(1.0f),
_moveTarget(0,0,0), _moveTarget(0,0,0),
_moveTargetStepCounter(0) _moveTargetStepCounter(0),
_lookAtTargetAvatar()
{ {
for (int i = 0; i < MAX_DRIVE_KEYS; i++) { for (int i = 0; i < MAX_DRIVE_KEYS; i++) {
_driveKeys[i] = 0.0f; _driveKeys[i] = 0.0f;
} }
} }
MyAvatar::~MyAvatar() {
_lookAtTargetAvatar.clear();
}
void MyAvatar::reset() { void MyAvatar::reset() {
_head.reset(); _head.reset();
_hand.reset(); _hand.reset();
@ -492,6 +497,35 @@ void MyAvatar::orbit(const glm::vec3& position, int deltaX, int deltaY) {
setPosition(position + rotation * (getPosition() - position)); 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<Avatar*>(avatarPointer.data());
if (avatar == static_cast<Avatar*>(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 { float MyAvatar::getAbsoluteHeadYaw() const {
return glm::yaw(_head.getOrientation()); return glm::yaw(_head.getOrientation());
} }

View file

@ -27,6 +27,7 @@ class MyAvatar : public Avatar {
public: public:
MyAvatar(); MyAvatar();
~MyAvatar();
void reset(); void reset();
void simulate(float deltaTime, Transmitter* transmitter); void simulate(float deltaTime, Transmitter* transmitter);
@ -74,6 +75,12 @@ public:
void orbit(const glm::vec3& position, int deltaX, int deltaY); 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: public slots:
void goHome(); void goHome();
void setWantCollisionsOn(bool wantCollisionsOn) { _isCollisionsOn = wantCollisionsOn; } void setWantCollisionsOn(bool wantCollisionsOn) { _isCollisionsOn = wantCollisionsOn; }
@ -100,6 +107,7 @@ private:
float _collisionRadius; float _collisionRadius;
glm::vec3 _moveTarget; glm::vec3 _moveTarget;
int _moveTargetStepCounter; int _moveTargetStepCounter;
QWeakPointer<AvatarData> _lookAtTargetAvatar;
// private methods // private methods
void renderBody(bool forceRenderHead); void renderBody(bool forceRenderHead);