Mass: fix data ordering issue with joint sliders.

This commit is contained in:
Guillaume Jacquemin 2021-11-01 11:19:34 +01:00
parent 83fa5822bf
commit bd8ff47f1e
2 changed files with 77 additions and 66 deletions

View File

@ -290,94 +290,94 @@ auto Mass::writeJointSliders() -> bool {
return false;
}
auto length = frame_prop->at<FloatProperty>("NeckLength_6_ED6AF79849C27CD1A9D523A09E2BFE58");
if(!length && _frame.joints.neck != 0.0f) {
length = new FloatProperty;
auto length_prop = FloatProperty::ptr{length};
length_prop->name.emplace("NeckLength_6_ED6AF79849C27CD1A9D523A09E2BFE58");
arrayAppend(frame_prop->properties, std::move(length_prop));
}
if(length) {
Containers::Array<UnrealPropertyBase::ptr> temp;
auto length = frame_prop->atMove<FloatProperty>("NeckLength_6_ED6AF79849C27CD1A9D523A09E2BFE58");
if(_frame.joints.neck != 0.0f) {
if(!length) {
length.emplace();
length->name.emplace("NeckLength_6_ED6AF79849C27CD1A9D523A09E2BFE58");
}
length->value = _frame.joints.neck;
arrayAppend(temp, std::move(length));
}
length = frame_prop->at<FloatProperty>("BodyLength_7_C16287754CBA96C93BAE36A5C154996A");
if(!length && _frame.joints.body != 0.0f) {
length = new FloatProperty;
auto length_prop = FloatProperty::ptr{length};
length_prop->name.emplace("BodyLength_7_C16287754CBA96C93BAE36A5C154996A");
arrayAppend(frame_prop->properties, std::move(length_prop));
}
if(length) {
length = frame_prop->atMove<FloatProperty>("BodyLength_7_C16287754CBA96C93BAE36A5C154996A");
if(_frame.joints.body != 0.0f) {
if(!length) {
length.emplace();
length->name.emplace("BodyLength_7_C16287754CBA96C93BAE36A5C154996A");
}
length->value = _frame.joints.body;
arrayAppend(temp, std::move(length));
}
length = frame_prop->at<FloatProperty>("ShoulderLength_8_220EDF304F1C1226F0D8D39117FB3883");
if(!length && _frame.joints.shoulders != 0.0f) {
length = new FloatProperty;
auto length_prop = FloatProperty::ptr{length};
length_prop->name.emplace("ShoulderLength_8_220EDF304F1C1226F0D8D39117FB3883");
arrayAppend(frame_prop->properties, std::move(length_prop));
}
if(length) {
length = frame_prop->atMove<FloatProperty>("ShoulderLength_8_220EDF304F1C1226F0D8D39117FB3883");
if(_frame.joints.shoulders != 0.0f) {
if(!length) {
length.emplace();
length->name.emplace("ShoulderLength_8_220EDF304F1C1226F0D8D39117FB3883");
}
length->value = _frame.joints.shoulders;
arrayAppend(temp, std::move(length));
}
length = frame_prop->at<FloatProperty>("HipLength_14_02AEEEAC4376087B9C51F0AA7CC92818");
if(!length && _frame.joints.hips != 0.0f) {
length = new FloatProperty;
auto length_prop = FloatProperty::ptr{length};
length_prop->name.emplace("HipLength_14_02AEEEAC4376087B9C51F0AA7CC92818");
arrayAppend(frame_prop->properties, std::move(length_prop));
}
if(length) {
length->value = _frame.joints.hips;
}
length = frame_prop->at<FloatProperty>("ArmUpperLength_10_249FDA3E4F3B399E7B9E5C9B7C765EAE");
if(!length && _frame.joints.upperArms != 0.0f) {
length = new FloatProperty;
auto length_prop = FloatProperty::ptr{length};
length_prop->name.emplace("ArmUpperLength_10_249FDA3E4F3B399E7B9E5C9B7C765EAE");
arrayAppend(frame_prop->properties, std::move(length_prop));
}
if(length) {
length = frame_prop->atMove<FloatProperty>("ArmUpperLength_10_249FDA3E4F3B399E7B9E5C9B7C765EAE");
if(_frame.joints.upperArms != 0.0f) {
if(!length) {
length.emplace();
length->name.emplace("ArmUpperLength_10_249FDA3E4F3B399E7B9E5C9B7C765EAE");
}
length->value = _frame.joints.upperArms;
arrayAppend(temp, std::move(length));
}
length = frame_prop->at<FloatProperty>("ArmLowerLength_12_ACD0F02745C28882619376926292FB36");
if(!length && _frame.joints.lowerArms != 0.0f) {
length = new FloatProperty;
auto length_prop = FloatProperty::ptr{length};
length_prop->name.emplace("ArmLowerLength_12_ACD0F02745C28882619376926292FB36");
arrayAppend(frame_prop->properties, std::move(length_prop));
}
if(length) {
length = frame_prop->atMove<FloatProperty>("ArmLowerLength_12_ACD0F02745C28882619376926292FB36");
if(_frame.joints.lowerArms != 0.0f) {
if(!length) {
length.emplace();
length->name.emplace("ArmLowerLength_12_ACD0F02745C28882619376926292FB36");
}
length->value = _frame.joints.lowerArms;
arrayAppend(temp, std::move(length));
}
length = frame_prop->at<FloatProperty>("LegUpperLength_16_A7C4C71249A3776F7A543D96819C0C61");
if(!length && _frame.joints.upperLegs != 0.0f) {
length = new FloatProperty;
auto length_prop = FloatProperty::ptr{length};
length_prop->name.emplace("LegUpperLength_16_A7C4C71249A3776F7A543D96819C0C61");
arrayAppend(frame_prop->properties, std::move(length_prop));
length = frame_prop->atMove<FloatProperty>("HipLength_14_02AEEEAC4376087B9C51F0AA7CC92818");
if(_frame.joints.hips != 0.0f) {
if(!length) {
length.emplace();
length->name.emplace("HipLength_14_02AEEEAC4376087B9C51F0AA7CC92818");
}
length->value = _frame.joints.hips;
arrayAppend(temp, std::move(length));
}
if(length) {
length = frame_prop->atMove<FloatProperty>("LegUpperLength_16_A7C4C71249A3776F7A543D96819C0C61");
if(_frame.joints.upperLegs != 0.0f) {
if(!length) {
length.emplace();
length->name.emplace("LegUpperLength_16_A7C4C71249A3776F7A543D96819C0C61");
}
length->value = _frame.joints.upperLegs;
arrayAppend(temp, std::move(length));
}
length = frame_prop->at<FloatProperty>("LegLowerLength_18_D2DF39964EA0F2A2129D0491B08A032F");
if(!length && _frame.joints.lowerLegs != 0.0f) {
length = new FloatProperty;
auto length_prop = FloatProperty::ptr{length};
length_prop->name.emplace("LegLowerLength_18_D2DF39964EA0F2A2129D0491B08A032F");
arrayAppend(frame_prop->properties, std::move(length_prop));
}
if(length) {
length = frame_prop->atMove<FloatProperty>("LegLowerLength_18_D2DF39964EA0F2A2129D0491B08A032F");
if(_frame.joints.lowerLegs != 0.0f) {
if(!length) {
length.emplace();
length->name.emplace("LegLowerLength_18_D2DF39964EA0F2A2129D0491B08A032F");
}
length->value = _frame.joints.lowerLegs;
arrayAppend(temp, std::move(length));
}
arrayAppend(temp, std::move(frame_prop->properties[frame_prop->properties.size() - 3]));
arrayAppend(temp, std::move(frame_prop->properties[frame_prop->properties.size() - 2]));
arrayAppend(temp, std::move(frame_prop->properties[frame_prop->properties.size() - 1]));
frame_prop->properties = std::move(temp);
if(!_mass->saveToFile()) {
_lastError = "Couldn't write data to " + _filename;
return false;

View File

@ -36,5 +36,16 @@ struct GenericStructProperty : public StructProperty {
return nullptr;
}
template<typename T>
std::enable_if_t<std::is_base_of<UnrealPropertyBase, T>::value, typename T::ptr>
atMove(const std::string& name) {
for(auto& item : properties) {
if(item && item->name == name) {
return Containers::Pointer<T>{static_cast<T*>(item.release())};
}
}
return nullptr;
}
Containers::Array<UnrealPropertyBase::ptr> properties;
};