Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (!it.second.HasMorphs(refr))
- continue;
- BSFixedString nodeName = it.first.data;
- NiGeometry * triShape = rootNode->GetAsNiGeometry();
- NiAVObject * bodyNode = triShape ? triShape : rootNode->GetObjectByName(&nodeName.data);
- if (bodyNode)
- {
- NiGeometry * bodyGeometry = bodyNode->GetAsNiGeometry();
- if (bodyGeometry)
- {
- NiGeometryData * geometryData = niptr_cast<NiGeometryData>(bodyGeometry->m_spModelData);
- NiSkinInstance * skinInstance = niptr_cast<NiSkinInstance>(bodyGeometry->m_spSkinInstance);
- if (geometryData && skinInstance) {
- NiSkinPartition * skinPartition = niptr_cast<NiSkinPartition>(skinInstance->m_spSkinPartition);
- if (skinPartition) {
- NiGeometryData * targetShapeData = NULL;
- CALL_MEMBER_FN(geometryData, DeepCopy)((NiObject **)&targetShapeData);
- NiSkinPartition * newPartition = NULL;
- CALL_MEMBER_FN(skinPartition, DeepCopy)((NiObject **)&newPartition);
- NiSkinInstance * newSkinInstance = CALL_MEMBER_FN(skinInstance, Copy)();
- newSkinInstance->m_spSkinPartition = newPartition;
- newPartition->DecRef();
- if (targetShapeData) {
- BSFaceGenBaseMorphExtraData * bodyData = (BSFaceGenBaseMorphExtraData *)bodyGeometry->GetExtraData("FOD");
- if (bodyData) {
- bodyData->IncRef();
- // Undo old morphs for this trishape
- for (UInt16 i = 0; i < targetShapeData->m_usVertices; i++) {
- if (!isAttaching)
- targetShapeData->m_pkVertex[i] -= bodyData->vertexData[i];
- bodyData->vertexData[i] = NiPoint3(0, 0, 0);
- }
- bodyData->DecRef();
- }
- // No old morphs, add one
- if (!bodyData) {
- bodyData = BSFaceGenBaseMorphExtraData::Create(geometryData, false);
- bodyGeometry->AddExtraData(bodyData);
- }
- bodyGeometry->SetModelData(targetShapeData);
- bodyGeometry->SetSkinInstance(newSkinInstance);
- targetShapeData->DecRef();
- if (bodyData) {
- bodyData->IncRef();
- it.second.ApplyMorphs(refr, targetShapeData->m_usVertices, targetShapeData->m_pkVertex, bodyData->vertexData);
- bodyData->DecRef();
- }
- targetShapeData->m_usDirtyFlags = 0x0001;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement