From 359642eb0e2fa4e434a5b6bc7919ab9ab2f21597 Mon Sep 17 00:00:00 2001 From: Menithal Date: Sun, 25 Jun 2017 23:48:36 +0300 Subject: [PATCH] Refining and allowing for Avatar Scale to be saved as well --- interface/src/AvatarBookmarks.cpp | 37 +++++++++++++++++++++---------- interface/src/AvatarBookmarks.h | 1 + interface/src/avatar/MyAvatar.cpp | 15 +++++++++++++ interface/src/avatar/MyAvatar.h | 5 ++++- 4 files changed, 45 insertions(+), 13 deletions(-) diff --git a/interface/src/AvatarBookmarks.cpp b/interface/src/AvatarBookmarks.cpp index 31c0e94073..db83a82a1e 100644 --- a/interface/src/AvatarBookmarks.cpp +++ b/interface/src/AvatarBookmarks.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -24,6 +25,8 @@ #include "AvatarBookmarks.h" #include "InterfaceLogging.h" +#include "QVariantGLM.h" + #include AvatarBookmarks::AvatarBookmarks() { @@ -70,23 +73,32 @@ void AvatarBookmarks::changeToBookmarkedAvatar() { auto myAvatar = DependencyManager::get()->getMyAvatar(); - // TODO: Phase this out eventually. + if (action->data().type() == QVariant::String) { + // TODO: Phase this out eventually. // Legacy avatar bookmark. myAvatar->useFullAvatarURL(action->data().toString()); - qCDebug(interfaceapp) << " Using Legacy Avatar Bookmark "; - } - else { - // TODO: this is where the entry is interpreted. + qCDebug(interfaceapp) << " Using Legacy V1 Avatar Bookmark "; + } else { + const QMap bookmark = action->data().toMap(); - // Not magic value. This is the current made version, and if it changes this interpreter should be updated to handle the new one separately. + // Not magic value. This is the current made version, and if it changes this interpreter should be updated to + // handle the new one separately. + // This is where the avatar bookmark entry is parsed. If adding new Paradrims, make sure to have backward compat with previous if (bookmark.value(ENTRY_VERSION) == 3) { + const QString& avatarUrl = bookmark.value(ENTRY_AVATAR_URL, "").toString(); + myAvatar->useFullAvatarURL(avatarUrl); + qCDebug(interfaceapp) << "Avatar On " << avatarUrl; + const QList& attachments = bookmark.value(ENTRY_AVATAR_ATTACHMENTS, QList()).toList(); - myAvatar->useFullAvatarURL(bookmark.value(ENTRY_AVATAR_URL).toString()); - myAvatar->setAttachmentsVariant(bookmark.value(ENTRY_AVATAR_ATTACHMENTS).toList()); - } - else { + qCDebug(interfaceapp) << "Attach " << attachments; + myAvatar->setAttachmentsVariant(attachments); + + const float& qScale = bookmark.value(ENTRY_AVATAR_SCALE, 1.0f).toFloat(); + myAvatar->setAvatarScale(qScale); + + } else { qCDebug(interfaceapp) << " Bookmark entry does not match client version, make sure client has a handler for the new AvatarBookmark"; } } @@ -108,13 +120,14 @@ void AvatarBookmarks::addBookmark() { auto myAvatar = DependencyManager::get()->getMyAvatar(); const QString& avatarUrl = myAvatar->getSkeletonModelURL().toString(); - const QVariantList& attachments = myAvatar->getAttachmentsVariant(); + const QVariant& avatarScale = myAvatar->getAvatarScale(); // If Avatar attachments ever change, this is where to update them, when saving remember to also append to AVATAR_BOOKMARK_VERSION QVariantMap *bookmark = new QVariantMap; bookmark->insert(ENTRY_VERSION, AVATAR_BOOKMARK_VERSION); bookmark->insert(ENTRY_AVATAR_URL, avatarUrl); - bookmark->insert(ENTRY_AVATAR_ATTACHMENTS, attachments); + bookmark->insert(ENTRY_AVATAR_SCALE, avatarScale); + bookmark->insert(ENTRY_AVATAR_ATTACHMENTS, myAvatar->getAttachmentsVariant()); Bookmarks::addBookmarkToFile(bookmarkName, *bookmark); } diff --git a/interface/src/AvatarBookmarks.h b/interface/src/AvatarBookmarks.h index 4136f5edca..0fc3ff9740 100644 --- a/interface/src/AvatarBookmarks.h +++ b/interface/src/AvatarBookmarks.h @@ -34,6 +34,7 @@ private: const QString AVATARBOOKMARKS_FILENAME = "avatarbookmarks.json"; const QString ENTRY_AVATAR_URL = "avatarUrl"; const QString ENTRY_AVATAR_ATTACHMENTS = "attachments"; + const QString ENTRY_AVATAR_SCALE = "avatarScale"; const QString ENTRY_VERSION = "version"; const int AVATAR_BOOKMARK_VERSION = 3; diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index e5c4f4b972..c932c82e39 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2524,6 +2524,21 @@ bool MyAvatar::getFlyingEnabled() { return _enableFlying; } +// Public interface for targetscale +float MyAvatar::getAvatarScale() { + return getTargetScale(); +} + +void MyAvatar::setAvatarScale(float val) { + + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setScale", Q_ARG(float, val)); + return; + } + + setTargetScale(val); +} + void MyAvatar::setCollisionsEnabled(bool enabled) { if (QThread::currentThread() != thread()) { diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index e2ea745ed0..97d3bc2a1e 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -366,7 +366,7 @@ public: float getDriveKey(DriveKeys key) const; Q_INVOKABLE float getRawDriveKey(DriveKeys key) const; void relayDriveKeysToCharacterController(); - + Q_INVOKABLE void disableDriveKey(DriveKeys key); Q_INVOKABLE void enableDriveKey(DriveKeys key); Q_INVOKABLE bool isDriveKeyDisabled(DriveKeys key) const; @@ -512,6 +512,9 @@ public: Q_INVOKABLE void setFlyingEnabled(bool enabled); Q_INVOKABLE bool getFlyingEnabled(); + Q_INVOKABLE float getAvatarScale(); + Q_INVOKABLE void setAvatarScale(float scale); + Q_INVOKABLE void setCollisionsEnabled(bool enabled); Q_INVOKABLE bool getCollisionsEnabled(); Q_INVOKABLE void setCharacterControllerEnabled(bool enabled); // deprecated