bool CPhysxSkeleton::Init( const std::string& _szFileName, CalModel* _pCalModel, Math::Mat44f _vMat, ECollisionGroup aGrp, CObject3D *_pEntity ) { m_pEntity = _pEntity; m_mTransform = _vMat; _pCalModel->getSkeleton()->calculateState(); SetSkeleton(_pCalModel->getSkeleton()); vector<CalBone*> l_vLlistaBones = m_pCalSkeleton->getVectorBone(); //Inicialitzem l'estructura del PhysXSkeleton i creem les instancies dels PhysXBones. //Tindrem ja tota la info relativa de bones, pares i fills. for (size_t i = 0; i < l_vLlistaBones.size(); ++i) { CalBone* l_pBone = l_vLlistaBones[i]; CPhysxBone* l_pPhysXBone = new CPhysxBone(l_pBone->getCoreBone()->getName()); l_pPhysXBone->Init(l_pBone, _vMat, aGrp); m_vBones.push_back(l_pPhysXBone); } //Load la info del XML I POSA ELS ACTORS!!!! Load(_szFileName); InitParents(); InitPhysXJoints(_szFileName); return true; }
bool UAnimationAsset::ReplaceSkeleton(USkeleton* NewSkeleton, bool bConvertSpaces/*=false*/) { // if it's not same if (NewSkeleton != Skeleton) { // get all sequences that need to change TArray<UAnimSequence*> AnimSeqsToReplace; if (UAnimSequence* AnimSequence = Cast<UAnimSequence>(this)) { AnimSeqsToReplace.AddUnique(AnimSequence); } if (GetAllAnimationSequencesReferred(AnimSeqsToReplace)) { for (auto Iter = AnimSeqsToReplace.CreateIterator(); Iter; ++Iter) { UAnimSequence* AnimSeq = *Iter; if (AnimSeq && AnimSeq->Skeleton != NewSkeleton) { AnimSeq->RemapTracksToNewSkeleton(NewSkeleton, bConvertSpaces); } } } SetSkeleton(NewSkeleton); PostEditChange(); MarkPackageDirty(); return true; } return false; }
HRESULT KG3DAnimationComposer::Init(KG3DSkeleton *pSkeleton, KG3DModel *pModel) { HRESULT hRetCode = E_FAIL; KG_PROCESS_ERROR(pSkeleton); KG_PROCESS_ERROR(pModel); SetSkeleton(pSkeleton); CreateTweenCollector(pModel); m_dwPauseTime = 0; m_pModel = pModel; hRetCode = S_OK; Exit0: return hRetCode; }