mirror of
https://github.com/lubosz/overte.git
synced 2025-04-09 05:03:52 +02:00
introduce reverting avatar wearables on cancel
This commit is contained in:
parent
9914a1d523
commit
51c8248463
5 changed files with 44 additions and 29 deletions
|
@ -56,11 +56,22 @@ Rectangle {
|
|||
adjustWearables.refreshWearable(message.entityID, message.wearableIndex, message.properties);
|
||||
} else if(message.method === 'wearablesUpdated') {
|
||||
var wearablesModel = currentAvatarModel.get(0).wearables;
|
||||
|
||||
console.debug('handling wearablesUpdated, new wearables count:', message.wearables.length, ': old wearables: ');
|
||||
for(var i = 0; i < wearablesModel.count; ++i) {
|
||||
console.debug('wearable: ', wearablesModel.get(i).properties.id);
|
||||
}
|
||||
|
||||
wearablesModel.clear();
|
||||
message.wearables.forEach(function(wearable) {
|
||||
wearablesModel.append(wearable);
|
||||
});
|
||||
console.debug('wearablesUpdated: ', JSON.stringify(wearablesModel, 0, 4), '*****', JSON.stringify(message.wearables, 0, 4));
|
||||
|
||||
console.debug('handling wearablesUpdated: new wearables: ');
|
||||
for(var i = 0; i < wearablesModel.count; ++i) {
|
||||
console.debug('wearable: ', wearablesModel.get(i).properties.id);
|
||||
}
|
||||
|
||||
adjustWearables.refresh(root.currentAvatar);
|
||||
} else if(message.method === 'bookmarkLoaded') {
|
||||
setCurrentAvatar(message.reply.currentAvatar);
|
||||
|
@ -210,10 +221,10 @@ Rectangle {
|
|||
emitSendToScript({'method' : 'deleteWearable', 'entityID' : id, 'avatarName' : avatarName});
|
||||
}
|
||||
onAdjustWearablesOpened: {
|
||||
emitSendToScript({'method' : 'adjustWearablesOpened'});
|
||||
emitSendToScript({'method' : 'adjustWearablesOpened', 'avatarName' : avatarName});
|
||||
}
|
||||
onAdjustWearablesClosed: {
|
||||
emitSendToScript({'method' : 'adjustWearablesClosed'});
|
||||
emitSendToScript({'method' : 'adjustWearablesClosed', 'save' : status, 'avatarName' : avatarName});
|
||||
}
|
||||
onWearableSelected: {
|
||||
emitSendToScript({'method' : 'selectWearable', 'entityID' : id});
|
||||
|
|
|
@ -16,7 +16,7 @@ Rectangle {
|
|||
signal wearableDeleted(string avatarName, var id);
|
||||
|
||||
signal adjustWearablesOpened();
|
||||
signal adjustWearablesClosed();
|
||||
signal adjustWearablesClosed(bool status);
|
||||
|
||||
property bool modified: false;
|
||||
Component.onCompleted: {
|
||||
|
@ -27,20 +27,10 @@ Rectangle {
|
|||
console.debug('modified: ', modified)
|
||||
}
|
||||
|
||||
property var onButton2Clicked;
|
||||
property var onButton1Clicked;
|
||||
property var jointNames;
|
||||
property var wearables: ({})
|
||||
property string avatarName: ''
|
||||
property var wearablesModel;
|
||||
|
||||
function backupWearables(avatar) {
|
||||
for(var i = 0; i < avatar.wearables.count; ++i) {
|
||||
var wearable = avatar.wearables.get(i).properties;
|
||||
wearables[wearable.id] = JSON.stringify(wearable)
|
||||
}
|
||||
}
|
||||
|
||||
function open(avatar) {
|
||||
adjustWearablesOpened();
|
||||
console.debug('AdjustWearables.qml: open: ', JSON.stringify(avatar, null, '\t'));
|
||||
|
@ -48,13 +38,15 @@ Rectangle {
|
|||
visible = true;
|
||||
avatarName = avatar.name;
|
||||
wearablesModel = avatar.wearables;
|
||||
wearables = {};
|
||||
|
||||
refresh(avatar);
|
||||
backupWearables(avatar);
|
||||
}
|
||||
|
||||
function refresh(avatar) {
|
||||
console.debug('refresh: ');
|
||||
for(var i = 0; i < avatar.wearables.count; ++i) {
|
||||
console.debug('wearable: ', avatar.wearables.get(i).properties.id);
|
||||
}
|
||||
|
||||
wearablesCombobox.model.clear();
|
||||
console.debug('AdjustWearables.qml: open: avatar.wearables.count: ', avatar.wearables.count);
|
||||
for(var i = 0; i < avatar.wearables.count; ++i) {
|
||||
|
@ -109,9 +101,9 @@ Rectangle {
|
|||
}
|
||||
}
|
||||
|
||||
function close() {
|
||||
function close(status) {
|
||||
visible = false;
|
||||
adjustWearablesClosed();
|
||||
adjustWearablesClosed(status);
|
||||
}
|
||||
|
||||
HifiConstants { id: hifi }
|
||||
|
@ -324,19 +316,11 @@ Rectangle {
|
|||
noText: "CANCEL"
|
||||
|
||||
onYesClicked: function() {
|
||||
if(onButton2Clicked) {
|
||||
onButton2Clicked();
|
||||
} else {
|
||||
root.close();
|
||||
}
|
||||
root.close(true);
|
||||
}
|
||||
|
||||
onNoClicked: function() {
|
||||
if(onButton1Clicked) {
|
||||
onButton1Clicked();
|
||||
} else {
|
||||
root.close();
|
||||
}
|
||||
root.close(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -136,6 +136,14 @@ void AvatarBookmarks::removeBookmark(const QString& bookmarkName) {
|
|||
}
|
||||
}
|
||||
|
||||
void AvatarBookmarks::updateAvatarEntities(const QVariantList &avatarEntities)
|
||||
{
|
||||
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
||||
myAvatar->removeAvatarEntities();
|
||||
|
||||
addAvatarEntities(avatarEntities);
|
||||
}
|
||||
|
||||
void AvatarBookmarks::loadBookmark(const QString& bookmarkName) {
|
||||
if (QThread::currentThread() != thread()) {
|
||||
BLOCKING_INVOKE_METHOD(this, "loadBookmark", Q_ARG(QString, bookmarkName));
|
||||
|
|
|
@ -43,6 +43,7 @@ public slots:
|
|||
void saveBookmark(const QString& bookmarkName);
|
||||
void loadBookmark(const QString& bookmarkName);
|
||||
void removeBookmark(const QString& bookmarkName);
|
||||
void updateAvatarEntities(const QVariantList& avatarEntities);
|
||||
QVariantMap getBookmarks() { return _bookmarks; }
|
||||
|
||||
signals:
|
||||
|
|
|
@ -96,6 +96,7 @@ var adjustWearables = {
|
|||
}
|
||||
}
|
||||
|
||||
var currentAvatarWearablesBackup = null;
|
||||
var currentAvatar = getMyAvatar();
|
||||
var selectedAvatarEntityGrabbable = false;
|
||||
var selectedAvatarEntity = null;
|
||||
|
@ -128,10 +129,20 @@ function fromQml(message) { // messages are {method, params}, like json-rpc. See
|
|||
AvatarBookmarks.loadBookmark(message.name);
|
||||
break;
|
||||
case 'adjustWearablesOpened':
|
||||
currentAvatarWearablesBackup = getMyAvatarWearables();
|
||||
adjustWearables.setOpened(true);
|
||||
Entities.mousePressOnEntity.connect(onSelectedEntity);
|
||||
break;
|
||||
case 'adjustWearablesClosed':
|
||||
if(!message.save) {
|
||||
// revert changes using snapshot of wearables
|
||||
console.debug('reverting... ');
|
||||
if(currentAvatarWearablesBackup !== null) {
|
||||
AvatarBookmarks.updateAvatarEntities(currentAvatarWearablesBackup);
|
||||
sendToQml({'method' : 'wearablesUpdated', 'wearables' : currentAvatarWearablesBackup, 'avatarName' : message.avatarName})
|
||||
}
|
||||
}
|
||||
|
||||
adjustWearables.setOpened(false);
|
||||
ensureWearableSelected(null);
|
||||
Entities.mousePressOnEntity.disconnect(onSelectedEntity);
|
||||
|
|
Loading…
Reference in a new issue