From ab6631fae302114b49dd02e3415c99fcb51d7ff5 Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Mon, 28 Oct 2019 17:51:29 -0700 Subject: [PATCH] Fix look at update and allow to release control --- interface/src/avatar/MyAvatar.cpp | 10 +++++++++- interface/src/avatar/MyAvatar.h | 12 ++++++++++++ .../avatars-renderer/src/avatars-renderer/Head.cpp | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 979d33ec5d..cff7806b58 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -6807,7 +6807,7 @@ void MyAvatar::updateHeadLookAt(float deltaTime) { if (_scriptControlsHeadLookAt) { _scriptHeadControlTimer += deltaTime; - if (_scriptHeadControlTimer > MAX_LOOK_AT_TIME_SCRIPT_CONTROL) { + if (_scriptHeadControlTimer >= MAX_LOOK_AT_TIME_SCRIPT_CONTROL) { _scriptHeadControlTimer = 0.0f; _scriptControlsHeadLookAt = false; _lookAtCameraTarget = _lookAtScriptTarget; @@ -6839,6 +6839,14 @@ void MyAvatar::setEyesLookAt(const glm::vec3& lookAtTarget) { _scriptControlsEyesLookAt = true; } +void MyAvatar::releaseHeadLookAtControl() { + _scriptHeadControlTimer = MAX_LOOK_AT_TIME_SCRIPT_CONTROL; +} + +void MyAvatar::releaseEyesLookAtControl() { + _scriptEyesControlTimer = MAX_LOOK_AT_TIME_SCRIPT_CONTROL; +} + glm::vec3 MyAvatar::getLookAtPivotPoint() { glm::vec3 avatarUp = getWorldOrientation() * Vectors::UP; glm::vec3 yAxisEyePosition = getWorldPosition() + avatarUp * glm::dot(avatarUp, _skeletonModel->getDefaultEyeModelPosition()); diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 32ef16f811..09e2207f34 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -1769,6 +1769,12 @@ public: */ Q_INVOKABLE glm::vec3 getHeadLookAt() { return _lookAtCameraTarget; } + /**jsdoc + * When this function is called the engine regains control of the head immediately. + * @function MyAvatar.releaseHeadLookAtControl + */ + Q_INVOKABLE void releaseHeadLookAtControl(); + /**jsdoc * Force the avatar's eyes to look to the specified location. * Once this method is called, API calls will have full control of the eyes for a limited time. @@ -1785,6 +1791,12 @@ public: */ Q_INVOKABLE glm::vec3 getEyesLookAt() { return _eyesLookAtTarget.get(); } + /**jsdoc + * When this function is called the engine regains control of the eyes immediately. + * @function MyAvatar.releaseEyesLookAtControl + */ + Q_INVOKABLE void releaseEyesLookAtControl(); + /**jsdoc * Aims the pointing directional blending towards the provided target point. * The "point" reaction should be triggered before using this method. diff --git a/libraries/avatars-renderer/src/avatars-renderer/Head.cpp b/libraries/avatars-renderer/src/avatars-renderer/Head.cpp index aa6dc779d5..6d973c98a2 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Head.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Head.cpp @@ -358,7 +358,6 @@ float Head::getFinalRoll() const { void Head::setLookAtPosition(const glm::vec3& lookAtPosition) { if (_isEyeLookAtUpdated && _requestLookAtPosition != lookAtPosition) { - _lookAtPositionChanged = usecTimestampNow(); glm::vec3 oldAvatarLookAtVector = _requestLookAtPosition - _owningAvatar->getWorldPosition(); glm::vec3 newAvatarLookAtVector = lookAtPosition - _owningAvatar->getWorldPosition(); const float MIN_BLINK_ANGLE = 0.35f; // 20 degrees @@ -369,6 +368,7 @@ void Head::setLookAtPosition(const glm::vec3& lookAtPosition) { _lookAtPosition = lookAtPosition; } } + _lookAtPositionChanged = usecTimestampNow(); _requestLookAtPosition = lookAtPosition; }