From 44eb448cbe0f259f52fc161125e73d7f7f9864a3 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 18 Sep 2015 18:05:51 -0700 Subject: [PATCH] Hooked up isTalking flag to Rig and AnimGraph. --- interface/src/avatar/Head.cpp | 3 ++- interface/src/avatar/Head.h | 2 ++ interface/src/avatar/SkeletonModel.cpp | 2 ++ libraries/animation/src/Rig.cpp | 5 +++++ libraries/animation/src/Rig.h | 1 + 5 files changed, 12 insertions(+), 1 deletion(-) diff --git a/interface/src/avatar/Head.cpp b/interface/src/avatar/Head.cpp index 09ac893e65..a514eb4e8d 100644 --- a/interface/src/avatar/Head.cpp +++ b/interface/src/avatar/Head.cpp @@ -158,10 +158,11 @@ void Head::simulate(float deltaTime, bool isMine, bool billboard) { bool forceBlink = false; const float TALKING_LOUDNESS = 100.0f; const float BLINK_AFTER_TALKING = 0.25f; + _timeWithoutTalking += deltaTime; if ((_averageLoudness - _longTermAverageLoudness) > TALKING_LOUDNESS) { _timeWithoutTalking = 0.0f; - } else if (_timeWithoutTalking < BLINK_AFTER_TALKING && (_timeWithoutTalking += deltaTime) >= BLINK_AFTER_TALKING) { + } else if (_timeWithoutTalking < BLINK_AFTER_TALKING && _timeWithoutTalking >= BLINK_AFTER_TALKING) { forceBlink = true; } diff --git a/interface/src/avatar/Head.h b/interface/src/avatar/Head.h index 691775b029..1fbfceca92 100644 --- a/interface/src/avatar/Head.h +++ b/interface/src/avatar/Head.h @@ -102,6 +102,8 @@ public: void relaxLean(float deltaTime); void addLeanDeltas(float sideways, float forward); + + float getTimeWithoutTalking() const { return _timeWithoutTalking; } private: glm::vec3 calculateAverageEyePosition() const { return _leftEyePosition + (_rightEyePosition - _leftEyePosition ) * 0.5f; } diff --git a/interface/src/avatar/SkeletonModel.cpp b/interface/src/avatar/SkeletonModel.cpp index 3894a0ade9..27e61175eb 100644 --- a/interface/src/avatar/SkeletonModel.cpp +++ b/interface/src/avatar/SkeletonModel.cpp @@ -146,6 +146,8 @@ void SkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) { headParams.leftEyeJointIndex = geometry.leftEyeJointIndex; headParams.rightEyeJointIndex = geometry.rightEyeJointIndex; + headParams.isTalking = head->getTimeWithoutTalking() <= 1.5f; + _rig->updateFromHeadParameters(headParams, deltaTime); Rig::HandParameters handParams; diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 025cb5f3d1..1210313bdb 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -44,6 +44,7 @@ void Rig::HeadParameters::dump() const { qCDebug(animation, " neckJointIndex = %.d", neckJointIndex); qCDebug(animation, " leftEyeJointIndex = %.d", leftEyeJointIndex); qCDebug(animation, " rightEyeJointIndex = %.d", rightEyeJointIndex); + qCDebug(animation, " isTalking = %s", isTalking ? "true" : "false"); } void insertSorted(QList& handles, const AnimationHandlePointer& handle) { @@ -951,6 +952,10 @@ void Rig::updateFromHeadParameters(const HeadParameters& params, float dt) { updateNeckJoint(params.neckJointIndex, params); updateEyeJoints(params.leftEyeJointIndex, params.rightEyeJointIndex, params.modelTranslation, params.modelRotation, params.worldHeadOrientation, params.eyeLookAt, params.eyeSaccade); + + if (_enableAnimGraph) { + _animVars.set("isTalking", params.isTalking); + } } static const glm::vec3 X_AXIS(1.0f, 0.0f, 0.0f); diff --git a/libraries/animation/src/Rig.h b/libraries/animation/src/Rig.h index 9939f383b7..37e1d51a0a 100644 --- a/libraries/animation/src/Rig.h +++ b/libraries/animation/src/Rig.h @@ -72,6 +72,7 @@ public: int neckJointIndex = -1; int leftEyeJointIndex = -1; int rightEyeJointIndex = -1; + bool isTalking = false; void dump() const; };