mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 08:48:53 +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 physicsData;
|
||||||
QVariantMap collisionsData;
|
QVariantMap collisionsData;
|
||||||
QVariantMap threadData;
|
QVariantMap threadData;
|
||||||
|
std::map<QString, QVariantList> groupJointsMap;
|
||||||
|
QVariantList jointCollisionData;
|
||||||
auto &groups = flow.getGroupSettings();
|
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) {
|
for (auto &group : groups) {
|
||||||
QVariantMap settingsObject;
|
QVariantMap settingsObject;
|
||||||
QString groupName = group.first;
|
QString groupName = group.first;
|
||||||
|
@ -5416,8 +5427,10 @@ QVariantMap MyAvatar::getFlowData() {
|
||||||
settingsObject.insert("inertia", groupSettings._inertia);
|
settingsObject.insert("inertia", groupSettings._inertia);
|
||||||
settingsObject.insert("radius", groupSettings._radius);
|
settingsObject.insert("radius", groupSettings._radius);
|
||||||
settingsObject.insert("stiffness", groupSettings._stiffness);
|
settingsObject.insert("stiffness", groupSettings._stiffness);
|
||||||
|
settingsObject.insert("jointIndices", groupJointsMap[groupName]);
|
||||||
physicsData.insert(groupName, settingsObject);
|
physicsData.insert(groupName, settingsObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto &collisions = collisionSystem.getCollisions();
|
auto &collisions = collisionSystem.getCollisions();
|
||||||
for (auto &collision : collisions) {
|
for (auto &collision : collisions) {
|
||||||
QVariantMap collisionObject;
|
QVariantMap collisionObject;
|
||||||
|
@ -5441,6 +5454,19 @@ QVariantMap MyAvatar::getFlowData() {
|
||||||
return flowData;
|
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() {
|
void MyAvatar::initFlowFromFST() {
|
||||||
if (_skeletonModel->isLoaded()) {
|
if (_skeletonModel->isLoaded()) {
|
||||||
auto &flowData = _skeletonModel->getHFMModel().flowData;
|
auto &flowData = _skeletonModel->getHFMModel().flowData;
|
||||||
|
|
|
@ -1204,6 +1204,13 @@ public:
|
||||||
*/
|
*/
|
||||||
Q_INVOKABLE QVariantMap getFlowData();
|
Q_INVOKABLE QVariantMap getFlowData();
|
||||||
|
|
||||||
|
/**jsdoc
|
||||||
|
* returns the indices of every colliding flow joint
|
||||||
|
* @function MyAvatar.getCollidingFlowJoints
|
||||||
|
* @returns {int[]}
|
||||||
|
*/
|
||||||
|
Q_INVOKABLE QVariantList getCollidingFlowJoints();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
/**jsdoc
|
/**jsdoc
|
||||||
|
|
|
@ -222,6 +222,7 @@ public:
|
||||||
const glm::quat& getCurrentRotation() const { return _currentRotation; }
|
const glm::quat& getCurrentRotation() const { return _currentRotation; }
|
||||||
const glm::vec3& getCurrentTranslation() const { return _initialTranslation; }
|
const glm::vec3& getCurrentTranslation() const { return _initialTranslation; }
|
||||||
const glm::vec3& getInitialPosition() const { return _initialPosition; }
|
const glm::vec3& getInitialPosition() const { return _initialPosition; }
|
||||||
|
bool isColliding() const { return _colliding; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue