mirror of
https://github.com/overte-org/overte.git
synced 2025-08-04 04:03:35 +02:00
Merge branch 'master' of https://github.com/highfidelity/hifi into red
This commit is contained in:
commit
96bdeebc37
9 changed files with 60 additions and 13 deletions
|
@ -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}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue