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 ; 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 ; 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@} ${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} ${Else}
Exec '"$WINDIR\explorer.exe" "$INSTDIR\@INTERFACE_WIN_EXEC_NAME@"' Exec '"$WINDIR\explorer.exe" "$INSTDIR\@INTERFACE_WIN_EXEC_NAME@"'
${EndIf} ${EndIf}

View file

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

View file

@ -113,9 +113,8 @@ Rectangle {
} }
FiraSansRegular { FiraSansRegular {
id: users; id: users;
visible: action === 'concurrency'; text: (action === 'concurrency') ? onlineUsers : 'snapshot';
text: onlineUsers; size: (action === 'concurrency') ? textSize : textSizeSmall;
size: textSize;
color: hifi.colors.white; color: hifi.colors.white;
anchors { anchors {
verticalCenter: usersImage.verticalCenter; 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 { void AnimSkeleton::mirrorRelativePoses(AnimPoseVec& poses) const {
saveNonMirroredPoses(poses);
convertRelativePosesToAbsolute(poses); convertRelativePosesToAbsolute(poses);
mirrorAbsolutePoses(poses); mirrorAbsolutePoses(poses);
convertAbsolutePosesToRelative(poses); convertAbsolutePosesToRelative(poses);
restoreNonMirroredPoses(poses);
} }
void AnimSkeleton::mirrorAbsolutePoses(AnimPoseVec& poses) const { void AnimSkeleton::mirrorAbsolutePoses(AnimPoseVec& poses) const {
@ -189,8 +204,14 @@ void AnimSkeleton::buildSkeletonFromJoints(const std::vector<FBXJoint>& joints)
} }
// build mirror map. // build mirror map.
_nonMirroredIndices.clear();
_mirrorMap.reserve(_joints.size()); _mirrorMap.reserve(_joints.size());
for (int i = 0; i < (int)joints.size(); i++) { 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; int mirrorJointIndex = -1;
if (_joints[i].name.startsWith("Left")) { if (_joints[i].name.startsWith("Left")) {
QString mirrorJointName = QString(_joints[i].name).replace(0, 4, "Right"); 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 convertAbsoluteRotationsToRelative(std::vector<glm::quat>& rotations) const;
void saveNonMirroredPoses(const AnimPoseVec& poses) const;
void restoreNonMirroredPoses(AnimPoseVec& poses) const;
void mirrorRelativePoses(AnimPoseVec& poses) const; void mirrorRelativePoses(AnimPoseVec& poses) const;
void mirrorAbsolutePoses(AnimPoseVec& poses) const; void mirrorAbsolutePoses(AnimPoseVec& poses) const;
@ -75,6 +78,8 @@ protected:
AnimPoseVec _absoluteDefaultPoses; AnimPoseVec _absoluteDefaultPoses;
AnimPoseVec _relativePreRotationPoses; AnimPoseVec _relativePreRotationPoses;
AnimPoseVec _relativePostRotationPoses; AnimPoseVec _relativePostRotationPoses;
mutable AnimPoseVec _nonMirroredPoses;
std::vector<int> _nonMirroredIndices;
std::vector<int> _mirrorMap; std::vector<int> _mirrorMap;
// no copies // no copies

View file

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

View file

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

View file

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