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: