Merge branch 'master' of https://github.com/highfidelity/hifi into red

This commit is contained in:
samcake 2016-11-02 12:30:45 -07:00
commit 96bdeebc37
9 changed files with 60 additions and 13 deletions

View file

@ -571,7 +571,9 @@ Function HandlePostInstallOptions
; both launches use the explorer trick in case the user has elevated permissions for the installer
; it won't be possible to use this approach if either application should be launched with a command line param
${If} ${SectionIsSelected} ${@SERVER_COMPONENT_NAME@}
Exec '"$WINDIR\explorer.exe" "$INSTDIR\@CONSOLE_INSTALL_SUBDIR@\@CONSOLE_WIN_EXEC_NAME@"'
; create shortcut with ARGUMENTS
CreateShortCut "$TEMP\SandboxShortcut.lnk" "$INSTDIR\@CONSOLE_INSTALL_SUBDIR@\@CONSOLE_WIN_EXEC_NAME@" "-- --launchInterface"
Exec '"$WINDIR\explorer.exe" "$TEMP\SandboxShortcut.lnk"'
${Else}
Exec '"$WINDIR\explorer.exe" "$INSTDIR\@INTERFACE_WIN_EXEC_NAME@"'
${EndIf}

View file

@ -20,10 +20,10 @@ ScrollingWindow {
anchors.centerIn: parent
UpdateDialog {
id: updateDialog
implicitWidth: backgroundRectangle.width
implicitHeight: backgroundRectangle.height
readonly property int contentWidth: 500
readonly property int logoSize: 60
readonly property int borderWidth: 30
@ -36,7 +36,7 @@ ScrollingWindow {
signal triggerBuildDownload
signal closeUpdateDialog
Rectangle {
id: backgroundRectangle
color: "#ffffff"
@ -47,7 +47,7 @@ ScrollingWindow {
Image {
id: logo
source: "../images/interface-logo.svg"
source: "../images/hifi-logo.svg"
width: updateDialog.logoSize
height: updateDialog.logoSize
anchors {
@ -65,7 +65,7 @@ ScrollingWindow {
topMargin: updateDialog.borderWidth
top: parent.top
}
Rectangle {
id: header
width: parent.width - updateDialog.logoSize - updateDialog.inputSpacing

View file

@ -113,9 +113,8 @@ Rectangle {
}
FiraSansRegular {
id: users;
visible: action === 'concurrency';
text: onlineUsers;
size: textSize;
text: (action === 'concurrency') ? onlineUsers : 'snapshot';
size: (action === 'concurrency') ? textSize : textSizeSmall;
color: hifi.colors.white;
anchors {
verticalCenter: usersImage.verticalCenter;

View file

@ -118,11 +118,26 @@ void AnimSkeleton::convertAbsoluteRotationsToRelative(std::vector<glm::quat>& ro
}
}
void AnimSkeleton::saveNonMirroredPoses(const AnimPoseVec& poses) const {
_nonMirroredPoses.clear();
for (int i = 0; i < (int)_nonMirroredIndices.size(); ++i) {
_nonMirroredPoses.push_back(poses[_nonMirroredIndices[i]]);
}
}
void AnimSkeleton::restoreNonMirroredPoses(AnimPoseVec& poses) const {
for (int i = 0; i < (int)_nonMirroredIndices.size(); ++i) {
int index = _nonMirroredIndices[i];
poses[index] = _nonMirroredPoses[i];
}
}
void AnimSkeleton::mirrorRelativePoses(AnimPoseVec& poses) const {
saveNonMirroredPoses(poses);
convertRelativePosesToAbsolute(poses);
mirrorAbsolutePoses(poses);
convertAbsolutePosesToRelative(poses);
restoreNonMirroredPoses(poses);
}
void AnimSkeleton::mirrorAbsolutePoses(AnimPoseVec& poses) const {
@ -189,8 +204,14 @@ void AnimSkeleton::buildSkeletonFromJoints(const std::vector<FBXJoint>& joints)
}
// build mirror map.
_nonMirroredIndices.clear();
_mirrorMap.reserve(_joints.size());
for (int i = 0; i < (int)joints.size(); i++) {
if (_joints[i].name.endsWith("tEye")) {
// HACK: we don't want to mirror some joints so we remember their indices
// so we can restore them after a future mirror operation
_nonMirroredIndices.push_back(i);
}
int mirrorJointIndex = -1;
if (_joints[i].name.startsWith("Left")) {
QString mirrorJointName = QString(_joints[i].name).replace(0, 4, "Right");

View file

@ -57,6 +57,9 @@ public:
void convertAbsoluteRotationsToRelative(std::vector<glm::quat>& rotations) const;
void saveNonMirroredPoses(const AnimPoseVec& poses) const;
void restoreNonMirroredPoses(AnimPoseVec& poses) const;
void mirrorRelativePoses(AnimPoseVec& poses) const;
void mirrorAbsolutePoses(AnimPoseVec& poses) const;
@ -75,6 +78,8 @@ protected:
AnimPoseVec _absoluteDefaultPoses;
AnimPoseVec _relativePreRotationPoses;
AnimPoseVec _relativePostRotationPoses;
mutable AnimPoseVec _nonMirroredPoses;
std::vector<int> _nonMirroredIndices;
std::vector<int> _mirrorMap;
// no copies

View file

@ -85,18 +85,26 @@ public:
}
void beforeAboutToQuit() {
Lock lock(_checkDevicesMutex);
_quit = true;
}
void run() override {
while (!_quit) {
while (true) {
{
Lock lock(_checkDevicesMutex);
if (_quit) {
break;
}
_audioClient->checkDevices();
}
QThread::msleep(DEVICE_CHECK_INTERVAL_MSECS);
_audioClient->checkDevices();
}
}
private:
AudioClient* _audioClient { nullptr };
Mutex _checkDevicesMutex;
bool _quit { false };
};

View file

@ -86,6 +86,7 @@ const LoaderList& getLoadedPlugins() {
QString pluginPath = QCoreApplication::applicationDirPath() + "/plugins/";
#endif
QDir pluginDir(pluginPath);
pluginDir.setSorting(QDir::Name);
pluginDir.setFilter(QDir::Files);
if (pluginDir.exists()) {
qInfo() << "Loading runtime plugins from " << pluginPath;

View file

@ -868,6 +868,12 @@ function onContentLoaded() {
homeServer.start();
}
// If we were launched with the launchInterface option, then we need to launch interface now
if (argv.launchInterface) {
log.debug("Interface launch requested... argv.launchInterface:", argv.launchInterface);
startInterface();
}
// If we were launched with the shutdownWatcher option, then we need to watch for the interface app
// shutting down. The interface app will regularly update a running state file which we will check.
// If the file doesn't exist or stops updating for a significant amount of time, we will shut down.

View file

@ -971,6 +971,7 @@ TutorialManager = function() {
var currentStep = null;
var startedTutorialAt = 0;
var startedLastStepAt = 0;
var didFinishTutorial = false;
var wentToEntryStepNum;
var VERSION = 1;
@ -1032,6 +1033,7 @@ TutorialManager = function() {
info("DONE WITH TUTORIAL");
currentStepNum = -1;
currentStep = null;
didFinishTutorial = true;
return false;
} else {
info("Starting step", currentStepNum);
@ -1069,8 +1071,11 @@ TutorialManager = function() {
// This is a message sent from the "entry" portal in the courtyard,
// after the tutorial has finished.
this.enteredEntryPortal = function() {
info("Got enteredEntryPortal, tracking");
this.trackStep("wentToEntry", wentToEntryStepNum);
info("Got enteredEntryPortal");
if (didFinishTutorial) {
info("Tracking wentToEntry");
this.trackStep("wentToEntry", wentToEntryStepNum);
}
}
}