From bd8fc75305f546766445e0bd38210ffce12eb117 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Fri, 5 Sep 2014 17:51:18 -0700 Subject: [PATCH] fix bug: zero velocity when teleporting to new locations --- interface/src/avatar/Avatar.cpp | 14 ++++++++++++++ interface/src/avatar/Avatar.h | 3 +++ interface/src/avatar/MyAvatar.cpp | 4 ++-- libraries/avatars/src/AvatarData.h | 2 +- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index b8def5bebd..b5b238b9d7 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -223,6 +223,20 @@ void Avatar::measureMotionDerivatives(float deltaTime) { _lastOrientation = getOrientation(); } +void Avatar::setPosition(const glm::vec3 position, bool overideReferential) { + AvatarData::setPosition(position, overideReferential); + _lastPosition = position; + _velocity = glm::vec3(0.0f); + _lastVelocity = glm::vec3(0.0f); +} + +void Avatar::slamPosition(const glm::vec3& newPosition) { + _position = newPosition; + _lastPosition = newPosition; + _velocity = glm::vec3(0.0f); + _lastVelocity = glm::vec3(0.0f); +} + void Avatar::setMouseRay(const glm::vec3 &origin, const glm::vec3 &direction) { _mouseRayOrigin = origin; _mouseRayDirection = direction; diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index 8923a67994..43b5150a48 100755 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -160,6 +160,9 @@ public: /// Scales a world space position vector relative to the avatar position and scale /// \param vector position to be scaled. Will store the result void scaleVectorRelativeToPosition(glm::vec3 &positionToScale) const; + + void setPosition(const glm::vec3 position, bool overideReferential = false); + void slamPosition(const glm::vec3& newPosition); public slots: void updateCollisionGroups(); diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index b3468a9214..4b0e4eef5a 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -1767,7 +1767,7 @@ void MyAvatar::maybeUpdateBillboard() { void MyAvatar::goHome() { qDebug("Going Home!"); - setPosition(START_LOCATION); + slamPosition(START_LOCATION); } void MyAvatar::increaseSize() { @@ -1827,7 +1827,7 @@ void MyAvatar::goToLocationFromAddress(const QJsonObject& locationObject) { const float DISTANCE_TO_USER = 2.0f; glm::vec3 newPosition = glm::vec3(coordinateItems[0].toFloat(), coordinateItems[1].toFloat(), coordinateItems[2].toFloat()) - newOrientation * IDENTITY_FRONT * DISTANCE_TO_USER; - setPosition(newPosition); + slamPosition(newPosition); emit transformChanged(); } diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 8e7082fc1e..d70876722b 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -145,7 +145,7 @@ public: const QUuid& getSessionUUID() { return _sessionUUID; } const glm::vec3& getPosition(); - void setPosition(const glm::vec3 position, bool overideReferential = false); + virtual void setPosition(const glm::vec3 position, bool overideReferential = false); glm::vec3 getHandPosition() const; void setHandPosition(const glm::vec3& handPosition);