예제 #1
0
void BoneNode::addSkin(SkinNode* skin, bool display)
{
    addSkin(skin, display, false);
}
예제 #2
0
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;
}