void BoneNode::addSkin(SkinNode* skin, bool display) { addSkin(skin, display, false); }
ArmatureData * JSONDataParser::_parseArmature(const rapidjson::Value & rawData) { const auto armature = BaseObject::borrowObject<ArmatureData>(); armature->name = _getString(rawData, NAME, ""); armature->frameRate = _getNumber(rawData, FRAME_RATE, this->_data->frameRate); if (rawData.HasMember(TYPE) && rawData[TYPE].IsString()) { armature->type = _getArmatureType(rawData[TYPE].GetString()); } else { armature->type = (ArmatureType)_getNumber(rawData, TYPE, (int)ArmatureType::Armature); } this->_armature = armature; this->_rawBones.clear(); if (rawData.HasMember(BONE)) { for (const auto& boneObject : rawData[BONE].GetArray()) { const auto bone = _parseBone(boneObject); armature->addBone(bone, _getString(boneObject, PARENT, "")); this->_rawBones.push_back(bone); } } if (rawData.HasMember(IK)) { for (const auto& ikObject : rawData[IK].GetArray()) { _parseIK(ikObject); } } if (rawData.HasMember(SLOT)) { for (const auto& slotObject : rawData[SLOT].GetArray()) { armature->addSlot(_parseSlot(slotObject)); } } if (rawData.HasMember(SKIN)) { for (const auto& skinObject : rawData[SKIN].GetArray()) { armature->addSkin(_parseSkin(skinObject)); } } if (rawData.HasMember(ANIMATION)) { for (const auto& animationObject : rawData[ANIMATION].GetArray()) { armature->addAnimation(_parseAnimation(animationObject)); } } this->_armature = nullptr; this->_rawBones.clear(); if (this->_isParentCooriinate && _getBoolean(rawData, IS_GLOBAL, true)) { this->_globalToLocal(armature); } return armature; }