From 86351ca21cfe1b43efef5642356814b8f8b1eed7 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 9 Sep 2016 17:31:11 -0700 Subject: [PATCH] Teleport bugs * made HMD.setPosition thread safe * changed script to use HMD.position = foo; --- .../src/scripting/HMDScriptingInterface.cpp | 19 ++++++++++++------- .../src/scripting/HMDScriptingInterface.h | 2 +- scripts/system/controllers/teleport.js | 2 +- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/interface/src/scripting/HMDScriptingInterface.cpp b/interface/src/scripting/HMDScriptingInterface.cpp index aa1b046962..474126d51b 100644 --- a/interface/src/scripting/HMDScriptingInterface.cpp +++ b/interface/src/scripting/HMDScriptingInterface.cpp @@ -91,13 +91,18 @@ glm::vec3 HMDScriptingInterface::getPosition() const { } void HMDScriptingInterface::setPosition(const glm::vec3& position) { - MyAvatar* myAvatar = DependencyManager::get()->getMyAvatar(); - glm::mat4 hmdToSensor = myAvatar->getHMDSensorMatrix(); - glm::mat4 sensorToWorld = myAvatar->getSensorToWorldMatrix(); - glm::mat4 hmdToWorld = sensorToWorld * hmdToSensor; - setTranslation(hmdToWorld, position); - sensorToWorld = hmdToWorld * glm::inverse(hmdToSensor); - myAvatar->setSensorToWorldMatrix(sensorToWorld); + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setPosition", Qt::QueuedConnection, Q_ARG(const glm::vec3&, position)); + return; + } else { + MyAvatar* myAvatar = DependencyManager::get()->getMyAvatar(); + glm::mat4 hmdToSensor = myAvatar->getHMDSensorMatrix(); + glm::mat4 sensorToWorld = myAvatar->getSensorToWorldMatrix(); + glm::mat4 hmdToWorld = sensorToWorld * hmdToSensor; + setTranslation(hmdToWorld, position); + sensorToWorld = hmdToWorld * glm::inverse(hmdToSensor); + myAvatar->setSensorToWorldMatrix(sensorToWorld); + } } glm::quat HMDScriptingInterface::getOrientation() const { diff --git a/interface/src/scripting/HMDScriptingInterface.h b/interface/src/scripting/HMDScriptingInterface.h index 45952b3a5e..9d553c393f 100644 --- a/interface/src/scripting/HMDScriptingInterface.h +++ b/interface/src/scripting/HMDScriptingInterface.h @@ -72,7 +72,7 @@ private: glm::vec3 getPosition() const; // Set the position of the HMD - void setPosition(const glm::vec3& position); + Q_INVOKABLE void setPosition(const glm::vec3& position); // Get the orientation of the HMD glm::quat getOrientation() const; diff --git a/scripts/system/controllers/teleport.js b/scripts/system/controllers/teleport.js index 21aee70cc0..3d4bf244a5 100644 --- a/scripts/system/controllers/teleport.js +++ b/scripts/system/controllers/teleport.js @@ -564,7 +564,7 @@ function Teleporter() { } else if (this.teleportMode === "HMDFirstAvatarWillFollow") { var eyeOffset = Vec3.subtract(MyAvatar.getEyePosition(), MyAvatar.position); landingPoint = Vec3.sum(landingPoint, eyeOffset); - HMD.setPosition(landingPoint); + HMD.position = landingPoint; } }