From ceccc6d6ec763425f284249a07dab4b00c7e9651 Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Thu, 13 Sep 2018 14:49:35 -0700 Subject: [PATCH] make getCollisionCapsule thread safe --- interface/src/avatar/MyAvatar.cpp | 13 ++++++++++--- interface/src/avatar/MyAvatar.h | 7 ++++++- libraries/avatars/src/AvatarData.h | 2 ++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 9a78f394e1..dc29f34bd8 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -149,7 +149,8 @@ MyAvatar::MyAvatar(QThread* thread) : }); connect(_skeletonModel.get(), &Model::rigReady, this, &Avatar::rigReady); connect(_skeletonModel.get(), &Model::rigReset, this, &Avatar::rigReset); - + connect(&_skeletonModel->getRig(), &Rig::onLoadComplete, this, &MyAvatar::updateCollisionCapsule); + connect(this, &MyAvatar::sensorToWorldScaleChanged, this, &MyAvatar::updateCollisionCapsule); using namespace recording; _skeletonModel->flagAsCauterized(); @@ -255,6 +256,7 @@ MyAvatar::MyAvatar(QThread* thread) : }); connect(&(_skeletonModel->getRig()), SIGNAL(onLoadComplete()), this, SIGNAL(onLoadComplete())); + _characterController.setDensity(_density); } @@ -3307,7 +3309,7 @@ bool MyAvatar::getCollisionsEnabled() { return _characterController.computeCollisionGroup() != BULLET_COLLISION_GROUP_COLLISIONLESS; } -QVariantMap MyAvatar::getCollisionCapsule() { +void MyAvatar::updateCollisionCapsule() { glm::vec3 start, end; float radius; getCapsule(start, end, radius); @@ -3315,7 +3317,12 @@ QVariantMap MyAvatar::getCollisionCapsule() { capsule["start"] = vec3toVariant(start); capsule["end"] = vec3toVariant(end); capsule["radius"] = QVariant(radius); - return capsule; + _capsuleShape.set(capsule); +} + +// thread safe +QVariantMap MyAvatar::getCollisionCapsule() const { + return _capsuleShape.get(); } void MyAvatar::setCharacterControllerEnabled(bool enabled) { diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 7ba17328c0..9786b7a639 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -1021,7 +1021,7 @@ public: * @function MyAvatar.getCollisionCapsule * @returns {object} */ - Q_INVOKABLE QVariantMap getCollisionCapsule(); + Q_INVOKABLE QVariantMap getCollisionCapsule() const; /**jsdoc * @function MyAvatar.setCharacterControllerEnabled @@ -1373,6 +1373,11 @@ public slots: */ virtual void setModelScale(float scale) override; + /**jsdoc + * @function MyAvatar.updateCollisionCapsule + */ + void updateCollisionCapsule(); + signals: /**jsdoc diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index e9f1f5f6c3..8ebaa695fa 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -1444,6 +1444,8 @@ protected: ThreadSafeValueCache _farGrabLeftMatrixCache { glm::mat4() }; ThreadSafeValueCache _farGrabMouseMatrixCache { glm::mat4() }; + ThreadSafeValueCache _capsuleShape { QVariantMap() }; + int getFauxJointIndex(const QString& name) const; float _audioLoudness { 0.0f };