From 4858f648101d905d41a38c9a6195ba693d70de65 Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Fri, 8 Mar 2019 14:36:47 -0700 Subject: [PATCH] get the colliding joints --- interface/src/avatar/MyAvatar.cpp | 26 ++++++++++++++++++++++++++ interface/src/avatar/MyAvatar.h | 7 +++++++ libraries/animation/src/Flow.h | 1 + 3 files changed, 34 insertions(+) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 7e0ee5c2fd..389263656d 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -5404,7 +5404,18 @@ QVariantMap MyAvatar::getFlowData() { QVariantMap physicsData; QVariantMap collisionsData; QVariantMap threadData; + std::map groupJointsMap; + QVariantList jointCollisionData; auto &groups = flow.getGroupSettings(); + for (auto &joint : flow.getJoints()) { + auto &groupName = joint.second.getGroup(); + if (groups.find(groupName) != groups.end()) { + if (groupJointsMap.find(groupName) == groupJointsMap.end()) { + groupJointsMap.insert(std::pair(groupName, QVariantList())); + } + groupJointsMap[groupName].push_back(joint.second.getIndex()); + } + } for (auto &group : groups) { QVariantMap settingsObject; QString groupName = group.first; @@ -5416,8 +5427,10 @@ QVariantMap MyAvatar::getFlowData() { settingsObject.insert("inertia", groupSettings._inertia); settingsObject.insert("radius", groupSettings._radius); settingsObject.insert("stiffness", groupSettings._stiffness); + settingsObject.insert("jointIndices", groupJointsMap[groupName]); physicsData.insert(groupName, settingsObject); } + auto &collisions = collisionSystem.getCollisions(); for (auto &collision : collisions) { QVariantMap collisionObject; @@ -5441,6 +5454,19 @@ QVariantMap MyAvatar::getFlowData() { return flowData; } +QVariantList MyAvatar::getCollidingFlowJoints() { + QVariantList collidingFlowJoints; + if (_skeletonModel->isLoaded()) { + auto& flow = _skeletonModel->getRig().getFlow(); + for (auto &joint : flow.getJoints()) { + if (joint.second.isColliding()) { + collidingFlowJoints.append(joint.second.getIndex()); + } + } + } + return collidingFlowJoints; +} + void MyAvatar::initFlowFromFST() { if (_skeletonModel->isLoaded()) { auto &flowData = _skeletonModel->getHFMModel().flowData; diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index c67cabe4f5..e516364f61 100755 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -1204,6 +1204,13 @@ public: */ Q_INVOKABLE QVariantMap getFlowData(); + /**jsdoc + * returns the indices of every colliding flow joint + * @function MyAvatar.getCollidingFlowJoints + * @returns {int[]} + */ + Q_INVOKABLE QVariantList getCollidingFlowJoints(); + public slots: /**jsdoc diff --git a/libraries/animation/src/Flow.h b/libraries/animation/src/Flow.h index d2eaaa22d9..ad81c2be77 100644 --- a/libraries/animation/src/Flow.h +++ b/libraries/animation/src/Flow.h @@ -222,6 +222,7 @@ public: const glm::quat& getCurrentRotation() const { return _currentRotation; } const glm::vec3& getCurrentTranslation() const { return _initialTranslation; } const glm::vec3& getInitialPosition() const { return _initialPosition; } + bool isColliding() const { return _colliding; } protected: