From 557a8fffd77615655babf9861b5a5142681c4d85 Mon Sep 17 00:00:00 2001 From: trent Date: Tue, 2 May 2017 19:56:36 -0400 Subject: [PATCH] Addressing some PR feedback; moved easeInEaseOut to Interpolate class. My function is faster than andrew's. :D --- interface/src/avatar/MyAvatar.cpp | 6 +++--- interface/src/avatar/MyAvatar.h | 11 ----------- interface/src/ui/overlays/ModelOverlay.cpp | 18 +++++++++++------- interface/src/ui/overlays/ModelOverlay.h | 2 ++ libraries/shared/src/Interpolate.cpp | 10 ++++++++++ libraries/shared/src/Interpolate.h | 3 +++ 6 files changed, 29 insertions(+), 21 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 29848da89d..970ef51aad 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -276,7 +276,7 @@ glm::quat MyAvatar::getOrientationOutbound() const { // Smooth the remote avatar movement. float t = _smoothOrientationTimer / _smoothOrientationTime; - float interp = easeInOutQuad(glm::clamp(t, 0.0f, 1.0f)); + float interp = Interpolate::easeInOutQuad(glm::clamp(t, 0.0f, 1.0f)); return (slerp(_smoothOrientationInitial, _smoothOrientationTarget, interp)); } @@ -1863,13 +1863,13 @@ void MyAvatar::updateOrientation(float deltaTime) { } // update body orientation by movement inputs - glm::quat initialOrientation = getOrientation(); + glm::quat initialOrientation = getOrientationOutbound(); setOrientation(getOrientation() * glm::quat(glm::radians(glm::vec3(0.0f, totalBodyYaw, 0.0f)))); if (snapTurn) { // Whether or not there is an existing smoothing going on, just reset the smoothing timer and set the starting position as the avatar's current position, then smooth to the new position. _smoothOrientationInitial = initialOrientation; - _smoothOrientationTarget = getOrientation(); + _smoothOrientationTarget = getOrientation(); _smoothOrientationTimer = 0.0f; } diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index c69359cc4c..abcfbe865d 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -579,17 +579,6 @@ private: void setVisibleInSceneIfReady(Model* model, const render::ScenePointer& scene, bool visiblity); - // Basic ease-in-ease-out function for smoothing values. - static inline float easeInOutQuad(float lerpValue) { - assert(!((lerpValue < 0.0f) || (lerpValue > 1.0f))); - - if (lerpValue < 0.5f) { - return (2.0f * lerpValue * lerpValue); - } - - return (lerpValue*(4.0f - 2.0f * lerpValue) - 1.0f); - } - private: virtual void updatePalms() override {} diff --git a/interface/src/ui/overlays/ModelOverlay.cpp b/interface/src/ui/overlays/ModelOverlay.cpp index 6043e22978..e993166558 100644 --- a/interface/src/ui/overlays/ModelOverlay.cpp +++ b/interface/src/ui/overlays/ModelOverlay.cpp @@ -18,7 +18,7 @@ QString const ModelOverlay::TYPE = "model"; ModelOverlay::ModelOverlay() - : _model(std::make_shared(std::make_shared(), nullptr, this)), + : _model(std::make_shared(std::make_shared(), nullptr, this)), _modelTextures(QVariantMap()) { _model->init(); @@ -40,11 +40,6 @@ ModelOverlay::ModelOverlay(const ModelOverlay* modelOverlay) : } void ModelOverlay::update(float deltatime) { - if (_model && _model->isActive()) { - _model->setRotation(getRotation()); - _model->setTranslation(getPosition()); - } - if (_updateModel) { _updateModel = false; _model->setSnapModelToCenter(true); @@ -274,4 +269,13 @@ bool ModelOverlay::findRayIntersectionExtraInfo(const glm::vec3& origin, const g ModelOverlay* ModelOverlay::createClone() const { return new ModelOverlay(this); -} \ No newline at end of file +} + +void ModelOverlay::locationChanged(bool tellPhysics) { + Base3DOverlay::locationChanged(tellPhysics); + + if (_model && _model->isActive()) { + _model->setRotation(getRotation()); + _model->setTranslation(getPosition()); + } +} diff --git a/interface/src/ui/overlays/ModelOverlay.h b/interface/src/ui/overlays/ModelOverlay.h index 6991a11bb2..8afe9a20b6 100644 --- a/interface/src/ui/overlays/ModelOverlay.h +++ b/interface/src/ui/overlays/ModelOverlay.h @@ -39,6 +39,8 @@ public: virtual bool addToScene(Overlay::Pointer overlay, const render::ScenePointer& scene, render::Transaction& transaction) override; virtual void removeFromScene(Overlay::Pointer overlay, const render::ScenePointer& scene, render::Transaction& transaction) override; + void locationChanged(bool tellPhysics) override; + protected: // helper to extract metadata from our Model's rigged joints template using mapFunction = std::function; diff --git a/libraries/shared/src/Interpolate.cpp b/libraries/shared/src/Interpolate.cpp index ba93a21a8e..35c164f0f2 100644 --- a/libraries/shared/src/Interpolate.cpp +++ b/libraries/shared/src/Interpolate.cpp @@ -77,3 +77,13 @@ float Interpolate::calculateFadeRatio(quint64 start) { const float EASING_SCALE = 1.001f; return std::min(EASING_SCALE * fadeRatio, 1.0f); } + +float Interpolate::easeInOutQuad(float lerpValue) { + assert(!((lerpValue < 0.0f) || (lerpValue > 1.0f))); + + if (lerpValue < 0.5f) { + return (2.0f * lerpValue * lerpValue); + } + + return (lerpValue*(4.0f - 2.0f * lerpValue) - 1.0f); +} \ No newline at end of file diff --git a/libraries/shared/src/Interpolate.h b/libraries/shared/src/Interpolate.h index 79ebd2f7fc..fca6a40b61 100644 --- a/libraries/shared/src/Interpolate.h +++ b/libraries/shared/src/Interpolate.h @@ -30,6 +30,9 @@ public: static float simpleNonLinearBlend(float fraction); static float calculateFadeRatio(quint64 start); + + // Basic ease-in-ease-out function for smoothing values. + static float easeInOutQuad(float lerpValue); }; #endif // hifi_Interpolate_h