diff --git a/interface/resources/avatar/animations/idleWS_all.fbx b/interface/resources/avatar/animations/idleWS_all.fbx new file mode 100644 index 0000000000..7b8348f4a1 Binary files /dev/null and b/interface/resources/avatar/animations/idleWS_all.fbx differ diff --git a/interface/resources/avatar/animations/idle_lookaround01.fbx b/interface/resources/avatar/animations/idle_lookaround01.fbx new file mode 100644 index 0000000000..fbea065713 Binary files /dev/null and b/interface/resources/avatar/animations/idle_lookaround01.fbx differ diff --git a/interface/resources/avatar/animations/idle_once_checkwatch.fbx b/interface/resources/avatar/animations/idle_once_checkwatch.fbx index f96409b24f..888d0bcbfc 100644 Binary files a/interface/resources/avatar/animations/idle_once_checkwatch.fbx and b/interface/resources/avatar/animations/idle_once_checkwatch.fbx differ diff --git a/interface/resources/avatar/animations/idle_once_lookaround.fbx b/interface/resources/avatar/animations/idle_once_lookaround.fbx new file mode 100644 index 0000000000..15be33092c Binary files /dev/null and b/interface/resources/avatar/animations/idle_once_lookaround.fbx differ diff --git a/interface/resources/avatar/animations/talk04.fbx b/interface/resources/avatar/animations/talk04.fbx new file mode 100644 index 0000000000..809fff21db Binary files /dev/null and b/interface/resources/avatar/animations/talk04.fbx differ diff --git a/interface/resources/avatar/animations/talk_righthand.fbx b/interface/resources/avatar/animations/talk_righthand.fbx new file mode 100644 index 0000000000..62e9a0a556 Binary files /dev/null and b/interface/resources/avatar/animations/talk_righthand.fbx differ diff --git a/interface/resources/avatar/avatar-animation.json b/interface/resources/avatar/avatar-animation.json index c5e98ae0d2..94e9c22b66 100644 --- a/interface/resources/avatar/avatar-animation.json +++ b/interface/resources/avatar/avatar-animation.json @@ -1077,7 +1077,7 @@ "id": "altTalkIdle1", "type": "clip", "data": { - "url": "qrc:///avatar/animations/talk.fbx", + "url": "qrc:///avatar/animations/talk_righthand.fbx", "startFrame": 1.0, "endFrame": 800.0, "timeScale": 1.0, diff --git a/libraries/animation/src/AnimNodeLoader.cpp b/libraries/animation/src/AnimNodeLoader.cpp index 80dfe52ec4..1066ae7b0f 100644 --- a/libraries/animation/src/AnimNodeLoader.cpp +++ b/libraries/animation/src/AnimNodeLoader.cpp @@ -808,7 +808,7 @@ bool processRandomSwitchStateMachineNode(AnimNode::Pointer node, const QJsonObje READ_STRING(currentState, jsonObj, nodeId, jsonUrl, false); READ_OPTIONAL_FLOAT(randomSwitchTimeMin, jsonObj, -1.0f); READ_OPTIONAL_FLOAT(randomSwitchTimeMax, jsonObj, -1.0f); - READ_STRING(triggerRandomSwitch, jsonObj, nodeId, jsonUrl, false); + READ_OPTIONAL_STRING(triggerRandomSwitch, jsonObj, nodeId, jsonUrl, false); READ_OPTIONAL_FLOAT(triggerTimeMin, jsonObj, -1.0f); READ_OPTIONAL_FLOAT(triggerTimeMax, jsonObj, -1.0f); READ_OPTIONAL_STRING(transitionVar, jsonObj); diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index f4f304bdb4..3e0e991da7 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -2012,23 +2012,30 @@ void Rig::updateFromControllerParameters(const ControllerParameters& params, flo } if (_previousIsTalking != params.isTalking) { - _talkIdleInterpTime = 0.0f; + if (_talkIdleInterpTime < 1.0f) { + _talkIdleInterpTime = 1.0f - _talkIdleInterpTime; + } else { + _talkIdleInterpTime = 0.0f; + } } _previousIsTalking = params.isTalking; - const float TOTAL_INTERP_TIME = 1.5f; + const float TOTAL_EASE_IN_TIME = 0.35f; + const float TOTAL_EASE_OUT_TIME = 1.5f; if (params.isTalking) { if (_talkIdleInterpTime < 1.0f) { - _talkIdleInterpTime += dt / TOTAL_INTERP_TIME; - float talkAlpha = glm::clamp((_talkIdleInterpTime*_talkIdleInterpTime*_talkIdleInterpTime), 0.0f, 1.0f); - _animVars.set("idleOverlayAlpha", talkAlpha); + _talkIdleInterpTime += dt / TOTAL_EASE_IN_TIME; + float easeOutInValue = _talkIdleInterpTime < 0.5f ? (4.0f * _talkIdleInterpTime * _talkIdleInterpTime * _talkIdleInterpTime) : (4.0f * (_talkIdleInterpTime - 1.0f) * (_talkIdleInterpTime - 1.0f) * (_talkIdleInterpTime - 1.0f)) + 1.0f; + //float talkAlpha = glm::clamp((_talkIdleInterpTime*_talkIdleInterpTime*_talkIdleInterpTime), 0.0f, 1.0f); + _animVars.set("idleOverlayAlpha", easeOutInValue); } else { _animVars.set("idleOverlayAlpha", 1.0f); } } else { if (_talkIdleInterpTime < 1.0f) { - _talkIdleInterpTime += dt / TOTAL_INTERP_TIME; - float talkAlpha = 1.0f - glm::clamp((_talkIdleInterpTime*_talkIdleInterpTime*_talkIdleInterpTime), 0.0f, 1.0f); + _talkIdleInterpTime += dt / TOTAL_EASE_OUT_TIME; + float easeOutInValue = _talkIdleInterpTime < 0.5f ? (4.0f * _talkIdleInterpTime * _talkIdleInterpTime * _talkIdleInterpTime) : (4.0f * (_talkIdleInterpTime - 1.0f) * (_talkIdleInterpTime - 1.0f) * (_talkIdleInterpTime - 1.0f)) + 1.0f; + float talkAlpha = 1.0f - easeOutInValue;// glm::clamp((_talkIdleInterpTime*_talkIdleInterpTime*_talkIdleInterpTime), 0.0f, 1.0f); _animVars.set("idleOverlayAlpha", talkAlpha); } else { _animVars.set("idleOverlayAlpha", 0.0f);