get the colliding joints

This commit is contained in:
luiscuenca 2019-03-08 14:36:47 -07:00
parent f363d95ca2
commit 4858f64810
3 changed files with 34 additions and 0 deletions

View file

@ -5404,7 +5404,18 @@ QVariantMap MyAvatar::getFlowData() {
QVariantMap physicsData;
QVariantMap collisionsData;
QVariantMap threadData;
std::map<QString, QVariantList> 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<QString, QVariantList>(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;

View file

@ -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

View file

@ -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: