mirror of
https://github.com/lubosz/overte.git
synced 2025-04-14 01:46:18 +02:00
get the colliding joints
This commit is contained in:
parent
f363d95ca2
commit
4858f64810
3 changed files with 34 additions and 0 deletions
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
Loading…
Reference in a new issue