From 4f353ec66859476d20c21c319ba5ad9a15b1b975 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Sat, 26 Sep 2020 00:38:53 -0400 Subject: [PATCH 01/26] New fonts for pictograms New fonts for pictograms since "hifi-glyphs.ttf" has no more room for new icons. This contains icons for copy, cut, paste, duplicate, undo, redo... and a V logo. --- interface/resources/fonts/vircadia_glyphs.ttf | Bin 0 -> 3568 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 interface/resources/fonts/vircadia_glyphs.ttf diff --git a/interface/resources/fonts/vircadia_glyphs.ttf b/interface/resources/fonts/vircadia_glyphs.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fe69e4bf6fe3eab1bc86ca68e963419b3db6149b GIT binary patch literal 3568 zcmd6qe{2-T7017C_I7XYcK2@2cenS`_TApyo_#iV$JyQk^P@Om2PmWwB(8A-=4u@5 zV6d?R1(GUhs9K5g2k8$*Q7YPshM)>5DM{5zNu;R!Q>y+EwJ4QRlvZk_@<%HrZK_0# za;|1?v5=dPM*XL=+S$*|y!Yn4cQdoIAOIR3hk$!WM(*4BASZKkDwcE zfc6rAjxX%4)TXaa9s+0#!2Zd@jrqWEq6pAUfOZ{hEY2@2K>)PN0OW(SCm)QS^t}%V zV}Nvdda7|Cfd{q&xBhb^OxZuLFJ$Ak56qEk2AZI1gy^00zNhBf#_g(f22U>;DNw zxCsD%_>MZU{EPtX5_^vO3&vYpI_#C^b%61>!7e$LZZE3SqT=iDI?Y^@oVHD_n85bY zdk_J3hP@2nZ0kvX#A>=V&aJ}zTrOi{V`JEa47R#Hyx?>>GPI9Rt7TIy0qksn!ymKr9UrS zz1>TaoW!;qCvQtQ)2kS5jP;Q{#%4JO{8j2X} zC>k;PvNd}k)NhHQe!DMQGukOSUW(PrRo*4 z`FpckHSLN?rEIm@YzryWt>~|s6O7|wG+#&@Ts!Om~c59U)`68A4r5`Kc9yplIUiK*jZ%J zkNYu$<3QMsbx_RkO06qqbW)ItWtOvw)Ltq zOOdw^^mB=P-6kt%@@6M9uF~fy#?zXUidKcb;SY7yCB{7AfJg8!#$t&~W>Cw7D5pw- zf9;xBBrl8cL@=spy*|doP?V5P#Wgfk-g2GkZUlmbswpU; zu2fa^iNSI}kF`Y`%rDqO$B7AIsv2rrosM`I^RJ1g1Hp1!_=^x|zRQ?Ws^oRi*AYtS z!GzwnGkjKLBrrix8h{sRsBD-$hafsJgi*}m37iHBIn&xe{q{QIYdsG(OQQTEsHrb7mZMG?XJx|*^r+F^@6dzJ{*+k#>*#s>FmhnQ%4_|TbRkW z(=q3*e#-{m&&2^VX9hgp{*7Ya02^< zMk~7wQ(dL4Gxq-Op8ZchwxeA3v9OuWMVZpo#psz;QfYcA^u(gl}8@X}R&vhn!bb4iN{9gtjR2*7q(Kn?e}>_HjdcbV^nZ@Vm^mjW(( z!DzS3G8pY~*#|}wF8je~%4G$N4!Nv?(NUK*F#3wi0WkWi%Q`yfw96p`=tX4sfe*(q zg9S{YfdiO90~0uiS)9Z?rm+YdpIMk}9GGcL9GpElKfMU-!W0hT7-rGH05rN zwYvJ#@~|T672_?t-Ad_yU*9>*mBV~;@;~OJyt1gyp2Hv@j{+f5(BlZw(h`_6 e)481C*dqvh#lUl$b?0m0&D~GG!?kYz-uX8H`r}vt literal 0 HcmV?d00001 From 08038fb1bcfe96bab892f5d8e7ea3d82be8a76bb Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Sat, 26 Sep 2020 00:42:19 -0400 Subject: [PATCH 02/26] New css for new buttons and icons New css for new buttons and icons for the Create App. new HMD button for copy, cut, paste, duplicate, undo and redo. --- scripts/system/html/css/edit-style.css | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/scripts/system/html/css/edit-style.css b/scripts/system/html/css/edit-style.css index ada8116a0d..8a381ff4ad 100644 --- a/scripts/system/html/css/edit-style.css +++ b/scripts/system/html/css/edit-style.css @@ -65,6 +65,14 @@ url(../fonts/hifi-glyphs.ttf); } +@font-face { + font-family: Vircadia-Glyphs; + src: url(../../../../resources/fonts/vircadia_glyphs.ttf), + url(../../../../fonts/vircadia_glyphs.ttf), + url(../../../../interface/resources/fonts/vircadia_glyphs.ttf), + url(../fonts/vircadia_glyphs.ttf); +} + * { margin: 0; padding: 0; @@ -407,6 +415,14 @@ input[type=button].glyph, button.hifi-edit-button.glyph { padding: 0; } +input[type=button].vglyph, button.hifi-edit-button.vglyph { + font-family: Vircadia-Glyphs; + font-size: 20px; + text-transform: none; + min-width: 32px; + padding: 0; +} + input[type=button].red, button.hifi-edit-button.red { color: #fff; background-color: #94132e; @@ -417,6 +433,16 @@ input[type=button].blue, button.hifi-edit-button.blue { background-color: #1080b8; background: linear-gradient(#00b4ef 20%, #1080b8 100%); } +input[type=button].orange, button.hifi-edit-button.orange { + color: #fff; + background-color: #8f5100; + background: linear-gradient(#d97b00 20%, #8f5100 100%); +} +input[type=button].green, button.hifi-edit-button.green { + color: #fff; + background-color: #078a00; + background: linear-gradient(#00cc07 20%, #078a00 100%); +} input[type=button].white, button.hifi-edit-button.white { color: #121212; background-color: #afafaf; @@ -435,6 +461,14 @@ input[type=button].blue:enabled:hover, button.hifi-edit-button.blue:enabled:hove background: linear-gradient(#00b4ef, #00b4ef); border: none; } +input[type=button].orange:enabled:hover, button.hifi-edit-button.orange:enabled:hover { + background: linear-gradient(#d97b00, #d97b00); + border: none; +} +input[type=button].green:enabled:hover, button.hifi-edit-button.green:enabled:hover { + background: linear-gradient(#00cc07, #00cc07); + border: none; +} input[type=button].white:enabled:hover, button.hifi-edit-button.white:enabled:hover { background: linear-gradient(#fff, #fff); border: none; @@ -449,6 +483,12 @@ input[type=button].red:active, button.hifi-edit-button.red:active { input[type=button].blue:active, button.hifi-edit-button.blue:active { background: linear-gradient(#1080b8, #1080b8); } +input[type=button].orange:active, button.hifi-edit-button.orange:active { + background: linear-gradient(#8f5100, #8f5100); +} +input[type=button].green:active, button.hifi-edit-button.green:active { + background: linear-gradient(#078a00, #078a00); +} input[type=button].white:active, button.hifi-edit-button.white:active { background: linear-gradient(#afafaf, #afafaf); } From ab45a32feaea289eb59a7a5150ddb2a7e08159f9 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Sat, 26 Sep 2020 00:46:32 -0400 Subject: [PATCH 03/26] Add new button in HMD Add new button in HMD: - add undo and redo support - add HMD detection --- scripts/system/create/entityList/entityList.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/scripts/system/create/entityList/entityList.js b/scripts/system/create/entityList/entityList.js index b68dcf80ba..644e68bec8 100644 --- a/scripts/system/create/entityList/entityList.js +++ b/scripts/system/create/entityList/entityList.js @@ -3,6 +3,7 @@ // entityList.js // // Copyright 2014 High Fidelity, Inc. +// Copyright 2020 Vircadia contributors. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -73,7 +74,7 @@ EntityListTool = function(shouldUseEditTabletApp) { that.setVisible = function(newVisible) { visible = newVisible; webView.setVisible(shouldUseEditTabletApp() && visible); - entityListWindow.setVisible(!shouldUseEditTabletApp() && visible); + entityListWindow.setVisible(!shouldUseEditTabletApp() && visible); }; that.isVisible = function() { @@ -163,6 +164,12 @@ EntityListTool = function(shouldUseEditTabletApp) { } that.sendUpdate = function() { + + emitJSONScriptEvent({ + "type": "confirmHMDstate", + "isHmd": HMD.active + }); + PROFILE('Script-sendUpdate', function() { var entities = []; @@ -302,6 +309,10 @@ EntityListTool = function(shouldUseEditTabletApp) { SelectionDisplay.toggleSpaceMode(); } else if (data.type === 'keyUpEvent') { keyUpEventFromUIWindow(data.keyUpEvent); + } else if (data.type === 'undo') { + undoHistory.undo(); + } else if (data.type === 'redo') { + undoHistory.redo(); } }; From 41ef2fafce7b74d82ed71e8c56d0ed0f61e0c298 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Sat, 26 Sep 2020 00:50:49 -0400 Subject: [PATCH 04/26] Add 6 new buttons 4 buttons for HMD enforce to be hidden by default. (Copy - Cut - Paste - Duplicate) 2 button (Undo and Redo) --- scripts/system/create/entityList/html/entityList.html | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/system/create/entityList/html/entityList.html b/scripts/system/create/entityList/html/entityList.html index b7ff7cd4e4..c7c2d0e8bd 100644 --- a/scripts/system/create/entityList/html/entityList.html +++ b/scripts/system/create/entityList/html/entityList.html @@ -3,6 +3,7 @@ // // Created by Ryan Huffman on 19 Nov 2014 // Copyright 2014 High Fidelity, Inc. +// Copyright 2020 Vircadia contributors. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -30,6 +31,14 @@ + + + + +
+ + +
From d72f707862c12dd01f6f45832f17e68097581878 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Sat, 26 Sep 2020 00:55:16 -0400 Subject: [PATCH 05/26] Add the support for HMD buttons This adds the support for 6 new buttons: Copy-Cut-Paste-Duplicate-Undo-Redo It adds the automatic toggling of the HMD only buttons: Copy-Cut-Paste-Duplicate --- .../create/entityList/html/js/entityList.js | 49 ++++++++++++++++++- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/scripts/system/create/entityList/html/js/entityList.js b/scripts/system/create/entityList/html/js/entityList.js index b70e53ce15..b23b6b5403 100644 --- a/scripts/system/create/entityList/html/js/entityList.js +++ b/scripts/system/create/entityList/html/js/entityList.js @@ -2,6 +2,7 @@ // // Created by Ryan Huffman on 19 Nov 2014 // Copyright 2014 High Fidelity, Inc. +// Copyright 2020 Vircadia contributors. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -198,6 +199,12 @@ let elEntityTable, elRefresh, elToggleLocked, elToggleVisible, + elHmdCopy, + elHmdCut, + elHmdPaste, + elHmdDuplicate, + elUndo, + elRedo, elDelete, elFilterTypeMultiselectBox, elFilterTypeText, @@ -233,7 +240,7 @@ const PROFILE = !ENABLE_PROFILING ? PROFILE_NOOP : function(name, fn, args) { console.log("PROFILE-Web " + profileIndent + "(" + name + ") End " + delta + "ms"); }; -function loaded() { +function loaded() { openEventBridge(function() { elEntityTable = document.getElementById("entity-table"); elEntityTableHeader = document.getElementById("entity-table-header"); @@ -242,6 +249,12 @@ function loaded() { elRefresh = document.getElementById("refresh"); elToggleLocked = document.getElementById("locked"); elToggleVisible = document.getElementById("visible"); + elHmdCopy = document.getElementById("hmdcopy"); + elHmdCut = document.getElementById("hmdcut"); + elHmdPaste = document.getElementById("hmdpaste"); + elHmdDuplicate = document.getElementById("hmdduplicate"); + elUndo = document.getElementById("undo"); + elRedo = document.getElementById("redo"); elDelete = document.getElementById("delete"); elFilterTypeMultiselectBox = document.getElementById("filter-type-multiselect-box"); elFilterTypeText = document.getElementById("filter-type-text"); @@ -270,6 +283,24 @@ function loaded() { elExport.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: 'export'})); }; + elHmdCopy.onclick = function() { + EventBridge.emitWebEvent(JSON.stringify({ type: 'copy' })); + }; + elHmdCut.onclick = function() { + EventBridge.emitWebEvent(JSON.stringify({ type: 'cut' })); + }; + elHmdPaste.onclick = function() { + EventBridge.emitWebEvent(JSON.stringify({ type: 'paste' })); + }; + elHmdDuplicate.onclick = function() { + EventBridge.emitWebEvent(JSON.stringify({ type: 'duplicate' })); + }; + elUndo.onclick = function() { + EventBridge.emitWebEvent(JSON.stringify({ type: 'undo' })); + }; + elRedo.onclick = function() { + EventBridge.emitWebEvent(JSON.stringify({ type: 'redo' })); + }; elDelete.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: 'delete' })); }; @@ -1364,10 +1395,12 @@ function loaded() { } })); }, false); - + if (window.EventBridge !== undefined) { EventBridge.scriptEventReceived.connect(function(data) { + data = JSON.parse(data); + if (data.type === "clearEntityList") { clearEntities(); } else if (data.type === "selectionUpdate") { @@ -1395,6 +1428,18 @@ function loaded() { removeEntities(data.ids); } else if (data.type === "setSpaceMode") { setSpaceMode(data.spaceMode); + } else if (data.type === "confirmHMDstate") { + if (data.isHmd) { + document.getElementById("hmdcopy").style.display = "inline"; + document.getElementById("hmdcut").style.display = "inline"; + document.getElementById("hmdpaste").style.display = "inline"; + document.getElementById("hmdduplicate").style.display = "inline"; + } else { + document.getElementById("hmdcopy").style.display = "none"; + document.getElementById("hmdcut").style.display = "none"; + document.getElementById("hmdpaste").style.display = "none"; + document.getElementById("hmdduplicate").style.display = "none"; + } } }); } From 6ecbbd258b8bce2368beb3bc21c40e4459015930 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Sun, 27 Sep 2020 15:22:00 -0400 Subject: [PATCH 06/26] Fix: Reset Landscape mode in HMD Fix: Reset Landscape mode in HMD In HMD, clicking on the button "Open this Domain's Asset server" is reverting the tablet to "portrait" mode This fix forces the mode to return to Landscape if from the Asset server we click on the "Properties" tab. --- scripts/system/create/edit.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js index e01e761cb4..2fb38efad7 100644 --- a/scripts/system/create/edit.js +++ b/scripts/system/create/edit.js @@ -2339,6 +2339,10 @@ var PropertiesTool = function (opts) { }; function updateSelections(selectionUpdated, caller) { + if (HMD.active){ + webView.setLandscape(true); + } + if (blockPropertyUpdates) { return; } From 3f98cd49340b8a7b820332aa0899e35d39c2a9a7 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Sun, 27 Sep 2020 15:23:17 -0400 Subject: [PATCH 07/26] Fix: Reset Landscape mode in HMD Fix: Reset Landscape mode in HMD In HMD, clicking on the button "Open this Domain's Asset server" is reverting the tablet to "portrait" mode This fix forces the mode to return to Landscape if from the Asset server we click on the "List" tab. --- scripts/system/create/entityList/entityList.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/system/create/entityList/entityList.js b/scripts/system/create/entityList/entityList.js index 644e68bec8..3efa95dc07 100644 --- a/scripts/system/create/entityList/entityList.js +++ b/scripts/system/create/entityList/entityList.js @@ -164,7 +164,10 @@ EntityListTool = function(shouldUseEditTabletApp) { } that.sendUpdate = function() { - + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + if (HMD.active){ + tablet.setLandscape(true); + } emitJSONScriptEvent({ "type": "confirmHMDstate", "isHmd": HMD.active From c2064eed894c39f94a91730b8b98fc00b5e06ffd Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Sun, 27 Sep 2020 23:49:48 -0400 Subject: [PATCH 08/26] Fix a bug about tablet stuck in Landscape Fix a bug about tablet stuck in Landscape when the create app was open in desktop and you put your VR Headset on, then next time you open the tablet it was in landscape mode. (because a refresh was happening after the landscape set to false at the closure) Now the condition is geared to deal with the situation. --- scripts/system/create/edit.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js index 2fb38efad7..b051c19800 100644 --- a/scripts/system/create/edit.js +++ b/scripts/system/create/edit.js @@ -824,7 +824,7 @@ var toolBar = (function () { HMD.displayModeChanged.connect(function() { if (isActive) { - tablet.gotoHomeScreen(); + tablet.gotoHomeScreen(); } that.setActive(false); }); @@ -2339,8 +2339,12 @@ var PropertiesTool = function (opts) { }; function updateSelections(selectionUpdated, caller) { - if (HMD.active){ + if (HMD.active && visible){ webView.setLandscape(true); + } else { + if (!visible) { + webView.setLandscape(false); + } } if (blockPropertyUpdates) { From 5047cf338fbdd8f8e1db0338a47b370af59800fe Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Mon, 28 Sep 2020 00:36:42 -0400 Subject: [PATCH 09/26] HMD: Make the 2 buttons visible without scrolling HMD: Make the 2 buttons visible without scrolling In HMD, the 2 buttons: - Open This Domain's Asset Server - Import Entities (.json) were not visible without scrolling. people would not even notice their presence This fix adjust the spacing and the margin to have the entities button on 2 rows when the UI is in landscape mode this way the button are visible. --- scripts/system/create/qml/EditTabView.qml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/scripts/system/create/qml/EditTabView.qml b/scripts/system/create/qml/EditTabView.qml index a0cff70d50..53f6068424 100644 --- a/scripts/system/create/qml/EditTabView.qml +++ b/scripts/system/create/qml/EditTabView.qml @@ -55,18 +55,18 @@ TabBar { font.pixelSize: 14 font.bold: true anchors.top: parent.top - anchors.topMargin: 28 + anchors.topMargin: 30 anchors.left: parent.left - anchors.leftMargin: 28 + anchors.leftMargin: 30 } Flow { id: createEntitiesFlow - spacing: 35 + spacing: 20 anchors.right: parent.right - anchors.rightMargin: 55 + anchors.rightMargin: 30 anchors.left: parent.left - anchors.leftMargin: 55 + anchors.leftMargin: 30 anchors.top: parent.top anchors.topMargin: 70 @@ -186,9 +186,9 @@ TabBar { color: hifi.buttons.black colorScheme: hifi.colorSchemes.dark anchors.right: parent.right - anchors.rightMargin: 55 + anchors.rightMargin: 30 anchors.left: parent.left - anchors.leftMargin: 55 + anchors.leftMargin: 30 anchors.top: createEntitiesFlow.bottom anchors.topMargin: 35 onClicked: { @@ -205,9 +205,9 @@ TabBar { color: hifi.buttons.black colorScheme: hifi.colorSchemes.dark anchors.right: parent.right - anchors.rightMargin: 55 + anchors.rightMargin: 30 anchors.left: parent.left - anchors.leftMargin: 55 + anchors.leftMargin: 30 anchors.top: assetServerButton.bottom anchors.topMargin: 20 onClicked: { From e1e09546cfb3ee421a37e67787a7174280b37239 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Mon, 28 Sep 2020 23:07:16 -0400 Subject: [PATCH 10/26] Add HMD MultiSelect icon Add HMD MultiSelect icon --- interface/resources/fonts/vircadia_glyphs.ttf | Bin 3568 -> 4116 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/interface/resources/fonts/vircadia_glyphs.ttf b/interface/resources/fonts/vircadia_glyphs.ttf index fe69e4bf6fe3eab1bc86ca68e963419b3db6149b..33b794fb0d6408dfb816d4b8047a745c8edc2361 100644 GIT binary patch literal 4116 zcmd5+(vpct)nVsECW@mT1w>D%+kX;E7gn$sDfh-{= zV6wSega<@L9xxBFP{YNF$|VS5VNpI*MgNr_ep%&c{KdQ%}N zg_IATuI}^o>HmJt|DV$!00!=age&LguUY@qyT*SDBu@hv`1r+h^B6$}Nd6AM;3uwL z+1>H;t&0F{1h8f6u7y2?x!e>$Cjr{9ePREer6ou}^49>=?K=;BX6)6;+X3ljAb!D) zZ3{Q&wAU8_`~iT!W5>1yc{?2iCs{0h2&kvO@MT<(7$Wp zwmrBG#{ilJP+DBrwQYLh%mG0EHo*S6XZQXC_#<8hl1Bi{Lik2N`QU?{8`9uxM0iP1g}JJEXuV9$tG_IN1i+-8O&CLV+m4hv2S$JRt-61$b& zh77QK*z*7m_j`I1zHFtA`gi93GabO@8ys}G=La7VH}ntQNpE5OQH4> z)(W)r=cS*WYc26GzDFxyt0xM*AZ9XWF3V!>QnW=cO9m)_`9)Kwmv*;=oiYdRkbl@cMGQmdq2o05{kL9 zGjAFliN|PwcyUYfYn+~G7-pt;WR%6&Q1g;PH?EI0bs8OOjnZhbR%4&alzZ36@}OxX zBtEomUDK0d<`_NL?)@}bC=7ITW4_Zdh$OltSoz4s?`F5kpv3?tM*&iaV@GQ@Y@jkm4?{f$$s4VcNc#||#4$=*pKmKa@GOUdy;E0;>lHBsT&j1aBxfZlm=$Z;HZ z@Wnybah&{bG*OYXe)kr=luxD8sr-n>Ip^Als_W`YO`Xeerbx0JJE3w#kGBl*)oA51 zHdi(;#dSMf@Qhl`i?dwbwz+!h6+PaH>j_QM1mMaOx}DCQ&e`d-ojaXN+jJRMmD4I$ z6t13DRNi|dozBy-d^(-b5}K~|Zc=qp;|7x$5tTSskE^HFS%JOnTW?^A~`83wykNy_56ZMr4!HJ7K3yx29H4*LTW1Cff^gH>x?wr3g;_~VkQ0QTW`H$%L8{@-fqW9V;;}O*r1Z3xTH0k zjP6xev|FtfTk9k=c8}3;n9;CR;3{ zx{^e*X?DZrn6&Be3NP2+$LBE1wz5M=z(F13z_3-dGSzan-1Y5ndlqQQQmjd_xrga7 zQSSN;QPl(2xsY6DH#5B-)7o6MsjIyo(M7rHaW~a_E#-MB8cDf7Otn&@17oVXr}ze4 z)qBcqH_7fjl`z^P19a6BRJIERyZ5GDC|qw@^3qVC%4KK9UA+onE>b;D(= z{9jnuJI?Mn^TiKs=hJ8QiZ}ulI(GKVNr*+5pumYRgMxO1C0N)L;TV!Q9AOy-o{KPt zfj>o90paZkt024+;W&tv54Q;r@n~EFkse_kMCk|{Ao3z?f@mtLwrxMSb77xgnK_TAbUtlqCX!M*%k^F@@8ftM{k7PJeb|p%Lc2=npp6bX zA``FOwr~F}yBABHcBeDmw}09C^K4#!NVsy=hQ7Za{`p>;mu>vdk$L|g)cMT}YrmMm y8ir9v15J#eg;9)QMMz9bOJL!O(*Zc4OoAj&R5fA#$*1=qR%#Qy?AJ{UXz literal 3568 zcmd6qe{2-T7017C_I7XYcK2@2cenS`_TApyo_#iV$JyQk^P@Om2PmWwB(8A-=4u@5 zV6d?R1(GUhs9K5g2k8$*Q7YPshM)>5DM{5zNu;R!Q>y+EwJ4QRlvZk_@<%HrZK_0# za;|1?v5=dPM*XL=+S$*|y!Yn4cQdoIAOIR3hk$!WM(*4BASZKkDwcE zfc6rAjxX%4)TXaa9s+0#!2Zd@jrqWEq6pAUfOZ{hEY2@2K>)PN0OW(SCm)QS^t}%V zV}Nvdda7|Cfd{q&xBhb^OxZuLFJ$Ak56qEk2AZI1gy^00zNhBf#_g(f22U>;DNw zxCsD%_>MZU{EPtX5_^vO3&vYpI_#C^b%61>!7e$LZZE3SqT=iDI?Y^@oVHD_n85bY zdk_J3hP@2nZ0kvX#A>=V&aJ}zTrOi{V`JEa47R#Hyx?>>GPI9Rt7TIy0qksn!ymKr9UrS zz1>TaoW!;qCvQtQ)2kS5jP;Q{#%4JO{8j2X} zC>k;PvNd}k)NhHQe!DMQGukOSUW(PrRo*4 z`FpckHSLN?rEIm@YzryWt>~|s6O7|wG+#&@Ts!Om~c59U)`68A4r5`Kc9yplIUiK*jZ%J zkNYu$<3QMsbx_RkO06qqbW)ItWtOvw)Ltq zOOdw^^mB=P-6kt%@@6M9uF~fy#?zXUidKcb;SY7yCB{7AfJg8!#$t&~W>Cw7D5pw- zf9;xBBrl8cL@=spy*|doP?V5P#Wgfk-g2GkZUlmbswpU; zu2fa^iNSI}kF`Y`%rDqO$B7AIsv2rrosM`I^RJ1g1Hp1!_=^x|zRQ?Ws^oRi*AYtS z!GzwnGkjKLBrrix8h{sRsBD-$hafsJgi*}m37iHBIn&xe{q{QIYdsG(OQQTEsHrb7mZMG?XJx|*^r+F^@6dzJ{*+k#>*#s>FmhnQ%4_|TbRkW z(=q3*e#-{m&&2^VX9hgp{*7Ya02^< zMk~7wQ(dL4Gxq-Op8ZchwxeA3v9OuWMVZpo#psz;QfYcA^u(gl}8@X}R&vhn!bb4iN{9gtjR2*7q(Kn?e}>_HjdcbV^nZ@Vm^mjW(( z!DzS3G8pY~*#|}wF8je~%4G$N4!Nv?(NUK*F#3wi0WkWi%Q`yfw96p`=tX4sfe*(q zg9S{YfdiO90~0uiS)9Z?rm+YdpIMk}9GGcL9GpElKfMU-!W0hT7-rGH05rN zwYvJ#@~|T672_?t-Ad_yU*9>*mBV~;@;~OJyt1gyp2Hv@j{+f5(BlZw(h`_6 e)481C*dqvh#lUl$b?0m0&D~GG!?kYz-uX8H`r}vt From a394b427d4616a54a0672161bd2d814b3b77232f Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Mon, 28 Sep 2020 23:08:48 -0400 Subject: [PATCH 11/26] Add HMD MultiSelect button Add HMD MultiSelect button --- scripts/system/create/entityList/html/entityList.html | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/system/create/entityList/html/entityList.html b/scripts/system/create/entityList/html/entityList.html index c7c2d0e8bd..fea3227951 100644 --- a/scripts/system/create/entityList/html/entityList.html +++ b/scripts/system/create/entityList/html/entityList.html @@ -31,6 +31,7 @@
+ From 427351bcd83493531c17c50f43c5b966f7584dfe Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Mon, 28 Sep 2020 23:13:18 -0400 Subject: [PATCH 12/26] Add a HMD MultiSelect button Add a HMD MultiSelect button Since it's impossible in HDM to do a multiple selection This adds a MultiSelect button (available in HMD only) When active, the selection in the list behaves like having CTRL pressed When inactive (default value) the selection in the list behaves as before (on item only) --- .../create/entityList/html/js/entityList.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/scripts/system/create/entityList/html/js/entityList.js b/scripts/system/create/entityList/html/js/entityList.js index b23b6b5403..3f77d11e57 100644 --- a/scripts/system/create/entityList/html/js/entityList.js +++ b/scripts/system/create/entityList/html/js/entityList.js @@ -165,6 +165,7 @@ let selectedEntities = []; let entityList = null; // The ListView +let hmdMultiSelectMode = false; /** * @type EntityListContextMenu */ @@ -199,6 +200,7 @@ let elEntityTable, elRefresh, elToggleLocked, elToggleVisible, + elHmdMultiSelect, elHmdCopy, elHmdCut, elHmdPaste, @@ -249,6 +251,7 @@ function loaded() { elRefresh = document.getElementById("refresh"); elToggleLocked = document.getElementById("locked"); elToggleVisible = document.getElementById("visible"); + elHmdMultiSelect = document.getElementById("hmdmultiselect"); elHmdCopy = document.getElementById("hmdcopy"); elHmdCut = document.getElementById("hmdcut"); elHmdPaste = document.getElementById("hmdpaste"); @@ -283,6 +286,15 @@ function loaded() { elExport.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: 'export'})); }; + elHmdMultiSelect.onclick = function() { + if (hmdMultiSelectMode) { + elHmdMultiSelect.className = "vglyph"; + hmdMultiSelectMode = false; + } else { + elHmdMultiSelect.className = "white vglyph"; + hmdMultiSelectMode = true; + } + }; elHmdCopy.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: 'copy' })); }; @@ -569,7 +581,7 @@ function loaded() { let selection = [entityID]; let controlKey = window.navigator.platform.startsWith("Mac") ? clickEvent.metaKey : clickEvent.ctrlKey; - if (controlKey) { + if (controlKey || hmdMultiSelectMode) { let selectedIndex = selectedEntities.indexOf(entityID); if (selectedIndex >= 0) { selection = []; @@ -1430,11 +1442,13 @@ function loaded() { setSpaceMode(data.spaceMode); } else if (data.type === "confirmHMDstate") { if (data.isHmd) { + document.getElementById("hmdmultiselect").style.display = "inline"; document.getElementById("hmdcopy").style.display = "inline"; document.getElementById("hmdcut").style.display = "inline"; document.getElementById("hmdpaste").style.display = "inline"; document.getElementById("hmdduplicate").style.display = "inline"; } else { + document.getElementById("hmdmultiselect").style.display = "none"; document.getElementById("hmdcopy").style.display = "none"; document.getElementById("hmdcut").style.display = "none"; document.getElementById("hmdpaste").style.display = "none"; From 4f3f2a079e42574f1416d107cca26b274b25af7f Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Wed, 30 Sep 2020 00:37:59 -0400 Subject: [PATCH 13/26] Added Parent and Unparent icon Added Parent and Unparent icons: Link (K) / Unlink (L) --- interface/resources/fonts/vircadia_glyphs.ttf | Bin 4116 -> 4660 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/interface/resources/fonts/vircadia_glyphs.ttf b/interface/resources/fonts/vircadia_glyphs.ttf index 33b794fb0d6408dfb816d4b8047a745c8edc2361..b6a8c2e7ad4c30ed5d6d713f6590cae1f5a27f10 100644 GIT binary patch delta 2454 zcmb7GYit}>6+Y+QnL9H(@5j#Uu6JkGyX$?~-i_Dm9mjE0#$mVBC-&}}getfI z=4}A*4?fUnuDrSYZ2+7FfW_t2rL~?1DgglA2Eb20v~+rHV*@CFc@qG{hfY3n{MC!c z&jHXi0C{TV*wSZ{)-#s?;7jLPO91EqKyhXD%=tnZmjUo+0I=)i!^=zY zN3FL2=oA3tSC`JO!GjP17zKdbsioCpqr-R30BAP=$UoN}K79r)xD8;w3;=sJlS6>p z&wGFSj6VKvkm zrL>c|+)p@?t?ch<3fe$L!T!N&KlW#e1u|z9x-%T-Yif+L+~sP5a_V5Xi>0RBJ3md% z*7g`iA1bwg_j=))X62NYIZX{6_I!38w zQO9zr5PqLcbeaT$^&kO<+dIIiS#%FNkcQ@$t?B9>Cw zj%w`gQK(wP>hZBRg;e)@G%6P5jRDmt8eT1DGDK!LSih3Xy+>p!ktiUCj8NNh$&*O< zbh=_1IWHCkp+wUhyI}G>$0tf=T+{m!i9D5!YQ{|{60g@a!?oi}Bu0n#p2G=3`P7hU z4W(@!Q4SJmO|K`C)t{na;;G`c*!@DhMqL6%93MWqDT=D38kSaPNEkc68plh zh@Z>9$K%^6!?KK2Rc4Gaxhg7(_;y8MyhH@T*z2Jv`6Py6MH(f4CE=2k;E-T8d`wCc zRS2J#%AH;Sj1OYGd3V`9c*jf8dTdDn3*B3&@5z;m`FPyaWRd3)Igt}Y%a-N7zMds~ z=Io8v&U3t`>t?|(mA2nAntZglJyRcR4aF^8B~cGMAd$o5S;zz6h>9cq$T|@Pq8=cE zhC(YM!Uuw%M5BAtTTB=GWKDMjq#U6V62h3KJMlt(aF}Gzzjos+YPyxEk8Ed7UbiQd zu~YZnGf^!1SxptiXp5lG12(x#o&^_La4!J1Js^9Ft=Qj(qj>gR|Y=T}3OVZ|9SW zCJ}BYpAeW#sj7RF;)F#Oj&StwrA);H4)(zWStgHw3`rP(0HDt-m`6ftA)>KuqyMM9Ln)Zhara9Ex zl;sQ29+(1~JV##q5bTb-a62Cp?$Bln^rL|0y zQNQD-XVa^`uiB_(5@xHl+CoJc^~Y!YRo_<}qHbx|S6WArTw7UhEgNDfKkC=2zVEO4 zwMtGEZ7rjkt@YNaR`=b$;;26}?w|6jHD41QHKSUs_10=@WxaKj>KrggLoa!OyZ~{i zL1zfI!!FnlV0%Hi9wm^);b5d(M-2t$!UQ&OL>Tt`D1!zH&amfNC8lH0_L}W-9d!gB zccPH@0)e@n+n$}@F`wcqg?4ogcgzF-a@W@4&gD=j|P8EOftl;<=GI{HUc(z8Ew0 zg(>BdugOdt?fy0`NuzXqVM_A}8bA7$;?Q1W^BO^bLJ|6)1ZAi|6>88A12716XoSDf RGpL9E&@=Lf_mQg`{{cm^o+JPO delta 1882 zcmbVNYm8l06<%xYbM|?^?m73K`<(lJ%)NK++TosnsIv<0MAs=bujp)%8H zIyHqKy+n{7*dH~ASOi1RRHQ(FKuI7>FeVTJKh#7cCK!zW_@j1WOo(J|&6!ao8e`&K z$=Z9bwb#z~t+gLlN{{6RfB;~?gTP?l!oux0fA`^uUjbO306_YSyXO~R6g&Xyw*WA5 z>uuwcOK%@t0lF9qm;u160C?bd|Mcp$Yrp`kUjl%9{J#6Y-u%t<0|4wE z0Oh)+WBq#)+J`Fu@H+tLEG-=y^u^j z?G6Df_s_1vo$wR@&H_MgrN4Y^c4~7CKz|y5{ z^1~1Ei6AR1Qa%x!5Sm<7Wm)}p@B?A(U(Rt6|I*p^H@5r$BE%s(cFwm16p4{(dTvpb1XYYzoTzD)<9?oL zPA%=nbw#vVrX6#meNx%N#5a+cm})zbcE%MEwQfA!Fs)Xc&aBAR@G2syjq#E#DkDz9 zwi328=eg%eL_{RUv|vnL2-f5>`oZ_*dv|?|?#7>TCoO7;?%DOJUSJSzuki)S$5ItRL=-J1xvr*_E6Ki(x%D^C3W8-gPBB}q z&s;xSIaxa8cDqw<#4-^OJW%KmU4#q(8aUIyty>@sxMZR<9iD`4r`yABXA1YAJ-q54 zNteo+?zl3uL_&$1Ml8C}Z1?Emo9k!Lv?9@o={fgQ=}QN?i#HUq#cW!V0T`sfr3-Ws zV$g!?0r1}rWk_jey5m-h)sU>>kDwn5Rj{eX2M6zLkJkJG=VL~u5V`BbiCd05aqgy8 zOF@m|JSxzLe9xPRZgm&s{!ntJo$hfcpT{Kc~v zVKHIG9FxVKRVPpO8N*(LzIs?-ht7}16XDw>z&!NmC=Koh6=G0<34pRwbi86dnxE{r zj>or0Gmhj;SBm)pk2+p#DnHq&^1?WF{n!rl$*p6B4Kd|F* z8%J&b4ZChP(oI=j&3uIWhcEf98oI-mRHHST#{JJ>-W{Y;?(p|+D)nW@naEG7>Vr85 zpR**m^f>+KGjKEi54>{T$^Q?Cz0YGDK11g=zx7{`{wL5^Hc!3!hUqahgP%K@;LlDP PjX;lNw9o#Oy&HcAN#aXr From 2a0d508bb6232ee9806a2bf274247776afe8e801 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Wed, 30 Sep 2020 00:39:36 -0400 Subject: [PATCH 14/26] Add HmdMultiSelection on inworld Selection Add HmdMultiSelection on inworld Selection --- scripts/system/create/edit.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js index b051c19800..739db3d411 100644 --- a/scripts/system/create/edit.js +++ b/scripts/system/create/edit.js @@ -104,6 +104,8 @@ var entityIconOverlayManager = new EntityIconOverlayManager(['Light', 'ParticleE } }); +var hmdMultiSelectMode = false; + var cameraManager = new CameraManager(); var grid = new Grid(); @@ -1131,7 +1133,11 @@ function handleOverlaySelectionToolUpdates(channel, message, sender) { var entity = entityIconOverlayManager.findEntity(data.overlayID); if (entity !== null) { - selectionManager.setSelections([entity], this); + if (hmdMultiSelectMode) { + selectionManager.addEntity(entity, true, this); + } else { + selectionManager.setSelections([entity], this); + } } } } From 94d030fb5cc403e9f1af75b3a511b22b98a1f4ef Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Wed, 30 Sep 2020 00:40:38 -0400 Subject: [PATCH 15/26] Add HmdMultiSelection on inworld Selection Add HmdMultiSelection on inworld Selection --- .../create/entitySelectionTool/entitySelectionTool.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/system/create/entitySelectionTool/entitySelectionTool.js b/scripts/system/create/entitySelectionTool/entitySelectionTool.js index e224e28fca..9b5ba8c495 100644 --- a/scripts/system/create/entitySelectionTool/entitySelectionTool.js +++ b/scripts/system/create/entitySelectionTool/entitySelectionTool.js @@ -104,7 +104,11 @@ SelectionManager = (function() { if (wantDebug) { print("setting selection to " + messageParsed.entityID); } - that.setSelections([messageParsed.entityID], that); + if (hmdMultiSelectMode) { + that.addEntity(messageParsed.entityID, true, that); + } else { + that.setSelections([messageParsed.entityID], that); + } } } else if (messageParsed.method === "clearSelection") { if (!SelectionDisplay.triggered() || SelectionDisplay.triggeredHand === messageParsed.hand) { From 16324ace16ee52a66b9f6101f8be6856783577d1 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Wed, 30 Sep 2020 00:42:15 -0400 Subject: [PATCH 16/26] Add parent and unparent buttons Add parent and unparent buttons --- scripts/system/create/entityList/entityList.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scripts/system/create/entityList/entityList.js b/scripts/system/create/entityList/entityList.js index 3efa95dc07..b611d006c5 100644 --- a/scripts/system/create/entityList/entityList.js +++ b/scripts/system/create/entityList/entityList.js @@ -15,6 +15,7 @@ var PROFILING_ENABLED = false; var profileIndent = ''; + const PROFILE_NOOP = function(_name, fn, args) { fn.apply(this, args); }; @@ -316,6 +317,12 @@ EntityListTool = function(shouldUseEditTabletApp) { undoHistory.undo(); } else if (data.type === 'redo') { undoHistory.redo(); + } else if (data.type === 'parent') { + parentSelectedEntities(); + } else if (data.type === 'unparent') { + unparentSelectedEntities(); + } else if (data.type === 'hmdMultiSelectMode') { + hmdMultiSelectMode = data.value; } }; From f1f58dcbd4db67f708e7e84a2c350b1199482fcf Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Wed, 30 Sep 2020 00:42:57 -0400 Subject: [PATCH 17/26] Add parent and unparent buttons Add parent and unparent buttons --- scripts/system/create/entityList/html/entityList.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/system/create/entityList/html/entityList.html b/scripts/system/create/entityList/html/entityList.html index fea3227951..26b6ec6f00 100644 --- a/scripts/system/create/entityList/html/entityList.html +++ b/scripts/system/create/entityList/html/entityList.html @@ -35,7 +35,11 @@ - + +
+ + +
From ff39a03b5d98d3cae08c97a78eef8b3fb883e483 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Wed, 30 Sep 2020 00:44:07 -0400 Subject: [PATCH 18/26] Add parent and unparent buttons Add parent and unparent buttons --- .../system/create/entityList/html/js/entityList.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/scripts/system/create/entityList/html/js/entityList.js b/scripts/system/create/entityList/html/js/entityList.js index 3f77d11e57..aa40d5286f 100644 --- a/scripts/system/create/entityList/html/js/entityList.js +++ b/scripts/system/create/entityList/html/js/entityList.js @@ -207,6 +207,8 @@ let elEntityTable, elHmdDuplicate, elUndo, elRedo, + elParent, + elUnparent, elDelete, elFilterTypeMultiselectBox, elFilterTypeText, @@ -258,6 +260,8 @@ function loaded() { elHmdDuplicate = document.getElementById("hmdduplicate"); elUndo = document.getElementById("undo"); elRedo = document.getElementById("redo"); + elParent = document.getElementById("parent"); + elUnparent = document.getElementById("unparent"); elDelete = document.getElementById("delete"); elFilterTypeMultiselectBox = document.getElementById("filter-type-multiselect-box"); elFilterTypeText = document.getElementById("filter-type-text"); @@ -294,6 +298,7 @@ function loaded() { elHmdMultiSelect.className = "white vglyph"; hmdMultiSelectMode = true; } + EventBridge.emitWebEvent(JSON.stringify({ type: 'hmdMultiSelectMode', value: hmdMultiSelectMode })); }; elHmdCopy.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: 'copy' })); @@ -307,12 +312,18 @@ function loaded() { elHmdDuplicate.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: 'duplicate' })); }; + elParent.onclick = function() { + EventBridge.emitWebEvent(JSON.stringify({ type: 'parent' })); + }; + elUnparent.onclick = function() { + EventBridge.emitWebEvent(JSON.stringify({ type: 'unparent' })); + }; elUndo.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: 'undo' })); }; elRedo.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: 'redo' })); - }; + }; elDelete.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: 'delete' })); }; From 64ad0b5afbdf3be71cf183ae388f2f0894f07472 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Wed, 30 Sep 2020 23:54:06 -0400 Subject: [PATCH 19/26] Add audioFeedback mechanism Add an audio feedback mechanism to play confirmation or rejection sound on specific actions that are not visually detectable. - Duplicate (mainly for the HMD use case where the new entity is generated at the exact same position) - Parent and Unparent (because it not visually detectable in HMD if the action was successful or not) --- .../create/audioFeedback/audioFeedback.js | 34 ++++++++++++++++++ .../audioFeedback/sounds/confirmation.mp3 | Bin 0 -> 65200 bytes .../create/audioFeedback/sounds/rejection.mp3 | Bin 0 -> 14209 bytes 3 files changed, 34 insertions(+) create mode 100644 scripts/system/create/audioFeedback/audioFeedback.js create mode 100644 scripts/system/create/audioFeedback/sounds/confirmation.mp3 create mode 100644 scripts/system/create/audioFeedback/sounds/rejection.mp3 diff --git a/scripts/system/create/audioFeedback/audioFeedback.js b/scripts/system/create/audioFeedback/audioFeedback.js new file mode 100644 index 0000000000..de94fb6efa --- /dev/null +++ b/scripts/system/create/audioFeedback/audioFeedback.js @@ -0,0 +1,34 @@ +// +// audioFeedback.js +// +// Created by Alezia Kurdis on September 30, 2020. +// Copyright 2020 Vircadia contributors +// +// This script add audio feedback (confirmation and rejection) for user interactions that require one. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +audioFeedback = (function() { + var that = {}; + + var confirmationSound = SoundCache.getSound(Script.resolvePath("./sounds/confirmation.mp3")); + var rejectionSound = SoundCache.getSound(Script.resolvePath("./sounds/rejection.mp3")); + + that.confirmation = function() { //Play a confirmation sound + var injector = Audio.playSound(confirmationSound, { + "volume": 0.3, + "localOnly": true + }); + } + + that.rejection = function() { //Play a rejection sound + var injector = Audio.playSound(rejectionSound, { + "volume": 0.3, + "localOnly": true + }); + } + + return that; +})(); \ No newline at end of file diff --git a/scripts/system/create/audioFeedback/sounds/confirmation.mp3 b/scripts/system/create/audioFeedback/sounds/confirmation.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..39143fce4fb01095034778c697714b9e24362c2b GIT binary patch literal 65200 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
  • mnvrCQA(9cq9 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 plxIWKBa&a3W^Bn5YZV Date: Wed, 30 Sep 2020 23:55:46 -0400 Subject: [PATCH 20/26] Add audio feedback on Duplicate Add an audio feedback mechanism to play confirmation or rejection sound on specific actions that are not visually detectable. here for "Duplicate" (mainly for the HMD use case where the new entity is generated at the exact same position) --- .../create/entitySelectionTool/entitySelectionTool.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scripts/system/create/entitySelectionTool/entitySelectionTool.js b/scripts/system/create/entitySelectionTool/entitySelectionTool.js index 9b5ba8c495..51608a2d87 100644 --- a/scripts/system/create/entitySelectionTool/entitySelectionTool.js +++ b/scripts/system/create/entitySelectionTool/entitySelectionTool.js @@ -319,6 +319,7 @@ SelectionManager = (function() { that.addChildrenEntities(originalEntityID, entitiesToDuplicate, entityHostTypes[i].entityHostType); } + var hasItFailed = false; // duplicate entities from above and store their original to new entity mappings and children needing re-parenting for (var i = 0; i < entitiesToDuplicate.length; i++) { var originalEntityID = entitiesToDuplicate[i]; @@ -365,6 +366,8 @@ SelectionManager = (function() { duplicatedChildrenWithOldParents[newEntityID] = properties.parentID; } originalEntityToNewEntityID[originalEntityID] = newEntityID; + } else { + hasItFailed = true; } } @@ -383,6 +386,11 @@ SelectionManager = (function() { } }); + if (!hasItFailed) { + audioFeedback.confirmation(); + } else { + audioFeedback.rejection(); + } return duplicatedEntityIDs; }; From a7ca92fb9bd64071960094bdf10f7b45f4cd724b Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Wed, 30 Sep 2020 23:58:12 -0400 Subject: [PATCH 21/26] Add an audio feedback on Parent/Unparent Add an audio feedback mechanism to play confirmation or rejection sound on specific actions that are not visually detectable. Here for Parent and Unparent (because it not visually detectable in HMD if the action was successful or not) Fix also a bug where the HMD multiselection could stay active after we return in Desktop mode Now it is deactivated when the create window are closed. --- scripts/system/create/edit.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js index 739db3d411..11d4dead86 100644 --- a/scripts/system/create/edit.js +++ b/scripts/system/create/edit.js @@ -34,7 +34,8 @@ Script.include([ "../libraries/entityIconOverlayManager.js", "../libraries/gridTool.js", "entityList/entityList.js", - "entitySelectionTool/entitySelectionTool.js" + "entitySelectionTool/entitySelectionTool.js", + "audioFeedback/audioFeedback.js" ]); var CreateWindow = Script.require('./modules/createWindow.js'); @@ -1700,6 +1701,7 @@ function unparentSelectedEntities() { var parentCheck = false; if (selectedEntities.length < 1) { + audioFeedback.rejection(); Window.notifyEditError("You must have an entity selected in order to unparent it."); return; } @@ -1712,12 +1714,14 @@ function unparentSelectedEntities() { return true; }); if (parentCheck) { + audioFeedback.confirmation(); if (selectedEntities.length > 1) { Window.notify("Entities unparented"); } else { Window.notify("Entity unparented"); } } else { + audioFeedback.rejection(); if (selectedEntities.length > 1) { Window.notify("Selected Entities have no parents"); } else { @@ -1725,6 +1729,7 @@ function unparentSelectedEntities() { } } } else { + audioFeedback.rejection(); Window.notifyEditError("You have nothing selected to unparent"); } } @@ -1732,6 +1737,7 @@ function parentSelectedEntities() { if (SelectionManager.hasSelection()) { var selectedEntities = selectionManager.selections; if (selectedEntities.length <= 1) { + audioFeedback.rejection(); Window.notifyEditError("You must have multiple entities selected in order to parent them"); return; } @@ -1748,11 +1754,14 @@ function parentSelectedEntities() { }); if (parentCheck) { + audioFeedback.confirmation(); Window.notify("Entities parented"); } else { + audioFeedback.rejection(); Window.notify("Entities are already parented to last"); } } else { + audioFeedback.rejection(); Window.notifyEditError("You have nothing selected to parent"); } } @@ -2349,6 +2358,7 @@ var PropertiesTool = function (opts) { webView.setLandscape(true); } else { if (!visible) { + hmdMultiSelectMode = false; webView.setLandscape(false); } } From 3882aad55194c7d76bee21da1a413f9a2ff3f342 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Tue, 6 Oct 2020 21:48:23 -0400 Subject: [PATCH 22/26] Minor code adjustments Minor code adjustments --- scripts/system/create/audioFeedback/audioFeedback.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system/create/audioFeedback/audioFeedback.js b/scripts/system/create/audioFeedback/audioFeedback.js index de94fb6efa..f1900d5716 100644 --- a/scripts/system/create/audioFeedback/audioFeedback.js +++ b/scripts/system/create/audioFeedback/audioFeedback.js @@ -2,7 +2,7 @@ // audioFeedback.js // // Created by Alezia Kurdis on September 30, 2020. -// Copyright 2020 Vircadia contributors +// Copyright 2020 Vircadia contributors. // // This script add audio feedback (confirmation and rejection) for user interactions that require one. // @@ -31,4 +31,4 @@ audioFeedback = (function() { } return that; -})(); \ No newline at end of file +})(); From e273c920a464f97221cce51aee5875c943096f1b Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Tue, 6 Oct 2020 21:50:24 -0400 Subject: [PATCH 23/26] Minor Code Adjustment Minor Code Adjustment --- scripts/system/create/edit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js index 11d4dead86..69cb04e9e5 100644 --- a/scripts/system/create/edit.js +++ b/scripts/system/create/edit.js @@ -2354,7 +2354,7 @@ var PropertiesTool = function (opts) { }; function updateSelections(selectionUpdated, caller) { - if (HMD.active && visible){ + if (HMD.active && visible) { webView.setLandscape(true); } else { if (!visible) { From 7c9808de409d8aa8cfc31635cf6f71f85a4f53fb Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Tue, 6 Oct 2020 21:52:40 -0400 Subject: [PATCH 24/26] Minor Code Adjustment Minor Code Adjustment --- scripts/system/create/entityList/entityList.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/create/entityList/entityList.js b/scripts/system/create/entityList/entityList.js index b611d006c5..4b8163968d 100644 --- a/scripts/system/create/entityList/entityList.js +++ b/scripts/system/create/entityList/entityList.js @@ -166,7 +166,7 @@ EntityListTool = function(shouldUseEditTabletApp) { that.sendUpdate = function() { var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - if (HMD.active){ + if (HMD.active) { tablet.setLandscape(true); } emitJSONScriptEvent({ From 37d694afa0165f7ce5aa15aa2597929a585c528f Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Tue, 6 Oct 2020 22:05:39 -0400 Subject: [PATCH 25/26] Minor Code Adjustments Minor Code Adjustments --- .../create/entitySelectionTool/entitySelectionTool.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/system/create/entitySelectionTool/entitySelectionTool.js b/scripts/system/create/entitySelectionTool/entitySelectionTool.js index 51608a2d87..007f253943 100644 --- a/scripts/system/create/entitySelectionTool/entitySelectionTool.js +++ b/scripts/system/create/entitySelectionTool/entitySelectionTool.js @@ -319,7 +319,7 @@ SelectionManager = (function() { that.addChildrenEntities(originalEntityID, entitiesToDuplicate, entityHostTypes[i].entityHostType); } - var hasItFailed = false; + var duplicateInterrupted = false; // duplicate entities from above and store their original to new entity mappings and children needing re-parenting for (var i = 0; i < entitiesToDuplicate.length; i++) { var originalEntityID = entitiesToDuplicate[i]; @@ -367,7 +367,7 @@ SelectionManager = (function() { } originalEntityToNewEntityID[originalEntityID] = newEntityID; } else { - hasItFailed = true; + duplicateInterrupted = true; } } @@ -386,10 +386,10 @@ SelectionManager = (function() { } }); - if (!hasItFailed) { - audioFeedback.confirmation(); - } else { + if (duplicateInterrupted) { audioFeedback.rejection(); + } else { + audioFeedback.confirmation(); } return duplicatedEntityIDs; }; From adf6652e24cf5ba3237fd319653e618f22556418 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Fri, 9 Oct 2020 22:14:53 -0400 Subject: [PATCH 26/26] Put "Cut" before Copy" to be standard Put "Cut" before Copy" to be standard --- scripts/system/create/entityList/html/entityList.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/create/entityList/html/entityList.html b/scripts/system/create/entityList/html/entityList.html index 26b6ec6f00..824ca380ec 100644 --- a/scripts/system/create/entityList/html/entityList.html +++ b/scripts/system/create/entityList/html/entityList.html @@ -32,8 +32,8 @@
  • - +