* "avatar" or "" | The rate at which the avatar is updated even if not in view. |
* "avatarInView" | The rate at which the avatar is updated if in view. |
- * "skeletonModel" | The rate at which the skeleton model is being updated, even if there are no
+ * |
"skeletonModel" | The rate at which the skeleton model is being updated, even if there are no
* joint data available. |
* "jointData" | The rate at which joint data are being updated. |
- * "" | When no rate name is specified, the "avatar" update rate is
+ * |
"" | When no rate name is specified, the "avatar" update rate is
* provided. |
*
*
@@ -557,6 +564,7 @@ void Avatar::slamPosition(const glm::vec3& newPosition) {
_positionDeltaAccumulator = glm::vec3(0.0f);
setWorldVelocity(glm::vec3(0.0f));
_lastVelocity = glm::vec3(0.0f);
+ _transit.slamPosition(newPosition);
}
void Avatar::updateAttitude(const glm::quat& orientation) {
@@ -1511,7 +1519,7 @@ void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) {
}
indicateLoadingStatus(LoadingStatus::LoadModel);
- _skeletonModel->setURL(_skeletonModelURL);
+ _skeletonModel->setURL(getSkeletonModelURL());
}
void Avatar::setModelURLFinished(bool success) {
@@ -1533,7 +1541,7 @@ void Avatar::setModelURLFinished(bool success) {
QMetaObject::invokeMethod(_skeletonModel.get(), "setURL",
Qt::QueuedConnection, Q_ARG(QUrl, AvatarData::defaultFullAvatarModelUrl()));
} else {
- qCWarning(avatars_renderer) << "Avatar model failed to load... attempts:"
+ qCWarning(avatars_renderer) << "Avatar model failed to load... attempts:"
<< _skeletonModel->getResourceDownloadAttempts() << "out of:" << MAX_SKELETON_DOWNLOAD_ATTEMPTS;
}
}
diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h
index ee0fb6f433..7bb15ecbf7 100644
--- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h
+++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h
@@ -93,6 +93,7 @@ public:
AvatarTransit() {};
Status update(float deltaTime, const glm::vec3& avatarPosition, const TransitConfig& config);
+ void slamPosition(const glm::vec3& avatarPosition);
Status getStatus() { return _status; }
bool isActive() { return _isActive; }
glm::vec3 getCurrentPosition() { return _currentPosition; }
diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp
index 7d5f38db40..c03f9430be 100755
--- a/libraries/avatars/src/AvatarData.cpp
+++ b/libraries/avatars/src/AvatarData.cpp
@@ -1988,7 +1988,11 @@ void AvatarData::processAvatarIdentity(QDataStream& packetStream, bool& identity
if (flagValue != _verificationFailed) {
_verificationFailed = flagValue;
identityChanged = true;
- }
+ setSkeletonModelURL(_skeletonModelURL);
+ if (_verificationFailed) {
+ qCDebug(avatars) << "Avatar" << getSessionDisplayName() << "marked as VERIFY-FAILED";
+ }
+ };
if (identity.attachmentData != _attachmentData) {
setAttachmentData(identity.attachmentData);
@@ -2016,6 +2020,18 @@ QUrl AvatarData::getWireSafeSkeletonModelURL() const {
return QUrl();
}
}
+
+static const QString VERIFY_FAIL_MODEL { "/meshes/verifyFailed.fst" };
+
+const QUrl& AvatarData::getSkeletonModelURL() const {
+ if (_verificationFailed) {
+ static QUrl VERIFY_FAIL_MODEL_URL = PathUtils::resourcesUrl(VERIFY_FAIL_MODEL);
+ return VERIFY_FAIL_MODEL_URL;
+ } else {
+ return _skeletonModelURL;
+ }
+}
+
QByteArray AvatarData::packSkeletonData() const {
// Send an avatar trait packet with the skeleton data before the mesh is loaded
int avatarDataSize = 0;
diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h
index 20c5b1900d..59a2e2a53e 100755
--- a/libraries/avatars/src/AvatarData.h
+++ b/libraries/avatars/src/AvatarData.h
@@ -1205,7 +1205,7 @@ public:
QByteArray identityByteArray(bool setIsReplicated = false) const;
QUrl getWireSafeSkeletonModelURL() const;
- const QUrl& getSkeletonModelURL() const { return _skeletonModelURL; }
+ virtual const QUrl& getSkeletonModelURL() const;
const QString& getDisplayName() const { return _displayName; }
const QString& getSessionDisplayName() const { return _sessionDisplayName; }
diff --git a/libraries/avatars/src/AvatarHashMap.cpp b/libraries/avatars/src/AvatarHashMap.cpp
index 0c7054424f..d0b315b524 100644
--- a/libraries/avatars/src/AvatarHashMap.cpp
+++ b/libraries/avatars/src/AvatarHashMap.cpp
@@ -330,10 +330,6 @@ void AvatarHashMap::processAvatarIdentityPacket(QSharedPointer