Merge pull request #16272 from hyperlogic/bug-fix/stuck-in-network-idle-role

Fix for avatars that are stuck in idle pose for observers
This commit is contained in:
Anthony Thibault 2019-10-01 16:48:26 -07:00 committed by GitHub
commit f8167e04d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 1 deletions

View file

@ -359,7 +359,7 @@ protected:
A,
B
};
NetworkAnimState() : clipNodeEnum(NetworkAnimState::None) {}
NetworkAnimState() : clipNodeEnum(NetworkAnimState::None), fps(30.0f), loop(false), firstFrame(0.0f), lastFrame(0.0f), blendTime(FLT_MAX) {}
NetworkAnimState(ClipNodeEnum clipNodeEnumIn, const QString& urlIn, float fpsIn, bool loopIn, float firstFrameIn, float lastFrameIn) :
clipNodeEnum(clipNodeEnumIn), url(urlIn), fps(fpsIn), loop(loopIn), firstFrame(firstFrameIn), lastFrame(lastFrameIn) {}

View file

@ -133,7 +133,21 @@ void Avatar::setShowNamesAboveHeads(bool show) {
showNamesAboveHeads = show;
}
static const char* avatarTransitStatusToStringMap[] = {
"IDLE",
"STARTED",
"PRE_TRANSIT",
"START_TRANSIT",
"TRANSITING",
"END_TRANSIT",
"POST_TRANSIT",
"ENDED",
"ABORT_TRANSIT"
};
AvatarTransit::Status AvatarTransit::update(float deltaTime, const glm::vec3& avatarPosition, const AvatarTransit::TransitConfig& config) {
AvatarTransit::Status previousStatus = _status;
float oneFrameDistance = _isActive ? glm::length(avatarPosition - _endPosition) : glm::length(avatarPosition - _lastPosition);
if (oneFrameDistance > (config._minTriggerDistance * _scale)) {
if (oneFrameDistance < (config._maxTriggerDistance * _scale)) {
@ -150,6 +164,10 @@ AvatarTransit::Status AvatarTransit::update(float deltaTime, const glm::vec3& av
reset();
_status = Status::ENDED;
}
if (previousStatus != _status) {
qDebug(avatars_renderer) << "AvatarTransit " << avatarTransitStatusToStringMap[(int)previousStatus] << "->" << avatarTransitStatusToStringMap[_status];
}
return _status;
}