diff --git a/assignment-client/src/avatars/AvatarMixerSlave.cpp b/assignment-client/src/avatars/AvatarMixerSlave.cpp
index d874100ca2..46ca51219d 100644
--- a/assignment-client/src/avatars/AvatarMixerSlave.cpp
+++ b/assignment-client/src/avatars/AvatarMixerSlave.cpp
@@ -157,11 +157,6 @@ qint64 AvatarMixerSlave::addChangedTraitsToBulkPacket(AvatarMixerClientData* lis
++simpleReceivedIt;
}
- if (bytesWritten > 0 && sendingAvatar->isCertifyFailed()) {
- // Resend identity packet if certification failed:
- sendingAvatar->setNeedsIdentityUpdate();
- }
-
// enumerate the received instanced trait versions
auto instancedReceivedIt = lastReceivedVersions.instancedCBegin();
while (instancedReceivedIt != lastReceivedVersions.instancedCEnd()) {
diff --git a/interface/resources/avatar/animations/emote_agree_thisorthat.fbx b/interface/resources/avatar/animations/emote_agree_thisorthat.fbx
deleted file mode 100644
index 582c197142..0000000000
Binary files a/interface/resources/avatar/animations/emote_agree_thisorthat.fbx and /dev/null differ
diff --git a/interface/resources/avatar/animations/emote_disagree_no.fbx b/interface/resources/avatar/animations/emote_disagree_no.fbx
deleted file mode 100644
index c5aac91f19..0000000000
Binary files a/interface/resources/avatar/animations/emote_disagree_no.fbx and /dev/null differ
diff --git a/interface/resources/avatar/animations/idle_LFF_all.fbx b/interface/resources/avatar/animations/idle_LFF_all.fbx
index 0344a270a7..66b82914ba 100644
Binary files a/interface/resources/avatar/animations/idle_LFF_all.fbx and b/interface/resources/avatar/animations/idle_LFF_all.fbx differ
diff --git a/interface/resources/avatar/animations/idle_RFF_all.fbx b/interface/resources/avatar/animations/idle_RFF_all.fbx
index 8aec6a33c0..80277ec9a6 100644
Binary files a/interface/resources/avatar/animations/idle_RFF_all.fbx and b/interface/resources/avatar/animations/idle_RFF_all.fbx differ
diff --git a/interface/resources/avatar/avatar-animation.json b/interface/resources/avatar/avatar-animation.json
index b23e1c74d9..f455389009 100644
--- a/interface/resources/avatar/avatar-animation.json
+++ b/interface/resources/avatar/avatar-animation.json
@@ -632,8 +632,8 @@
],
"data": {
"currentState": "seatedTalk02",
- "randomSwitchTimeMax": 10,
- "randomSwitchTimeMin": 1,
+ "randomSwitchTimeMax": 12,
+ "randomSwitchTimeMin": 7,
"states": [
{
"id": "seatedTalk02",
@@ -698,8 +698,8 @@
],
"data": {
"currentState": "seatedIdle01",
- "randomSwitchTimeMax": 10,
- "randomSwitchTimeMin": 1,
+ "randomSwitchTimeMax": 20,
+ "randomSwitchTimeMin": 10,
"states": [
{
"id": "seatedIdle01",
@@ -779,8 +779,8 @@
"currentState": "seatedReactionPositiveHeadNod",
"endFrame": 30,
"loopFlag": false,
- "randomSwitchTimeMax": 10,
- "randomSwitchTimeMin": 1,
+ "randomSwitchTimeMax": 12,
+ "randomSwitchTimeMin": 7,
"startFrame": 0,
"states": [
{
@@ -856,18 +856,22 @@
"startFrame": 0,
"states": [
{
+ "easingType": "easeInOutQuad",
"id": "seatedReactionNegativeDisagreeHeadshake",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "seatedReactionNegativeDisagreeDropHead",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
@@ -957,9 +961,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "seatedReactionRaiseHandOutro",
- "interpDuration": 1,
- "interpTarget": 1,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 0,
"resume": false,
"transitions": [
@@ -1038,9 +1044,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "seatedReactionApplaudLoop",
- "interpDuration": 5,
- "interpTarget": 5,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 0,
"resume": false,
"transitions": [
@@ -1051,9 +1059,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "seatedReactionApplaudOutro",
- "interpDuration": 1,
- "interpTarget": 1,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 0,
"resume": false,
"transitions": [
@@ -1132,9 +1142,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "seatedReactionPointLoop",
- "interpDuration": 5,
- "interpTarget": 5,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 0,
"resume": false,
"transitions": [
@@ -1145,9 +1157,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "seatedReactionPointOutro",
- "interpDuration": 1,
- "interpTarget": 1,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 0,
"resume": false,
"transitions": [
@@ -1197,10 +1211,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "seatedReactionPositive",
- "interpDuration": 6,
- "interpTarget": 6,
- "interpType": "snapshotPrev",
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "seatedTalkOverlay",
@@ -1233,10 +1248,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "seatedReactionNegative",
- "interpDuration": 6,
- "interpTarget": 6,
- "interpType": "snapshotPrev",
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "seatedReactionPositive",
@@ -1265,10 +1281,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "seatedReactionRaiseHand",
- "interpDuration": 6,
- "interpTarget": 6,
- "interpType": "snapshotPrev",
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "seatedReactionNegative",
@@ -1293,10 +1310,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "seatedReactionApplaud",
- "interpDuration": 6,
- "interpTarget": 6,
- "interpType": "snapshotPrev",
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "seatedReactionNegative",
@@ -1321,10 +1339,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "seatedReactionPoint",
- "interpDuration": 6,
- "interpTarget": 6,
- "interpType": "snapshotPrev",
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "seatedReactionNegative",
@@ -1457,63 +1476,77 @@
"randomSwitchTimeMin": 7,
"states": [
{
+ "easingType": "easeInOutQuad",
"id": "talk",
- "interpDuration": 20,
- "interpTarget": 20,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "talk02",
- "interpDuration": 20,
- "interpTarget": 20,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "talk03",
- "interpDuration": 20,
- "interpTarget": 20,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "talk04",
- "interpDuration": 20,
- "interpTarget": 20,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "talk_armsdown",
- "interpDuration": 20,
- "interpTarget": 20,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "talk_lefthand",
- "interpDuration": 20,
- "interpTarget": 20,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "talk_righthand",
- "interpDuration": 20,
- "interpTarget": 20,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
@@ -1588,36 +1621,44 @@
"randomSwitchTimeMin": 10,
"states": [
{
+ "easingType": "easeInOutQuad",
"id": "masterIdle1",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 30,
+ "interpTarget": 30,
+ "interpType": "evaluateBoth",
"priority": 0.25,
"resume": true,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "masterIdle2",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 30,
+ "interpTarget": 30,
+ "interpType": "evaluateBoth",
"priority": 0.25,
"resume": true,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "masterIdle3",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 30,
+ "interpTarget": 30,
+ "interpType": "evaluateBoth",
"priority": 0.25,
"resume": true,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "masterIdle4",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 30,
+ "interpTarget": 30,
+ "interpType": "evaluateBoth",
"priority": 0.25,
"resume": true,
"transitions": [
@@ -1742,72 +1783,88 @@
"currentState": "idle_once_slownod",
"states": [
{
+ "easingType": "easeInOutQuad",
"id": "idle_once_slownod",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "idle_once_headtilt",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "idle_once_shiftheelpivot",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "idleWS_all",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "idle_once_lookaround",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "idle_once_neckstretch",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "idle_once_lookleftright",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "idle_once_fidget",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
@@ -1827,7 +1884,8 @@
"endFrame": 80,
"loopFlag": false,
"startFrame": 1,
- "timeScale": 1,
+ "startFrameVar": "",
+ "timeScale": 0.65,
"url": "qrc:///avatar/animations/idle_LFF_all.fbx"
},
"id": "transitionToAltIdle1",
@@ -1840,7 +1898,7 @@
"endFrame": 80,
"loopFlag": false,
"startFrame": 1,
- "timeScale": 1,
+ "timeScale": 0.65,
"url": "qrc:///avatar/animations/idle_RFF_all.fbx"
},
"id": "transitionToAltIdle2",
@@ -1850,7 +1908,7 @@
"children": [
],
"data": {
- "endFrame": 389,
+ "endFrame": 388,
"loopFlag": true,
"startFrame": 80,
"timeScale": 1,
@@ -1863,7 +1921,7 @@
"children": [
],
"data": {
- "endFrame": 390,
+ "endFrame": 388,
"loopFlag": true,
"startFrame": 80,
"timeScale": 1,
@@ -1878,7 +1936,7 @@
"data": {
"endFrame": 472,
"loopFlag": false,
- "startFrame": 389,
+ "startFrame": 388,
"timeScale": 1,
"url": "qrc:///avatar/animations/idle_LFF_all.fbx"
},
@@ -1891,7 +1949,7 @@
"data": {
"endFrame": 453,
"loopFlag": false,
- "startFrame": 390,
+ "startFrame": 388,
"timeScale": 1,
"url": "qrc:///avatar/animations/idle_RFF_all.fbx"
},
@@ -1903,9 +1961,11 @@
"currentState": "transitionToAltIdle1",
"states": [
{
+ "easingType": "easeInOutQuad",
"id": "transitionToAltIdle1",
- "interpDuration": 10,
- "interpTarget": 11,
+ "interpDuration": 20,
+ "interpTarget": 20,
+ "interpType": "evaluateBoth",
"priority": 0.5,
"resume": false,
"transitions": [
@@ -1916,9 +1976,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "transitionToAltIdle2",
- "interpDuration": 10,
- "interpTarget": 11,
+ "interpDuration": 20,
+ "interpTarget": 20,
+ "interpType": "evaluateBoth",
"priority": 0.5,
"resume": false,
"transitions": [
@@ -1929,9 +1991,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "altIdle1",
- "interpDuration": 10,
- "interpTarget": 11,
+ "interpDuration": 1,
+ "interpTarget": 1,
+ "interpType": "evaluateBoth",
"priority": -1,
"resume": false,
"transitions": [
@@ -1942,9 +2006,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "altIdle2",
- "interpDuration": 10,
- "interpTarget": 11,
+ "interpDuration": 1,
+ "interpTarget": 1,
+ "interpType": "evaluateBoth",
"priority": -1,
"resume": false,
"transitions": [
@@ -1955,18 +2021,22 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "alt1ToMasterIdle",
- "interpDuration": 10,
- "interpTarget": 11,
+ "interpDuration": 24,
+ "interpTarget": 24,
+ "interpType": "evaluateBoth",
"priority": -1,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "alt2ToMasterIdle",
- "interpDuration": 10,
- "interpTarget": 11,
+ "interpDuration": 24,
+ "interpTarget": 24,
+ "interpType": "evaluateBoth",
"priority": -1,
"resume": false,
"transitions": [
@@ -1985,18 +2055,22 @@
"currentState": "movement",
"states": [
{
+ "easingType": "easeInOutQuad",
"id": "movement",
- "interpDuration": 15,
- "interpTarget": 17,
+ "interpDuration": 30,
+ "interpTarget": 30,
+ "interpType": "evaluateBoth",
"priority": 0.6,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "alternateIdle",
- "interpDuration": 15,
- "interpTarget": 17,
+ "interpDuration": 30,
+ "interpTarget": 30,
+ "interpType": "evaluateBoth",
"priority": 0.4,
"resume": false,
"transitions": [
@@ -2012,9 +2086,11 @@
"currentState": "masterIdle",
"states": [
{
+ "easingType": "easeInOutQuad",
"id": "masterIdle",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 30,
+ "interpTarget": 30,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
@@ -2025,9 +2101,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "fidget",
- "interpDuration": 20,
- "interpTarget": 21,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"priority": -1,
"resume": false,
"transitions": [
@@ -2164,45 +2242,55 @@
"randomSwitchTimeMin": 1,
"states": [
{
+ "easingType": "easeInOutQuad",
"id": "positiveAcknowledge",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "positiveHeadNod",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "positiveHeadNodYes",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "positiveLongHeadNod",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "positiveThoughtfulHeadNod",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 0.33,
"resume": false,
"transitions": [
@@ -2262,27 +2350,33 @@
"randomSwitchTimeMin": 1,
"states": [
{
+ "easingType": "easeInOutQuad",
"id": "negativeAnnoyedHeadshake",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "negativeThoughtfulHeadshake",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "negativeDropHead",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
@@ -2584,27 +2678,33 @@
"randomSwitchTimeMin": 1,
"states": [
{
+ "easingType": "easeInOutQuad",
"id": "raiseHand01",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "raiseHand03",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "raiseHand04",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
@@ -2909,27 +3009,33 @@
"randomSwitchTimeMin": 1,
"states": [
{
+ "easingType": "easeInOutQuad",
"id": "applaudClap01",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "applaudClap02",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
+ "easingType": "easeInOutQuad",
"id": "applaudClap03",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
@@ -3016,9 +3122,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "reactionPointOutro",
- "interpDuration": 1,
- "interpTarget": 1,
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"priority": 0,
"resume": false,
"transitions": [
@@ -3068,10 +3176,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "reactionPositive",
- "interpDuration": 6,
- "interpTarget": 6,
- "interpType": "snapshotPrev",
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "idleTalkOverlay",
@@ -3112,10 +3221,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "reactionNegative",
- "interpDuration": 6,
- "interpTarget": 6,
- "interpType": "snapshotPrev",
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "reactionPositive",
@@ -3148,10 +3258,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "reactionRaiseHand",
- "interpDuration": 6,
- "interpTarget": 6,
- "interpType": "snapshotPrev",
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "reactionNegative",
@@ -3176,10 +3287,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "reactionApplaud",
- "interpDuration": 6,
- "interpTarget": 6,
- "interpType": "snapshotPrev",
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "reactionNegative",
@@ -3204,10 +3316,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "reactionPoint",
- "interpDuration": 6,
- "interpTarget": 6,
- "interpType": "snapshotPrev",
+ "interpDuration": 18,
+ "interpTarget": 18,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "reactionNegative",
@@ -3945,10 +4058,11 @@
],
"states": [
{
+ "easingType": "easeInOutQuad",
"id": "seated",
- "interpDuration": 8,
+ "interpDuration": 18,
"interpTarget": 20,
- "interpType": "snapshotPrev",
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "idle",
@@ -4009,10 +4123,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "idle",
- "interpDuration": 8,
- "interpTarget": 20,
- "interpType": "snapshotPrev",
+ "interpDuration": 30,
+ "interpTarget": 30,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "WALKFWD",
@@ -4140,10 +4255,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "idleSettle",
- "interpDuration": 8,
- "interpTarget": 15,
- "interpType": "snapshotPrev",
+ "interpDuration": 12,
+ "interpTarget": 12,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "idle",
@@ -4464,9 +4580,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "turnRight",
- "interpDuration": 8,
- "interpTarget": 8,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "idle",
@@ -4527,9 +4645,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "turnLeft",
- "interpDuration": 8,
- "interpTarget": 8,
+ "interpDuration": 15,
+ "interpTarget": 15,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "idle",
@@ -4718,9 +4838,11 @@
]
},
{
+ "easingType": "easeInOutQuad",
"id": "fly",
- "interpDuration": 6,
- "interpTarget": 6,
+ "interpDuration": 24,
+ "interpTarget": 24,
+ "interpType": "evaluateBoth",
"transitions": [
{
"state": "idleSettle",
diff --git a/interface/resources/qml/hifi/simplifiedUI/helpApp/HelpApp.qml b/interface/resources/qml/hifi/simplifiedUI/helpApp/HelpApp.qml
new file mode 100644
index 0000000000..d8238d35cf
--- /dev/null
+++ b/interface/resources/qml/hifi/simplifiedUI/helpApp/HelpApp.qml
@@ -0,0 +1,180 @@
+//
+// HelpApp.qml
+//
+// Created by Zach Fox on 2019-08-07
+// Copyright 2019 High Fidelity, Inc.
+//
+// Distributed under the Apache License, Version 2.0.
+// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
+//
+
+import QtQuick 2.10
+import QtQuick.Controls 2.3
+import "../simplifiedConstants" as SimplifiedConstants
+import "../simplifiedControls" as SimplifiedControls
+import stylesUit 1.0 as HifiStylesUit
+import "./controls" as HelpControls
+import "./faq" as HelpFAQ
+import "./about" as HelpAbout
+
+Rectangle {
+ property string activeTabView: "controlsTabView"
+ id: root
+ color: simplifiedUI.colors.darkBackground
+ anchors.fill: parent
+
+ SimplifiedConstants.SimplifiedConstants {
+ id: simplifiedUI
+ }
+
+ focus: true
+
+ Component.onCompleted: {
+ root.forceActiveFocus();
+ }
+
+
+ onActiveTabViewChanged: {
+ for (var i = 0; i < tabListModel.count; i++) {
+ if (tabListModel.get(i).tabViewName === activeTabView) {
+ tabListView.currentIndex = i;
+ return;
+ }
+ }
+ }
+
+
+ Rectangle {
+ id: tabContainer
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ height: 64
+ color: simplifiedUI.colors.highlightOnDark
+
+ ListModel {
+ id: tabListModel
+
+ ListElement {
+ tabTitle: "Controls"
+ tabViewName: "controlsTabView"
+ }
+ ListElement {
+ tabTitle: "FAQ"
+ tabViewName: "faqTabView"
+ }
+ ListElement {
+ tabTitle: "About"
+ tabViewName: "aboutTabView"
+ }
+ }
+
+
+ Component {
+ id: highlightBar
+ Rectangle {
+ width: tabListView.currentItem.width
+ height: tabListView.currentItem.height
+ color: simplifiedUI.colors.darkBackground
+ x: tabListView.currentItem.x
+ Behavior on x {
+ SmoothedAnimation {
+ duration: 250
+ }
+ }
+ Behavior on width {
+ SmoothedAnimation {
+ duration: 250
+ }
+ }
+ }
+ }
+
+
+ ListView {
+ id: tabListView
+ anchors.fill: parent
+ contentHeight: parent.height
+ contentWidth: childrenRect.width
+ orientation: ListView.Horizontal
+ model: tabListModel
+ highlight: highlightBar
+ highlightFollowsCurrentItem: false
+ interactive: contentItem.width > width
+ delegate: Item {
+ width: tabTitleText.paintedWidth + 32
+ height: parent.height
+
+ HifiStylesUit.GraphikRegular {
+ id: tabTitleText
+ color: simplifiedUI.colors.text.white
+ anchors.fill: parent
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ text: model.tabTitle
+ size: 24
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ root.activeTabView = model.tabViewName;
+ }
+ }
+ }
+ }
+ }
+
+ Item {
+ id: tabViewContainers
+ anchors.top: tabContainer.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+
+
+ HelpControls.HelpControls {
+ id: controlsTabViewContainer
+ visible: activeTabView === "controlsTabView"
+ anchors.fill: parent
+ }
+
+ HelpFAQ.HelpFAQ {
+ id: faqTabViewContainer
+ visible: activeTabView === "faqTabView"
+ anchors.fill: parent
+
+ onSendToScript: {
+ root.sendToScript(message);
+ }
+ }
+
+ HelpAbout.HelpAbout {
+ id: aboutTabViewContainer
+ visible: activeTabView === "aboutTabView"
+ anchors.fill: parent
+ }
+
+ SimplifiedControls.VerticalScrollBar {
+ parent: {
+ if (activeTabView === "controlsTabView") {
+ controlsTabViewContainer
+ } else if (activeTabView === "faqTabView") {
+ faqTabViewContainer
+ } else if (activeTabView === "aboutTabView") {
+ aboutTabViewContainer
+ }
+ }
+ }
+ }
+
+
+ function fromScript(message) {
+ switch (message.method) {
+ default:
+ console.log('HelpApp.qml: Unrecognized message from JS');
+ break;
+ }
+ }
+ signal sendToScript(var message);
+}
diff --git a/interface/resources/qml/hifi/simplifiedUI/helpApp/about/HelpAbout.qml b/interface/resources/qml/hifi/simplifiedUI/helpApp/about/HelpAbout.qml
new file mode 100644
index 0000000000..4a36232029
--- /dev/null
+++ b/interface/resources/qml/hifi/simplifiedUI/helpApp/about/HelpAbout.qml
@@ -0,0 +1,355 @@
+//
+// HelpAbout.qml
+//
+// Created by Zach Fox on 2019-08-07
+// Copyright 2019 High Fidelity, Inc.
+//
+// Distributed under the Apache License, Version 2.0.
+// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
+//
+
+import QtQuick 2.10
+import QtQuick.Controls 2.3
+import "../../simplifiedConstants" as SimplifiedConstants
+import "../../simplifiedControls" as SimplifiedControls
+import stylesUit 1.0 as HifiStylesUit
+import QtQuick.Layouts 1.3
+
+Flickable {
+ id: root
+ contentWidth: parent.width
+ contentHeight: aboutColumnLayout.height
+ clip: true
+
+ onVisibleChanged: {
+ if (visible) {
+ root.contentX = 0;
+ root.contentY = 0;
+
+ // When the user clicks the About tab, refresh the audio I/O model so that
+ // the delegate Component.onCompleted handlers fire, which will update
+ // the text that appears in the About screen.
+ audioOutputDevices.model = undefined;
+ audioOutputDevices.model = AudioScriptingInterface.devices.output;
+ audioInputDevices.model = undefined;
+ audioInputDevices.model = AudioScriptingInterface.devices.input;
+ }
+ }
+
+
+ SimplifiedConstants.SimplifiedConstants {
+ id: simplifiedUI
+ }
+
+
+ Image {
+ id: accent
+ source: "../images/accent3.svg"
+ anchors.left: parent.left
+ anchors.top: parent.top
+ width: 83
+ height: 156
+ transform: Scale {
+ xScale: -1
+ origin.x: accent.width / 2
+ origin.y: accent.height / 2
+ }
+ }
+
+
+ ColumnLayout {
+ id: aboutColumnLayout
+ anchors.left: parent.left
+ anchors.leftMargin: 26
+ anchors.right: parent.right
+ anchors.rightMargin: 26
+ anchors.top: parent.top
+ spacing: 0
+
+ ColumnLayout {
+ id: platformInfoContainer
+ Layout.preferredWidth: parent.width
+ Layout.bottomMargin: 24
+ spacing: 0
+
+ HifiStylesUit.GraphikSemiBold {
+ text: "About Your Configuration"
+ Layout.preferredWidth: parent.width
+ Layout.topMargin: 16
+ Layout.bottomMargin: 8
+ height: paintedHeight
+ size: 22
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Use the button below to get a copy to share with us."
+ Layout.preferredWidth: parent.width
+ Layout.bottomMargin: 8
+ height: paintedHeight
+ size: 18
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Version " + Window.checkVersion()
+ Layout.preferredWidth: parent.width
+ Layout.topMargin: 8
+ Layout.bottomMargin: 8
+ height: paintedHeight
+ size: 16
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+ }
+
+ HifiStylesUit.GraphikSemiBold {
+ text: "Platform Info"
+ Layout.preferredWidth: parent.width
+ Layout.topMargin: 8
+ Layout.bottomMargin: 8
+ height: paintedHeight
+ size: 22
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Computer Vendor/Model:"
+ Layout.preferredWidth: parent.width
+ height: paintedHeight
+ size: 16
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+
+ Component.onCompleted: {
+ var computer = JSON.parse(PlatformInfo.getComputer());
+ var computerVendor = computer.vendor;
+ if (computerVendor.length === 0) {
+ computerVendor = "Unknown";
+ }
+ var computerModel = computer.model;
+ if (computerModel.length === 0) {
+ computerModel = "Unknown";
+ }
+
+ text = "Computer Vendor/Model: " + computerVendor + "/" + computerModel;
+ }
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Profiled Platform Tier: " + PlatformInfo.getTierProfiled()
+ Layout.preferredWidth: parent.width
+ height: paintedHeight
+ size: 16
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "OS Type: " + PlatformInfo.getOperatingSystemType()
+ Layout.preferredWidth: parent.width
+ height: paintedHeight
+ size: 16
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "CPU:"
+ Layout.preferredWidth: parent.width
+ height: paintedHeight
+ size: 16
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+
+ Component.onCompleted: {
+ var cpu = JSON.parse(PlatformInfo.getCPU(0));
+ var cpuModel = cpu.model;
+ if (cpuModel.length === 0) {
+ cpuModel = "Unknown";
+ }
+
+ text = "CPU: " + cpuModel;
+ }
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "# CPUs: " + PlatformInfo.getNumCPUs()
+ Layout.preferredWidth: parent.width
+ height: paintedHeight
+ size: 16
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "# CPU Cores: " + PlatformInfo.getNumLogicalCores()
+ Layout.preferredWidth: parent.width
+ height: paintedHeight
+ size: 16
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "RAM: " + PlatformInfo.getTotalSystemMemoryMB() + " MB"
+ Layout.preferredWidth: parent.width
+ height: paintedHeight
+ size: 16
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "GPU: "
+ Layout.preferredWidth: parent.width
+ height: paintedHeight
+ size: 16
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+
+ Component.onCompleted: {
+ var gpu = JSON.parse(PlatformInfo.getGPU(PlatformInfo.getMasterGPU()));
+ var gpuModel = gpu.model;
+ if (gpuModel.length === 0) {
+ gpuModel = "Unknown";
+ }
+
+ text = "GPU: " + gpuModel;
+ }
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "VR Hand Controllers: " + (PlatformInfo.hasRiftControllers() ? "Rift" : (PlatformInfo.hasViveControllers() ? "Vive" : "None"))
+ Layout.preferredWidth: parent.width
+ height: paintedHeight
+ size: 16
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+ }
+
+ // This is a bit of a hack to get the name of the currently-selected audio input device
+ // in the current mode (Desktop or VR). The reason this is necessary is because it seems to me like
+ // the only way one can get a human-readable list of the audio I/O devices is by using a ListView
+ // and grabbing the names from the AudioScriptingInterface; you can't do it using a ListModel.
+ // See `AudioDevices.h`, specifically the comment above the declaration of `QVariant data()`.
+ ListView {
+ id: audioInputDevices
+ visible: false
+ property string selectedInputDeviceName
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: contentItem.height
+ interactive: false
+ delegate: Item {
+ Component.onCompleted: {
+ if ((HMD.active && selectedHMD) || (!HMD.active && selectedDesktop)) {
+ audioInputDevices.selectedInputDeviceName = model.devicename
+ }
+ }
+ }
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Audio Input: " + audioInputDevices.selectedInputDeviceName
+ Layout.preferredWidth: parent.width
+ height: paintedHeight
+ size: 16
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+ }
+
+
+ // This is a bit of a hack to get the name of the currently-selected audio output device
+ // in the current mode (Desktop or VR). The reason this is necessary is because it seems to me like
+ // the only way one can get a human-readable list of the audio I/O devices is by using a ListView
+ // and grabbing the names from the AudioScriptingInterface; you can't do it using a ListModel.
+ // See `AudioDevices.h`, specifically the comment above the declaration of `QVariant data()`.
+ ListView {
+ id: audioOutputDevices
+ visible: false
+ property string selectedOutputDeviceName
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: contentItem.height
+ interactive: false
+ delegate: Item {
+ Component.onCompleted: {
+ if ((HMD.active && selectedHMD) || (!HMD.active && selectedDesktop)) {
+ audioOutputDevices.selectedOutputDeviceName = model.devicename
+ }
+ }
+ }
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Audio Output: " + audioOutputDevices.selectedOutputDeviceName
+ Layout.preferredWidth: parent.width
+ height: paintedHeight
+ size: 16
+ color: simplifiedUI.colors.text.white
+ wrapMode: Text.Wrap
+ }
+
+ SimplifiedControls.Button {
+ Layout.topMargin: 8
+ width: 200
+ height: 32
+ text: "Copy to Clipboard"
+ temporaryText: "Copied!"
+
+ onClicked: {
+ Window.copyToClipboard(root.buildPlatformInfoTextToCopy());
+ showTemporaryText();
+ }
+ }
+ }
+ }
+
+ function buildPlatformInfoTextToCopy() {
+ var textToCopy = "**About Interface**\n";
+ textToCopy += "Interface Version: " + Window.checkVersion() + "\n";
+ textToCopy += "\n**Platform Info**\n";
+
+ var computer = JSON.parse(PlatformInfo.getComputer());
+ var computerVendor = computer.vendor;
+ if (computerVendor.length === 0) {
+ computerVendor = "Unknown";
+ }
+ var computerModel = computer.model;
+ if (computerModel.length === 0) {
+ computerModel = "Unknown";
+ }
+
+ textToCopy += "Computer Vendor/Model: " + computerVendor + "/" + computerModel + "\n";
+ textToCopy += "Profiled Platform Tier: " + PlatformInfo.getTierProfiled() + "\n";
+ textToCopy += "OS Type: " + PlatformInfo.getOperatingSystemType() + "\n";
+
+ var cpu = JSON.parse(PlatformInfo.getCPU(0));
+ var cpuModel = cpu.model;
+ if (cpuModel.length === 0) {
+ cpuModel = "Unknown";
+ }
+
+ textToCopy += "CPU: " + cpuModel + "\n";
+ textToCopy += "# CPUs: " + PlatformInfo.getNumCPUs() + "\n";
+ textToCopy += "# CPU Cores: " + PlatformInfo.getNumLogicalCores() + "\n";
+ textToCopy += "RAM: " + PlatformInfo.getTotalSystemMemoryMB() + " MB\n";
+
+ var gpu = JSON.parse(PlatformInfo.getGPU(PlatformInfo.getMasterGPU()));
+ var gpuModel = gpu.model;
+ if (gpuModel.length === 0) {
+ gpuModel = "Unknown";
+ }
+
+ textToCopy += "GPU: " + gpuModel + "\n";
+ textToCopy += "VR Hand Controllers: " + (PlatformInfo.hasRiftControllers() ? "Rift" : (PlatformInfo.hasViveControllers() ? "Vive" : "None")) + "\n";
+ textToCopy += "Audio Input: " + audioInputDevices.selectedInputDeviceName + "\n";
+ textToCopy += "Audio Output: " + audioOutputDevices.selectedOutputDeviceName + "\n";
+
+ textToCopy += "\n**All Platform Info**\n";
+ textToCopy += JSON.stringify(JSON.parse(PlatformInfo.getPlatform()), null, 4);
+
+ return textToCopy;
+ }
+}
diff --git a/interface/resources/qml/hifi/simplifiedUI/helpApp/controls/ControlsTable.qml b/interface/resources/qml/hifi/simplifiedUI/helpApp/controls/ControlsTable.qml
new file mode 100644
index 0000000000..b647d5ca24
--- /dev/null
+++ b/interface/resources/qml/hifi/simplifiedUI/helpApp/controls/ControlsTable.qml
@@ -0,0 +1,779 @@
+//
+// ControlsTable.qml
+//
+// Created by Zach Fox on 2019-08-16
+// Copyright 2019 High Fidelity, Inc.
+//
+// Distributed under the Apache License, Version 2.0.
+// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
+//
+
+import QtQuick 2.10
+import QtQuick.Layouts 1.3
+import stylesUit 1.0 as HifiStylesUit
+
+Item {
+ id: controlsTableRoot
+ property int column1Width: 80
+ property int column2Width: width - column1Width
+ property int rowHeight: 31
+ property int rowPadding: 8
+ property int mainTextSize: 18
+ property int subTextSize: 14
+ property color separatorColor: "#CCCCCC"
+ Layout.preferredHeight: controlsTableColumnLayout.height
+
+ // Top separator
+ Rectangle {
+ anchors.top: controlsTableColumnLayout.top
+ anchors.left: controlsTableColumnLayout.left
+ width: parent.width
+ height: 1
+ color: controlsTableRoot.separatorColor
+ }
+
+ // Right separator
+ Rectangle {
+ anchors.top: controlsTableColumnLayout.top
+ anchors.right: controlsTableColumnLayout.right
+ width: 1
+ height: controlsTableColumnLayout.height
+ color: controlsTableRoot.separatorColor
+ }
+
+ // Bottom separator
+ Rectangle {
+ anchors.top: controlsTableColumnLayout.top
+ anchors.topMargin: controlsTableRoot.height
+ anchors.left: controlsTableColumnLayout.left
+ width: parent.width
+ height: 1
+ color: controlsTableRoot.separatorColor
+ }
+
+ // Left separator
+ Rectangle {
+ anchors.top: controlsTableColumnLayout.top
+ anchors.left: controlsTableColumnLayout.left
+ width: 1
+ height: controlsTableColumnLayout.height
+ color: controlsTableRoot.separatorColor
+ }
+
+ ColumnLayout {
+ id: controlsTableColumnLayout
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.top: parent.top
+ spacing: 0
+
+ Row {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: controlsTableRoot.rowHeight
+
+ Item {
+ width: controlsTableRoot.column1Width
+ height: parent.height
+
+ Image {
+ source: "images/rightClick.svg"
+ anchors.centerIn: parent
+ width: 24
+ height: 24
+ mipmap: true
+ fillMode: Image.PreserveAspectFit
+ }
+
+ Rectangle {
+ width: 1
+ height: parent.height
+ color: controlsTableRoot.separatorColor
+ anchors.right: parent.right
+ anchors.top: parent.top
+ }
+ }
+
+ // Spacer
+ Item {
+ width: controlsTableRoot.rowPadding
+ height: parent.height
+ }
+
+ Row {
+ width: controlsTableRoot.column2Width
+ height: parent.height
+ spacing: controlsTableRoot.rowPadding
+
+ HifiStylesUit.GraphikRegular {
+ id: cameraText
+ text: "Camera"
+ width: paintedWidth
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Right-click and drag to look around"
+ width: parent.width - cameraText.width - parent.spacing - controlsTableRoot.rowPadding
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ size: controlsTableRoot.subTextSize
+ color: Qt.rgba(255, 255, 255, 0.5)
+ }
+ }
+ }
+
+ // Bottom separator
+ Rectangle {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: 1
+ color: controlsTableRoot.separatorColor
+ }
+
+
+
+
+
+ Row {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: controlsTableRoot.rowHeight
+
+ Item {
+ width: controlsTableRoot.column1Width
+ height: parent.height
+
+ HifiStylesUit.GraphikRegular {
+ text: "W / ↑"
+ anchors.fill: parent
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ Rectangle {
+ width: 1
+ height: parent.height
+ color: controlsTableRoot.separatorColor
+ anchors.right: parent.right
+ anchors.top: parent.top
+ }
+ }
+
+ // Spacer
+ Item {
+ width: controlsTableRoot.rowPadding
+ height: parent.height
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Walk Forward"
+ width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+ }
+
+ // Bottom separator
+ Rectangle {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: 1
+ color: controlsTableRoot.separatorColor
+ }
+
+
+
+
+
+ Row {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: controlsTableRoot.rowHeight
+
+ Item {
+ width: controlsTableRoot.column1Width
+ height: parent.height
+
+ HifiStylesUit.GraphikRegular {
+ text: "S / ↓"
+ anchors.fill: parent
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ Rectangle {
+ width: 1
+ height: parent.height
+ color: controlsTableRoot.separatorColor
+ anchors.right: parent.right
+ anchors.top: parent.top
+ }
+ }
+
+ // Spacer
+ Item {
+ width: controlsTableRoot.rowPadding
+ height: parent.height
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Walk Backward"
+ width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+ }
+
+ // Bottom separator
+ Rectangle {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: 1
+ color: controlsTableRoot.separatorColor
+ }
+
+
+
+
+
+ Row {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: controlsTableRoot.rowHeight
+
+ Item {
+ width: controlsTableRoot.column1Width
+ height: parent.height
+
+ HifiStylesUit.GraphikRegular {
+ text: "A / ←"
+ anchors.fill: parent
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ Rectangle {
+ width: 1
+ height: parent.height
+ color: controlsTableRoot.separatorColor
+ anchors.right: parent.right
+ anchors.top: parent.top
+ }
+ }
+
+ // Spacer
+ Item {
+ width: controlsTableRoot.rowPadding
+ height: parent.height
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Turn Left"
+ width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+ }
+
+ // Bottom separator
+ Rectangle {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: 1
+ color: controlsTableRoot.separatorColor
+ }
+
+
+
+
+
+ Row {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: controlsTableRoot.rowHeight
+
+ Item {
+ width: controlsTableRoot.column1Width
+ height: parent.height
+
+ HifiStylesUit.GraphikRegular {
+ text: "D / →"
+ anchors.fill: parent
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ Rectangle {
+ width: 1
+ height: parent.height
+ color: controlsTableRoot.separatorColor
+ anchors.right: parent.right
+ anchors.top: parent.top
+ }
+ }
+
+ // Spacer
+ Item {
+ width: controlsTableRoot.rowPadding
+ height: parent.height
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Turn Right"
+ width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+ }
+
+ // Bottom separator
+ Rectangle {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: 1
+ color: controlsTableRoot.separatorColor
+ }
+
+
+
+
+
+ Row {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: controlsTableRoot.rowHeight
+
+ Item {
+ width: controlsTableRoot.column1Width
+ height: parent.height
+
+ HifiStylesUit.GraphikRegular {
+ text: "Q"
+ anchors.fill: parent
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ Rectangle {
+ width: 1
+ height: parent.height
+ color: controlsTableRoot.separatorColor
+ anchors.right: parent.right
+ anchors.top: parent.top
+ }
+ }
+
+ // Spacer
+ Item {
+ width: controlsTableRoot.rowPadding
+ height: parent.height
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Sidestep Left"
+ width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+ }
+
+ // Bottom separator
+ Rectangle {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: 1
+ color: controlsTableRoot.separatorColor
+ }
+
+
+
+
+
+ Row {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: controlsTableRoot.rowHeight
+
+ Item {
+ width: controlsTableRoot.column1Width
+ height: parent.height
+
+ HifiStylesUit.GraphikRegular {
+ text: "E"
+ anchors.fill: parent
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ Rectangle {
+ width: 1
+ height: parent.height
+ color: controlsTableRoot.separatorColor
+ anchors.right: parent.right
+ anchors.top: parent.top
+ }
+ }
+
+ // Spacer
+ Item {
+ width: controlsTableRoot.rowPadding
+ height: parent.height
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Sidestep Right"
+ width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+ }
+
+ // Bottom separator
+ Rectangle {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: 1
+ color: controlsTableRoot.separatorColor
+ }
+
+
+
+
+
+ Row {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: controlsTableRoot.rowHeight
+
+ Item {
+ width: controlsTableRoot.column1Width
+ height: parent.height
+
+ HifiStylesUit.GraphikRegular {
+ text: "Shift"
+ anchors.fill: parent
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ Rectangle {
+ width: 1
+ height: parent.height
+ color: controlsTableRoot.separatorColor
+ anchors.right: parent.right
+ anchors.top: parent.top
+ }
+ }
+
+ // Spacer
+ Item {
+ width: controlsTableRoot.rowPadding
+ height: parent.height
+ }
+
+ Row {
+ width: controlsTableRoot.column2Width
+ height: parent.height
+ spacing: controlsTableRoot.rowPadding
+
+ HifiStylesUit.GraphikRegular {
+ id: runText
+ text: "Hold + Direction to Run"
+ width: paintedWidth
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Example: Shift + W"
+ width: parent.width - runText.width - parent.spacing - controlsTableRoot.rowPadding
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ size: controlsTableRoot.subTextSize
+ color: Qt.rgba(255, 255, 255, 0.5)
+ }
+ }
+ }
+
+ // Bottom separator
+ Rectangle {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: 1
+ color: controlsTableRoot.separatorColor
+ }
+
+
+
+
+
+ Row {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: controlsTableRoot.rowHeight
+
+ Item {
+ width: controlsTableRoot.column1Width
+ height: parent.height
+
+ HifiStylesUit.GraphikRegular {
+ text: "Space"
+ anchors.fill: parent
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ Rectangle {
+ width: 1
+ height: parent.height
+ color: controlsTableRoot.separatorColor
+ anchors.right: parent.right
+ anchors.top: parent.top
+ }
+ }
+
+ // Spacer
+ Item {
+ width: controlsTableRoot.rowPadding
+ height: parent.height
+ }
+
+ Row {
+ width: controlsTableRoot.column2Width
+ height: parent.height
+ spacing: controlsTableRoot.rowPadding
+
+ HifiStylesUit.GraphikRegular {
+ id: jumpText
+ text: "Jump / Stand Up"
+ width: paintedWidth
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Stand Up only while seated"
+ width: parent.width - jumpText.width - parent.spacing - controlsTableRoot.rowPadding
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ size: controlsTableRoot.subTextSize
+ color: Qt.rgba(255, 255, 255, 0.5)
+ }
+ }
+ }
+
+ // Bottom separator
+ Rectangle {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: 1
+ color: controlsTableRoot.separatorColor
+ }
+
+
+
+
+
+ Row {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: controlsTableRoot.rowHeight
+
+ Item {
+ width: controlsTableRoot.column1Width
+ height: parent.height
+
+ HifiStylesUit.GraphikRegular {
+ text: "1"
+ anchors.fill: parent
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ Rectangle {
+ width: 1
+ height: parent.height
+ color: controlsTableRoot.separatorColor
+ anchors.right: parent.right
+ anchors.top: parent.top
+ }
+ }
+
+ // Spacer
+ Item {
+ width: controlsTableRoot.rowPadding
+ height: parent.height
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "1st Person View"
+ width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+ }
+
+ // Bottom separator
+ Rectangle {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: 1
+ color: controlsTableRoot.separatorColor
+ }
+
+
+
+
+
+ Row {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: controlsTableRoot.rowHeight
+
+ Item {
+ width: controlsTableRoot.column1Width
+ height: parent.height
+
+ HifiStylesUit.GraphikRegular {
+ text: "2"
+ anchors.fill: parent
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ Rectangle {
+ width: 1
+ height: parent.height
+ color: controlsTableRoot.separatorColor
+ anchors.right: parent.right
+ anchors.top: parent.top
+ }
+ }
+
+ // Spacer
+ Item {
+ width: controlsTableRoot.rowPadding
+ height: parent.height
+ }
+
+ Row {
+ width: controlsTableRoot.column2Width
+ height: parent.height
+ spacing: controlsTableRoot.rowPadding
+
+ HifiStylesUit.GraphikRegular {
+ id: mirrorText
+ text: "Mirror Mode"
+ width: paintedWidth
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "See your own avatar"
+ width: parent.width - mirrorText.width - parent.spacing - controlsTableRoot.rowPadding
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ size: controlsTableRoot.subTextSize
+ color: Qt.rgba(255, 255, 255, 0.5)
+ }
+ }
+ }
+
+ // Bottom separator
+ Rectangle {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: 1
+ color: controlsTableRoot.separatorColor
+ }
+
+
+
+
+
+ Row {
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: controlsTableRoot.rowHeight
+
+ Item {
+ width: controlsTableRoot.column1Width
+ height: parent.height
+
+ HifiStylesUit.GraphikRegular {
+ text: "3"
+ anchors.fill: parent
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+
+ Rectangle {
+ width: 1
+ height: parent.height
+ color: controlsTableRoot.separatorColor
+ anchors.right: parent.right
+ anchors.top: parent.top
+ }
+ }
+
+ // Spacer
+ Item {
+ width: controlsTableRoot.rowPadding
+ height: parent.height
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "3rd Person View"
+ width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ size: controlsTableRoot.mainTextSize
+ color: simplifiedUI.colors.text.white
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/interface/resources/qml/hifi/simplifiedUI/helpApp/controls/HelpControls.qml b/interface/resources/qml/hifi/simplifiedUI/helpApp/controls/HelpControls.qml
new file mode 100644
index 0000000000..01c5187aa5
--- /dev/null
+++ b/interface/resources/qml/hifi/simplifiedUI/helpApp/controls/HelpControls.qml
@@ -0,0 +1,95 @@
+//
+// HelpControls.qml
+//
+// Created by Zach Fox on 2019-08-07
+// Copyright 2019 High Fidelity, Inc.
+//
+// Distributed under the Apache License, Version 2.0.
+// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
+//
+
+import QtQuick 2.10
+import QtQuick.Controls 2.3
+import "../../simplifiedConstants" as SimplifiedConstants
+import "../../simplifiedControls" as SimplifiedControls
+import stylesUit 1.0 as HifiStylesUit
+import QtQuick.Layouts 1.3
+
+Flickable {
+ id: root
+ contentWidth: parent.width
+ contentHeight: controlsColumnLayout.height
+ clip: true
+
+ onVisibleChanged: {
+ if (visible) {
+ root.contentX = 0;
+ root.contentY = 0;
+ }
+ }
+
+ SimplifiedConstants.SimplifiedConstants {
+ id: simplifiedUI
+ }
+
+
+ Image {
+ id: accent
+ source: "../images/accent1.svg"
+ anchors.left: parent.left
+ anchors.top: parent.top
+ width: 83
+ height: 156
+ transform: Scale {
+ xScale: -1
+ origin.x: accent.width / 2
+ origin.y: accent.height / 2
+ }
+ }
+
+
+ ColumnLayout {
+ id: controlsColumnLayout
+ anchors.left: parent.left
+ anchors.leftMargin: 26
+ anchors.right: parent.right
+ anchors.rightMargin: 26
+ anchors.top: parent.top
+ spacing: 0
+
+ HifiStylesUit.GraphikSemiBold {
+ text: "HQ Controls"
+ Layout.preferredWidth: parent.width
+ Layout.topMargin: 16
+ height: paintedHeight
+ size: 22
+ color: simplifiedUI.colors.text.white
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "You can use the following controls to move your avatar around your HQ:"
+ Layout.preferredWidth: parent.width
+ wrapMode: Text.Wrap
+ height: paintedHeight
+ size: 18
+ color: simplifiedUI.colors.text.white
+ }
+
+ ControlsTable {
+ Layout.topMargin: 8
+ Layout.preferredWidth: parent.width
+ }
+
+ SimplifiedControls.Button {
+ Layout.topMargin: 14
+ Layout.preferredWidth: 200
+ height: 32
+ text: "VIEW ALL CONTROLS"
+ temporaryText: "Viewing!"
+
+ onClicked: {
+ Qt.openUrlExternally("http://docs.highfidelity.com/explore/get-started/desktop.html");
+ }
+ }
+ }
+}
diff --git a/interface/resources/qml/hifi/simplifiedUI/helpApp/controls/images/rightClick.svg b/interface/resources/qml/hifi/simplifiedUI/helpApp/controls/images/rightClick.svg
new file mode 100644
index 0000000000..6df8929a3d
--- /dev/null
+++ b/interface/resources/qml/hifi/simplifiedUI/helpApp/controls/images/rightClick.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/interface/resources/qml/hifi/simplifiedUI/helpApp/faq/HelpFAQ.qml b/interface/resources/qml/hifi/simplifiedUI/helpApp/faq/HelpFAQ.qml
new file mode 100644
index 0000000000..81edc9ff37
--- /dev/null
+++ b/interface/resources/qml/hifi/simplifiedUI/helpApp/faq/HelpFAQ.qml
@@ -0,0 +1,120 @@
+//
+// HelpFAQ.qml
+//
+// Created by Zach Fox on 2019-08-08
+// Copyright 2019 High Fidelity, Inc.
+//
+// Distributed under the Apache License, Version 2.0.
+// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
+//
+
+import QtQuick 2.10
+import QtQuick.Controls 2.3
+import "../../simplifiedConstants" as SimplifiedConstants
+import "../../simplifiedControls" as SimplifiedControls
+import stylesUit 1.0 as HifiStylesUit
+import QtQuick.Layouts 1.3
+import PerformanceEnums 1.0
+
+Item {
+ id: root
+ width: parent.width
+ height: parent.height
+
+
+ SimplifiedConstants.SimplifiedConstants {
+ id: simplifiedUI
+ }
+
+
+ Image {
+ id: accent
+ source: "../images/accent3.svg"
+ anchors.left: parent.left
+ anchors.top: parent.top
+ width: 83
+ height: 156
+ transform: Scale {
+ xScale: -1
+ origin.x: accent.width / 2
+ origin.y: accent.height / 2
+ }
+ }
+
+
+ ColumnLayout {
+ id: faqColumnLayout
+ anchors.left: parent.left
+ anchors.leftMargin: 26
+ anchors.right: parent.right
+ anchors.rightMargin: 26
+ anchors.top: parent.top
+ spacing: 0
+
+ HifiStylesUit.GraphikSemiBold {
+ text: "FAQ"
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: paintedHeight
+ Layout.topMargin: 16
+ size: 22
+ color: simplifiedUI.colors.text.white
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "You can find answers to all of our frequently asked questions by clicking the button below."
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: paintedHeight
+ Layout.topMargin: 8
+ size: 18
+ wrapMode: Text.Wrap
+ color: simplifiedUI.colors.text.white
+ }
+
+ SimplifiedControls.Button {
+ Layout.topMargin: 8
+ width: 200
+ height: 32
+ text: "VIEW FAQ"
+ temporaryText: "Viewing!"
+
+ onClicked: {
+ Qt.openUrlExternally("https://www.highfidelity.com/knowledge");
+ }
+ }
+
+ HifiStylesUit.GraphikSemiBold {
+ text: "Having problems with your audio?"
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: paintedHeight
+ Layout.topMargin: 32
+ size: 16
+ color: simplifiedUI.colors.text.white
+ }
+
+ HifiStylesUit.GraphikRegular {
+ text: "Quickly check your audio configuration and make changes to resolve any audio input/output issues."
+ Layout.preferredWidth: parent.width
+ Layout.preferredHeight: paintedHeight
+ Layout.topMargin: 4
+ size: 18
+ wrapMode: Text.Wrap
+ color: simplifiedUI.colors.text.white
+ }
+
+ SimplifiedControls.Button {
+ Layout.topMargin: 8
+ width: 200
+ height: 32
+ text: "TEST YOUR AUDIO"
+
+ onClicked: {
+ root.sendToScript({
+ "source": "HelpApp.qml",
+ "method": "goToAudioSettings"
+ });
+ }
+ }
+ }
+
+ signal sendToScript(var message);
+}
diff --git a/interface/resources/qml/hifi/simplifiedUI/helpApp/images/accent1.svg b/interface/resources/qml/hifi/simplifiedUI/helpApp/images/accent1.svg
new file mode 100644
index 0000000000..885edef5ac
--- /dev/null
+++ b/interface/resources/qml/hifi/simplifiedUI/helpApp/images/accent1.svg
@@ -0,0 +1,4 @@
+
diff --git a/interface/resources/qml/hifi/simplifiedUI/helpApp/images/accent2.svg b/interface/resources/qml/hifi/simplifiedUI/helpApp/images/accent2.svg
new file mode 100644
index 0000000000..027d9bb623
--- /dev/null
+++ b/interface/resources/qml/hifi/simplifiedUI/helpApp/images/accent2.svg
@@ -0,0 +1,4 @@
+
diff --git a/interface/resources/qml/hifi/simplifiedUI/helpApp/images/accent3.svg b/interface/resources/qml/hifi/simplifiedUI/helpApp/images/accent3.svg
new file mode 100644
index 0000000000..07cc23ef1e
--- /dev/null
+++ b/interface/resources/qml/hifi/simplifiedUI/helpApp/images/accent3.svg
@@ -0,0 +1,4 @@
+
diff --git a/interface/resources/qml/hifi/simplifiedUI/inputDeviceButton/InputDeviceButton.qml b/interface/resources/qml/hifi/simplifiedUI/inputDeviceButton/InputDeviceButton.qml
index 15f4c42d39..c7f938b986 100644
--- a/interface/resources/qml/hifi/simplifiedUI/inputDeviceButton/InputDeviceButton.qml
+++ b/interface/resources/qml/hifi/simplifiedUI/inputDeviceButton/InputDeviceButton.qml
@@ -176,6 +176,7 @@ Rectangle {
anchors.left: parent.left
width: parent.width
height: parent.parent.height
+ mipmap: true
}
ColorOverlay {
diff --git a/interface/resources/qml/hifi/simplifiedUI/settingsApp/SettingsApp.qml b/interface/resources/qml/hifi/simplifiedUI/settingsApp/SettingsApp.qml
index a9199ff5f1..ecc8bac2a7 100644
--- a/interface/resources/qml/hifi/simplifiedUI/settingsApp/SettingsApp.qml
+++ b/interface/resources/qml/hifi/simplifiedUI/settingsApp/SettingsApp.qml
@@ -49,6 +49,15 @@ Rectangle {
}
}
+ onActiveTabViewChanged: {
+ for (var i = 0; i < tabListModel.count; i++) {
+ if (tabListModel.get(i).tabViewName === activeTabView) {
+ tabListView.currentIndex = i;
+ return;
+ }
+ }
+ }
+
Component.onCompleted: {
root.forceActiveFocus();
}
@@ -138,7 +147,6 @@ Rectangle {
MouseArea {
anchors.fill: parent
onClicked: {
- tabListView.currentIndex = index;
root.activeTabView = model.tabViewName;
}
}
@@ -207,7 +215,24 @@ Rectangle {
function fromScript(message) {
+ if (message.source !== "simplifiedUI.js") {
+ return;
+ }
+
switch (message.method) {
+ case "goToSettingsTab":
+ var tabToGoTo = message.data.settingsTab;
+ switch (tabToGoTo) {
+ case "audio":
+ activeTabView = "audioTabView";
+ break;
+
+ default:
+ console.log("A message was sent to the Settings window to change tabs, but an invalid tab was specified.");
+ break;
+ }
+ break;
+
default:
console.log('SettingsApp.qml: Unrecognized message from JS');
break;
diff --git a/interface/resources/qml/hifi/simplifiedUI/settingsApp/about/About.qml b/interface/resources/qml/hifi/simplifiedUI/settingsApp/about/About.qml
index 632f137339..89cccb8ecd 100644
--- a/interface/resources/qml/hifi/simplifiedUI/settingsApp/about/About.qml
+++ b/interface/resources/qml/hifi/simplifiedUI/settingsApp/about/About.qml
@@ -70,7 +70,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
text: "Version " + Window.checkVersion()
Layout.alignment: Qt.AlignHCenter
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@@ -79,7 +79,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
text: "Platform Info"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
Layout.topMargin: 8
Layout.bottomMargin: 8
height: paintedHeight
@@ -90,7 +90,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "Computer Vendor/Model:"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@@ -113,7 +113,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "Profiled Platform Tier: " + PlatformInfo.getTierProfiled()
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@@ -122,7 +122,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "OS Type: " + PlatformInfo.getOperatingSystemType()
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@@ -131,7 +131,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "CPU:"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@@ -150,7 +150,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "# CPUs: " + PlatformInfo.getNumCPUs()
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@@ -159,7 +159,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "# CPU Cores: " + PlatformInfo.getNumLogicalCores()
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@@ -168,7 +168,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "RAM: " + PlatformInfo.getTotalSystemMemoryMB() + " MB"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@@ -177,7 +177,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "GPU: "
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@@ -196,7 +196,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "VR Hand Controllers: " + (PlatformInfo.hasRiftControllers() ? "Rift" : (PlatformInfo.hasViveControllers() ? "Vive" : "None"))
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@@ -228,7 +228,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "Audio Input: " + audioInputDevices.selectedInputDeviceName
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@@ -261,7 +261,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "Audio Output: " + audioOutputDevices.selectedOutputDeviceName
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
diff --git a/interface/resources/qml/hifi/simplifiedUI/settingsApp/audio/Audio.qml b/interface/resources/qml/hifi/simplifiedUI/settingsApp/audio/Audio.qml
index bfc0bc5200..108016ef8c 100644
--- a/interface/resources/qml/hifi/simplifiedUI/settingsApp/audio/Audio.qml
+++ b/interface/resources/qml/hifi/simplifiedUI/settingsApp/audio/Audio.qml
@@ -174,7 +174,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: micControlsTitle
text: "Default Mute Controls"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@@ -244,7 +244,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: inputDeviceTitle
text: "Which input device?"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@@ -340,7 +340,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: outputDeviceTitle
text: "Which output device?"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
diff --git a/interface/resources/qml/hifi/simplifiedUI/settingsApp/dev/Dev.qml b/interface/resources/qml/hifi/simplifiedUI/settingsApp/dev/Dev.qml
index fe623e5d78..4d0589c1e1 100644
--- a/interface/resources/qml/hifi/simplifiedUI/settingsApp/dev/Dev.qml
+++ b/interface/resources/qml/hifi/simplifiedUI/settingsApp/dev/Dev.qml
@@ -68,7 +68,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: uiControlsTitle
text: "User Interface"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@@ -77,7 +77,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
id: uiControlsSubtitle
text: "You'll have to restart Interface after changing either of these settings. If you don't get any Toolbar apps back after restarting, run defaultScripts.js manually."
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
diff --git a/interface/resources/qml/hifi/simplifiedUI/settingsApp/general/General.qml b/interface/resources/qml/hifi/simplifiedUI/settingsApp/general/General.qml
index af7e9ba4ae..a2bf26161e 100644
--- a/interface/resources/qml/hifi/simplifiedUI/settingsApp/general/General.qml
+++ b/interface/resources/qml/hifi/simplifiedUI/settingsApp/general/General.qml
@@ -72,7 +72,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: avatarNameTagsTitle
text: "Avatar Name Tags"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@@ -120,7 +120,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: performanceTitle
text: "Graphics Settings"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@@ -168,7 +168,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: cameraTitle
text: "Camera View"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
diff --git a/interface/resources/qml/hifi/simplifiedUI/settingsApp/vr/VR.qml b/interface/resources/qml/hifi/simplifiedUI/settingsApp/vr/VR.qml
index d7e85c7f68..5f0fbe49d5 100644
--- a/interface/resources/qml/hifi/simplifiedUI/settingsApp/vr/VR.qml
+++ b/interface/resources/qml/hifi/simplifiedUI/settingsApp/vr/VR.qml
@@ -77,7 +77,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: controlsTitle
text: "VR Movement Controls"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@@ -163,7 +163,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: micControlsTitle
text: "Default Mute Controls"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@@ -206,7 +206,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: inputDeviceTitle
text: "Which input device?"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@@ -302,7 +302,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: outputDeviceTitle
text: "Which output device?"
- Layout.maximumWidth: parent.width
+ Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
diff --git a/interface/resources/qml/hifi/simplifiedUI/simplifiedConstants/SimplifiedConstants.qml b/interface/resources/qml/hifi/simplifiedUI/simplifiedConstants/SimplifiedConstants.qml
index bc27dbad5f..88a2f46de8 100644
--- a/interface/resources/qml/hifi/simplifiedUI/simplifiedConstants/SimplifiedConstants.qml
+++ b/interface/resources/qml/hifi/simplifiedUI/simplifiedConstants/SimplifiedConstants.qml
@@ -153,6 +153,10 @@ QtObject {
readonly property color background: "#474747"
readonly property color contentItem: "#0198CB"
}
+ readonly property QtObject table: QtObject {
+ readonly property color cellBackground: "#000000"
+ readonly property color textColor: "#ffffff"
+ }
}
readonly property color darkSeparator: "#595959"
diff --git a/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml b/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml
index acabbe9485..d87431ea9c 100644
--- a/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml
+++ b/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml
@@ -245,6 +245,7 @@ Rectangle {
width: outputDeviceButton.outputMuted ? 25 : 26
height: 22
visible: false
+ mipmap: true
}
ColorOverlay {
@@ -319,6 +320,7 @@ Rectangle {
anchors.centerIn: parent
width: statusButton.currentStatus === "busy" ? 13 : 14
height: statusButton.currentStatus === "busy" ? 2 : 10
+ mipmap: true
}
ColorOverlay {
@@ -352,19 +354,20 @@ Rectangle {
Item {
id: hmdButtonContainer
anchors.verticalCenter: parent.verticalCenter
- anchors.right: settingsButtonContainer.left
- anchors.rightMargin: 8
+ anchors.right: helpButtonContainer.left
+ anchors.rightMargin: 3
width: 48
height: width
visible: false
Image {
id: displayModeImage
- source: HMD.active ? "./images/desktopMode.svg" : "./images/vrMode.svg"
+ source: HMD.active ? "images/desktopMode.svg" : "images/vrMode.svg"
anchors.centerIn: parent
width: HMD.active ? 25 : 26
height: HMD.active ? 22 : 14
visible: false
+ mipmap: true
}
ColorOverlay {
@@ -417,6 +420,49 @@ Rectangle {
}
+ Item {
+ id: helpButtonContainer
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: settingsButtonContainer.left
+ anchors.rightMargin: 4
+ width: 36
+ height: width
+
+ Image {
+ id: helpButtonImage
+ source: "images/questionMark.svg"
+ anchors.centerIn: parent
+ width: 13
+ height: 22
+ visible: false
+ mipmap: true
+ }
+
+ ColorOverlay {
+ opacity: helpButtonMouseArea.containsMouse ? 1.0 : 0.7
+ anchors.fill: helpButtonImage
+ source: helpButtonImage
+ color: simplifiedUI.colors.text.white
+ }
+
+ MouseArea {
+ id: helpButtonMouseArea
+ anchors.fill: parent
+ hoverEnabled: true
+ onEntered: {
+ Tablet.playSound(TabletEnums.ButtonHover);
+ }
+ onClicked: {
+ Tablet.playSound(TabletEnums.ButtonClick);
+ sendToScript({
+ "source": "SimplifiedTopBar.qml",
+ "method": "toggleHelpApp"
+ });
+ }
+ }
+ }
+
+
Item {
id: settingsButtonContainer
@@ -428,11 +474,12 @@ Rectangle {
Image {
id: settingsButtonImage
- source: "./images/settings.svg"
+ source: "images/settings.svg"
anchors.centerIn: parent
width: 22
height: 22
visible: false
+ mipmap: true
}
ColorOverlay {
diff --git a/interface/resources/qml/hifi/simplifiedUI/topBar/images/questionMark.svg b/interface/resources/qml/hifi/simplifiedUI/topBar/images/questionMark.svg
new file mode 100644
index 0000000000..eec3edb1c6
--- /dev/null
+++ b/interface/resources/qml/hifi/simplifiedUI/topBar/images/questionMark.svg
@@ -0,0 +1,11 @@
+
+
+
diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h
index ad45df892b..bb6f036533 100644
--- a/interface/src/avatar/MyAvatar.h
+++ b/interface/src/avatar/MyAvatar.h
@@ -1866,6 +1866,9 @@ public:
// also clears internal reaction triggers
void updateRigControllerParameters(Rig::ControllerParameters& params);
+ // Don't substitute verify-fail:
+ virtual const QUrl& getSkeletonModelURL() const override { return _skeletonModelURL; }
+
public slots:
/**jsdoc
diff --git a/interface/src/commerce/Wallet.cpp b/interface/src/commerce/Wallet.cpp
index 5af7a357b0..c449874117 100644
--- a/interface/src/commerce/Wallet.cpp
+++ b/interface/src/commerce/Wallet.cpp
@@ -830,9 +830,14 @@ void Wallet::handleChallengeOwnershipPacket(QSharedPointer pack
}
void Wallet::sendChallengeOwnershipResponses() {
- if (_pendingChallenges.size() == 0 || getSalt().length() == 0) {
+ if (_pendingChallenges.size() == 0) {
return;
}
+ if (getSalt().length() == 0) {
+ qCDebug(commerce) << "Not responding to ownership challenge due to missing Wallet salt";
+ return;
+ }
+
auto nodeList = DependencyManager::get();
EC_KEY* ec = readKeys(keyFilePath());
diff --git a/interface/src/scripting/Audio.cpp b/interface/src/scripting/Audio.cpp
index f5569a19b2..e3e6138744 100644
--- a/interface/src/scripting/Audio.cpp
+++ b/interface/src/scripting/Audio.cpp
@@ -90,16 +90,21 @@ void Audio::setMuted(bool isMuted) {
void Audio::setMutedDesktop(bool isMuted) {
bool changed = false;
+ bool isHMD = qApp->isHMDMode();
withWriteLock([&] {
if (_mutedDesktop != isMuted) {
changed = true;
_mutedDesktop = isMuted;
- auto client = DependencyManager::get().data();
- QMetaObject::invokeMethod(client, "setMuted", Q_ARG(bool, isMuted), Q_ARG(bool, false));
+ if (!isHMD) {
+ auto client = DependencyManager::get().data();
+ QMetaObject::invokeMethod(client, "setMuted", Q_ARG(bool, isMuted), Q_ARG(bool, false));
+ }
}
});
if (changed) {
- emit mutedChanged(isMuted);
+ if (!isHMD) {
+ emit mutedChanged(isMuted);
+ }
emit mutedDesktopChanged(isMuted);
}
}
@@ -112,16 +117,21 @@ bool Audio::getMutedDesktop() const {
void Audio::setMutedHMD(bool isMuted) {
bool changed = false;
+ bool isHMD = qApp->isHMDMode();
withWriteLock([&] {
if (_mutedHMD != isMuted) {
changed = true;
_mutedHMD = isMuted;
- auto client = DependencyManager::get().data();
- QMetaObject::invokeMethod(client, "setMuted", Q_ARG(bool, isMuted), Q_ARG(bool, false));
+ if (isHMD) {
+ auto client = DependencyManager::get().data();
+ QMetaObject::invokeMethod(client, "setMuted", Q_ARG(bool, isMuted), Q_ARG(bool, false));
+ }
}
});
if (changed) {
- emit mutedChanged(isMuted);
+ if (isHMD) {
+ emit mutedChanged(isMuted);
+ }
emit mutedHMDChanged(isMuted);
}
}
@@ -386,6 +396,7 @@ void Audio::onContextChanged() {
changed = true;
}
});
+
if (_settingsLoaded) {
bool isMuted = isHMD ? getMutedHMD() : getMutedDesktop();
setMuted(isMuted);
@@ -395,6 +406,12 @@ void Audio::onContextChanged() {
}
if (changed) {
emit contextChanged(isHMD ? Audio::HMD : Audio::DESKTOP);
+
+ bool mutedHMD = getMutedHMD();
+ bool mutedDesktop = getMutedDesktop();
+ if (mutedHMD != mutedDesktop) {
+ emit mutedChanged(isHMD ? mutedHMD : mutedDesktop);
+ }
}
}
diff --git a/launchers/darwin/src/Interface.m b/launchers/darwin/src/Interface.m
index d02b66b581..8dc5d00806 100644
--- a/launchers/darwin/src/Interface.m
+++ b/launchers/darwin/src/Interface.m
@@ -33,10 +33,11 @@
return 0;
}
- NSFileHandle * fh = [standardOut fileHandleForReading];
- NSData * data = [fh readDataToEndOfFile];
- NSString * output = [NSString stringWithUTF8String:[data bytes]];
- if (output == nil) {
+ NSFileHandle* fh = [standardOut fileHandleForReading];
+ NSData* data = [fh readDataToEndOfFile];
+
+ NSString* output = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+ if (output == nil || [output length] == 0) {
NSDictionary * userInfo = @{
NSLocalizedDescriptionKey: NSLocalizedString(@"Couldn't start interface", nil)
};
diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp
index a7e4a0ae9f..9d88dd47ea 100644
--- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp
+++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp
@@ -1511,7 +1511,7 @@ void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) {
}
indicateLoadingStatus(LoadingStatus::LoadModel);
- _skeletonModel->setURL(_skeletonModelURL);
+ _skeletonModel->setURL(getSkeletonModelURL());
}
void Avatar::setModelURLFinished(bool success) {
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
bool displayNameChanged = false;
// In this case, the "sendingNode" is the Avatar Mixer.
avatar->processAvatarIdentity(avatarIdentityStream, identityChanged, displayNameChanged);
- if (avatar->isCertifyFailed() && identityUUID != EMPTY) {
- qCDebug(avatars) << "Avatar" << avatar->getSessionDisplayName() << "marked as VERIFY-FAILED";
- avatar->setSkeletonModelURL(PathUtils::resourcesUrl(VERIFY_FAIL_MODEL));
- }
_replicas.processAvatarIdentity(identityUUID, message->getMessage(), identityChanged, displayNameChanged);
}
}
diff --git a/scripts/simplifiedUI/ui/simplifiedUI.js b/scripts/simplifiedUI/ui/simplifiedUI.js
index fb7f2824d6..586632f2b3 100644
--- a/scripts/simplifiedUI/ui/simplifiedUI.js
+++ b/scripts/simplifiedUI/ui/simplifiedUI.js
@@ -187,6 +187,89 @@ function toggleSettingsApp() {
settingsAppWindow.closed.connect(onSettingsAppClosed);
}
+
+function handleGoToAudioSettings() {
+ if (!settingsAppWindow) {
+ toggleSettingsApp();
+ }
+
+ settingsAppWindow.sendToQml({
+ "source": "simplifiedUI.js",
+ "method": "goToSettingsTab",
+ "data": {
+ "settingsTab": "audio"
+ }
+ });
+}
+
+
+var HELP_APP_MESSAGE_SOURCE = "HelpApp.qml";
+function onMessageFromHelpApp(message) {
+ if (message.source !== HELP_APP_MESSAGE_SOURCE) {
+ return;
+ }
+
+ switch (message.method) {
+ case "goToAudioSettings":
+ handleGoToAudioSettings();
+ break;
+
+ default:
+ console.log("Unrecognized message from " + HELP_APP_MESSAGE_SOURCE + ": " + JSON.stringify(message));
+ break;
+ }
+}
+
+
+function onHelpAppClosed() {
+ if (helpAppWindow) {
+ helpAppWindow.fromQml.disconnect(onMessageFromHelpApp);
+ helpAppWindow.closed.disconnect(onHelpAppClosed);
+ }
+ helpAppWindow = false;
+}
+
+
+var HELP_APP_QML_PATH = Script.resourcesPath() + "qml/hifi/simplifiedUI/helpApp/HelpApp.qml";
+var HELP_APP_WINDOW_TITLE = "Help";
+var HELP_APP_PRESENTATION_MODE = Desktop.PresentationMode.NATIVE;
+var HELP_APP_WIDTH_PX = 480;
+var HELP_APP_HEIGHT_PX = 615;
+var HELP_APP_WINDOW_FLAGS = 0x00000001 | // Qt::Window
+ 0x00001000 | // Qt::WindowTitleHint
+ 0x00002000 | // Qt::WindowSystemMenuHint
+ 0x08000000 | // Qt::WindowCloseButtonHint
+ 0x00008000 | // Qt::WindowMaximizeButtonHint
+ 0x00004000; // Qt::WindowMinimizeButtonHint
+var helpAppWindow = false;
+function toggleHelpApp() {
+ if (helpAppWindow) {
+ helpAppWindow.close();
+ // This really shouldn't be necessary.
+ // This signal really should automatically be called by the signal handler set up below.
+ // But fixing that requires an engine change, so this workaround will do.
+ onHelpAppClosed();
+ return;
+ }
+
+ helpAppWindow = Desktop.createWindow(HELP_APP_QML_PATH, {
+ title: HELP_APP_WINDOW_TITLE,
+ presentationMode: HELP_APP_PRESENTATION_MODE,
+ size: {
+ x: HELP_APP_WIDTH_PX,
+ y: HELP_APP_HEIGHT_PX
+ },
+ position: {
+ x: Math.max(Window.x + POPOUT_SAFE_MARGIN_X, Window.x + Window.innerWidth / 2 - HELP_APP_WIDTH_PX / 2),
+ y: Math.max(Window.y + POPOUT_SAFE_MARGIN_Y, Window.y + Window.innerHeight / 2 - HELP_APP_HEIGHT_PX / 2)
+ },
+ overrideFlags: HELP_APP_WINDOW_FLAGS
+ });
+
+ helpAppWindow.fromQml.connect(onMessageFromHelpApp);
+ helpAppWindow.closed.connect(onHelpAppClosed);
+}
+
function updateEmoteAppBarPosition() {
if (!emoteAppBarWindow) {
return;
@@ -374,6 +457,10 @@ function onMessageFromTopBar(message) {
toggleSettingsApp();
break;
+ case "toggleHelpApp":
+ toggleHelpApp();
+ break;
+
case "setOutputMuted":
setOutputMuted(message.data.outputMuted);
break;
diff --git a/tools/jsdoc/hifi-jsdoc-template/tmpl/container.tmpl b/tools/jsdoc/hifi-jsdoc-template/tmpl/container.tmpl
index 3796bab632..451ed4d01a 100644
--- a/tools/jsdoc/hifi-jsdoc-template/tmpl/container.tmpl
+++ b/tools/jsdoc/hifi-jsdoc-template/tmpl/container.tmpl
@@ -239,7 +239,7 @@
-
+
+ } ?>
+
+
Type:
+
@@ -63,7 +66,7 @@ var self = this;
-
+
Type: