mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 12:38:27 +02:00
changed the json reader to take an array not a string for the flex targets
This commit is contained in:
parent
d174fb1b5c
commit
d547d5b854
4 changed files with 36 additions and 17 deletions
|
@ -192,8 +192,8 @@
|
||||||
"tipRotationVar": "headRotation",
|
"tipRotationVar": "headRotation",
|
||||||
"alphaVar": "splineIKAlpha",
|
"alphaVar": "splineIKAlpha",
|
||||||
"enabledVar": "splineIKEnabled",
|
"enabledVar": "splineIKEnabled",
|
||||||
"tipTargetFlexCoefficients": "1.0, 1.0, 1.0, 1.0, 1.0",
|
"tipTargetFlexCoefficients": [ 1.0, 1.0, 1.0, 1.0, 1.0 ],
|
||||||
"midTargetFlexCoefficients": "1.0, 1.0, 1.0"
|
"midTargetFlexCoefficients": [ 1.0, 1.0, 1.0 ]
|
||||||
},
|
},
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -594,8 +594,28 @@ static AnimNode::Pointer loadSplineIKNode(const QJsonObject& jsonObj, const QStr
|
||||||
READ_STRING(tipRotationVar, jsonObj, id, jsonUrl, nullptr);
|
READ_STRING(tipRotationVar, jsonObj, id, jsonUrl, nullptr);
|
||||||
READ_STRING(alphaVar, jsonObj, id, jsonUrl, nullptr);
|
READ_STRING(alphaVar, jsonObj, id, jsonUrl, nullptr);
|
||||||
READ_STRING(enabledVar, jsonObj, id, jsonUrl, nullptr);
|
READ_STRING(enabledVar, jsonObj, id, jsonUrl, nullptr);
|
||||||
READ_STRING(tipTargetFlexCoefficients, jsonObj, id, jsonUrl, nullptr);
|
|
||||||
READ_STRING(midTargetFlexCoefficients, jsonObj, id, jsonUrl, nullptr);
|
auto tipFlexCoefficientsValue = jsonObj.value("tipTargetFlexCoefficients");
|
||||||
|
if (!tipFlexCoefficientsValue.isArray()) {
|
||||||
|
qCCritical(animation) << "AnimNodeLoader, bad or missing tip flex array";
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
auto tipFlexCoefficientsArray = tipFlexCoefficientsValue.toArray();
|
||||||
|
std::vector<float> tipTargetFlexCoefficients;
|
||||||
|
for (const auto& value : tipFlexCoefficientsArray) {
|
||||||
|
tipTargetFlexCoefficients.push_back((float)value.toDouble());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto midFlexCoefficientsValue = jsonObj.value("midTargetFlexCoefficients");
|
||||||
|
if (!midFlexCoefficientsValue.isArray()) {
|
||||||
|
qCCritical(animation) << "AnimNodeLoader, bad or missing mid flex array";
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
auto midFlexCoefficientsArray = midFlexCoefficientsValue.toArray();
|
||||||
|
std::vector<float> midTargetFlexCoefficients;
|
||||||
|
for (const auto& midValue : midFlexCoefficientsArray) {
|
||||||
|
midTargetFlexCoefficients.push_back((float)midValue.toDouble());
|
||||||
|
}
|
||||||
|
|
||||||
auto node = std::make_shared<AnimSplineIK>(id, alpha, enabled, interpDuration,
|
auto node = std::make_shared<AnimSplineIK>(id, alpha, enabled, interpDuration,
|
||||||
baseJointName, midJointName, tipJointName,
|
baseJointName, midJointName, tipJointName,
|
||||||
|
|
|
@ -29,8 +29,8 @@ AnimSplineIK::AnimSplineIK(const QString& id, float alpha, bool enabled, float i
|
||||||
const QString& tipRotationVar,
|
const QString& tipRotationVar,
|
||||||
const QString& alphaVar,
|
const QString& alphaVar,
|
||||||
const QString& enabledVar,
|
const QString& enabledVar,
|
||||||
const QString& tipTargetFlexCoefficients,
|
const std::vector<float> tipTargetFlexCoefficients,
|
||||||
const QString& midTargetFlexCoefficients) :
|
const std::vector<float> midTargetFlexCoefficients) :
|
||||||
AnimNode(AnimNode::Type::SplineIK, id),
|
AnimNode(AnimNode::Type::SplineIK, id),
|
||||||
_alpha(alpha),
|
_alpha(alpha),
|
||||||
_enabled(enabled),
|
_enabled(enabled),
|
||||||
|
@ -48,21 +48,20 @@ AnimSplineIK::AnimSplineIK(const QString& id, float alpha, bool enabled, float i
|
||||||
_enabledVar(enabledVar)
|
_enabledVar(enabledVar)
|
||||||
{
|
{
|
||||||
|
|
||||||
QStringList tipTargetFlexCoefficientsValues = tipTargetFlexCoefficients.split(',', QString::SkipEmptyParts);
|
for (int i = 0; i < tipTargetFlexCoefficients.size(); i++) {
|
||||||
for (int i = 0; i < tipTargetFlexCoefficientsValues.size(); i++) {
|
|
||||||
if (i < MAX_NUMBER_FLEX_VARIABLES) {
|
if (i < MAX_NUMBER_FLEX_VARIABLES) {
|
||||||
_tipTargetFlexCoefficients[i] = (float)tipTargetFlexCoefficientsValues[i].toDouble();
|
_tipTargetFlexCoefficients[i] = tipTargetFlexCoefficients[i];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
_numTipTargetFlexCoefficients = std::min(tipTargetFlexCoefficientsValues.size(), MAX_NUMBER_FLEX_VARIABLES);
|
}
|
||||||
|
_numTipTargetFlexCoefficients = std::min((int)tipTargetFlexCoefficients.size(), MAX_NUMBER_FLEX_VARIABLES);
|
||||||
|
|
||||||
QStringList midTargetFlexCoefficientsValues = midTargetFlexCoefficients.split(',', QString::SkipEmptyParts);
|
for (int i = 0; i < midTargetFlexCoefficients.size(); i++) {
|
||||||
for (int i = 0; i < midTargetFlexCoefficientsValues.size(); i++) {
|
|
||||||
if (i < MAX_NUMBER_FLEX_VARIABLES) {
|
if (i < MAX_NUMBER_FLEX_VARIABLES) {
|
||||||
_midTargetFlexCoefficients[i] = (float)midTargetFlexCoefficientsValues[i].toDouble();
|
_midTargetFlexCoefficients[i] = midTargetFlexCoefficients[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_numMidTargetFlexCoefficients = std::min(midTargetFlexCoefficientsValues.size(), MAX_NUMBER_FLEX_VARIABLES);
|
_numMidTargetFlexCoefficients = std::min((int)midTargetFlexCoefficients.size(), MAX_NUMBER_FLEX_VARIABLES);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,8 @@ public:
|
||||||
const QString& midPositionVar, const QString& midRotationVar,
|
const QString& midPositionVar, const QString& midRotationVar,
|
||||||
const QString& tipPositionVar, const QString& tipRotationVar,
|
const QString& tipPositionVar, const QString& tipRotationVar,
|
||||||
const QString& alphaVar, const QString& enabledVar,
|
const QString& alphaVar, const QString& enabledVar,
|
||||||
const QString& tipTargetFlexCoefficients,
|
const std::vector<float> tipTargetFlexCoefficients,
|
||||||
const QString& midTargetFlexCoefficients);
|
const std::vector<float> midTargetFlexCoefficients);
|
||||||
|
|
||||||
virtual ~AnimSplineIK() override;
|
virtual ~AnimSplineIK() override;
|
||||||
virtual const AnimPoseVec& evaluate(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut) override;
|
virtual const AnimPoseVec& evaluate(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut) override;
|
||||||
|
|
Loading…
Reference in a new issue