mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 02:03:11 +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);
|
adjustWearables.refreshWearable(message.entityID, message.wearableIndex, message.properties);
|
||||||
} else if(message.method === 'wearablesUpdated') {
|
} else if(message.method === 'wearablesUpdated') {
|
||||||
var wearablesModel = currentAvatarModel.get(0).wearables;
|
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();
|
wearablesModel.clear();
|
||||||
message.wearables.forEach(function(wearable) {
|
message.wearables.forEach(function(wearable) {
|
||||||
wearablesModel.append(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);
|
adjustWearables.refresh(root.currentAvatar);
|
||||||
} else if(message.method === 'bookmarkLoaded') {
|
} else if(message.method === 'bookmarkLoaded') {
|
||||||
setCurrentAvatar(message.reply.currentAvatar);
|
setCurrentAvatar(message.reply.currentAvatar);
|
||||||
|
@ -210,10 +221,10 @@ Rectangle {
|
||||||
emitSendToScript({'method' : 'deleteWearable', 'entityID' : id, 'avatarName' : avatarName});
|
emitSendToScript({'method' : 'deleteWearable', 'entityID' : id, 'avatarName' : avatarName});
|
||||||
}
|
}
|
||||||
onAdjustWearablesOpened: {
|
onAdjustWearablesOpened: {
|
||||||
emitSendToScript({'method' : 'adjustWearablesOpened'});
|
emitSendToScript({'method' : 'adjustWearablesOpened', 'avatarName' : avatarName});
|
||||||
}
|
}
|
||||||
onAdjustWearablesClosed: {
|
onAdjustWearablesClosed: {
|
||||||
emitSendToScript({'method' : 'adjustWearablesClosed'});
|
emitSendToScript({'method' : 'adjustWearablesClosed', 'save' : status, 'avatarName' : avatarName});
|
||||||
}
|
}
|
||||||
onWearableSelected: {
|
onWearableSelected: {
|
||||||
emitSendToScript({'method' : 'selectWearable', 'entityID' : id});
|
emitSendToScript({'method' : 'selectWearable', 'entityID' : id});
|
||||||
|
|
|
@ -16,7 +16,7 @@ Rectangle {
|
||||||
signal wearableDeleted(string avatarName, var id);
|
signal wearableDeleted(string avatarName, var id);
|
||||||
|
|
||||||
signal adjustWearablesOpened();
|
signal adjustWearablesOpened();
|
||||||
signal adjustWearablesClosed();
|
signal adjustWearablesClosed(bool status);
|
||||||
|
|
||||||
property bool modified: false;
|
property bool modified: false;
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
|
@ -27,20 +27,10 @@ Rectangle {
|
||||||
console.debug('modified: ', modified)
|
console.debug('modified: ', modified)
|
||||||
}
|
}
|
||||||
|
|
||||||
property var onButton2Clicked;
|
|
||||||
property var onButton1Clicked;
|
|
||||||
property var jointNames;
|
property var jointNames;
|
||||||
property var wearables: ({})
|
|
||||||
property string avatarName: ''
|
property string avatarName: ''
|
||||||
property var wearablesModel;
|
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) {
|
function open(avatar) {
|
||||||
adjustWearablesOpened();
|
adjustWearablesOpened();
|
||||||
console.debug('AdjustWearables.qml: open: ', JSON.stringify(avatar, null, '\t'));
|
console.debug('AdjustWearables.qml: open: ', JSON.stringify(avatar, null, '\t'));
|
||||||
|
@ -48,13 +38,15 @@ Rectangle {
|
||||||
visible = true;
|
visible = true;
|
||||||
avatarName = avatar.name;
|
avatarName = avatar.name;
|
||||||
wearablesModel = avatar.wearables;
|
wearablesModel = avatar.wearables;
|
||||||
wearables = {};
|
|
||||||
|
|
||||||
refresh(avatar);
|
refresh(avatar);
|
||||||
backupWearables(avatar);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function refresh(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();
|
wearablesCombobox.model.clear();
|
||||||
console.debug('AdjustWearables.qml: open: avatar.wearables.count: ', avatar.wearables.count);
|
console.debug('AdjustWearables.qml: open: avatar.wearables.count: ', avatar.wearables.count);
|
||||||
for(var i = 0; i < avatar.wearables.count; ++i) {
|
for(var i = 0; i < avatar.wearables.count; ++i) {
|
||||||
|
@ -109,9 +101,9 @@ Rectangle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function close() {
|
function close(status) {
|
||||||
visible = false;
|
visible = false;
|
||||||
adjustWearablesClosed();
|
adjustWearablesClosed(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
HifiConstants { id: hifi }
|
HifiConstants { id: hifi }
|
||||||
|
@ -324,19 +316,11 @@ Rectangle {
|
||||||
noText: "CANCEL"
|
noText: "CANCEL"
|
||||||
|
|
||||||
onYesClicked: function() {
|
onYesClicked: function() {
|
||||||
if(onButton2Clicked) {
|
root.close(true);
|
||||||
onButton2Clicked();
|
|
||||||
} else {
|
|
||||||
root.close();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onNoClicked: function() {
|
onNoClicked: function() {
|
||||||
if(onButton1Clicked) {
|
root.close(false);
|
||||||
onButton1Clicked();
|
|
||||||
} else {
|
|
||||||
root.close();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
void AvatarBookmarks::loadBookmark(const QString& bookmarkName) {
|
||||||
if (QThread::currentThread() != thread()) {
|
if (QThread::currentThread() != thread()) {
|
||||||
BLOCKING_INVOKE_METHOD(this, "loadBookmark", Q_ARG(QString, bookmarkName));
|
BLOCKING_INVOKE_METHOD(this, "loadBookmark", Q_ARG(QString, bookmarkName));
|
||||||
|
|
|
@ -43,6 +43,7 @@ public slots:
|
||||||
void saveBookmark(const QString& bookmarkName);
|
void saveBookmark(const QString& bookmarkName);
|
||||||
void loadBookmark(const QString& bookmarkName);
|
void loadBookmark(const QString& bookmarkName);
|
||||||
void removeBookmark(const QString& bookmarkName);
|
void removeBookmark(const QString& bookmarkName);
|
||||||
|
void updateAvatarEntities(const QVariantList& avatarEntities);
|
||||||
QVariantMap getBookmarks() { return _bookmarks; }
|
QVariantMap getBookmarks() { return _bookmarks; }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
|
@ -96,6 +96,7 @@ var adjustWearables = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var currentAvatarWearablesBackup = null;
|
||||||
var currentAvatar = getMyAvatar();
|
var currentAvatar = getMyAvatar();
|
||||||
var selectedAvatarEntityGrabbable = false;
|
var selectedAvatarEntityGrabbable = false;
|
||||||
var selectedAvatarEntity = null;
|
var selectedAvatarEntity = null;
|
||||||
|
@ -128,10 +129,20 @@ function fromQml(message) { // messages are {method, params}, like json-rpc. See
|
||||||
AvatarBookmarks.loadBookmark(message.name);
|
AvatarBookmarks.loadBookmark(message.name);
|
||||||
break;
|
break;
|
||||||
case 'adjustWearablesOpened':
|
case 'adjustWearablesOpened':
|
||||||
|
currentAvatarWearablesBackup = getMyAvatarWearables();
|
||||||
adjustWearables.setOpened(true);
|
adjustWearables.setOpened(true);
|
||||||
Entities.mousePressOnEntity.connect(onSelectedEntity);
|
Entities.mousePressOnEntity.connect(onSelectedEntity);
|
||||||
break;
|
break;
|
||||||
case 'adjustWearablesClosed':
|
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);
|
adjustWearables.setOpened(false);
|
||||||
ensureWearableSelected(null);
|
ensureWearableSelected(null);
|
||||||
Entities.mousePressOnEntity.disconnect(onSelectedEntity);
|
Entities.mousePressOnEntity.disconnect(onSelectedEntity);
|
||||||
|
|
Loading…
Reference in a new issue