bool CPhysxSkeleton::AddFixedJoint(CXMLTreeNode _XMLObjects) { string l_szActor1, l_szActor2, l_szDirection; l_szActor1 = _XMLObjects.GetAttribute<std::string>("Actor1" , ""); l_szActor2 = _XMLObjects.GetAttribute<std::string>("Actor2" , ""); l_szDirection = _XMLObjects.GetAttribute<std::string>("Direction" , ""); CPhysxBone* l_pBone1 = GetPhysxBoneByName(l_szActor1); CPhysxBone* l_pBone2 = GetPhysxBoneByName(l_szActor2); CPhysicActor* l_pActor1 = 0; CPhysicActor* l_pActor2 = 0; CPhysicFixedJoint* l_pFixedJoint = 0; l_pFixedJoint = new CPhysicFixedJoint(); l_pActor1 = l_pBone1->GetPhysxActor(); if (l_szActor2 == "NULL") { l_pFixedJoint->SetInfo(l_pActor1); } else { l_pActor2 = l_pBone2->GetPhysxActor(); l_pFixedJoint->SetInfo(l_pActor1, l_pActor2); } PhysXMInstance->AddPhysicFixedJoint(l_pFixedJoint); m_vFixedJoints.push_back(l_pFixedJoint); return true; }
bool CPhysxSkeleton::AddFixedJoint(CXMLTreeNode _XMLObjects) { string l_szActor1,l_szActor2, l_szDirection; l_szActor1 = _XMLObjects.GetPszISOProperty("Actor1" ,""); l_szActor2 = _XMLObjects.GetPszISOProperty("Actor2" ,""); l_szDirection = _XMLObjects.GetPszISOProperty("Direction" ,""); CPhysxBone* l_pBone1 = GetPhysxBoneByName(l_szActor1); CPhysxBone* l_pBone2 = GetPhysxBoneByName(l_szActor2); CPhysicActor* l_pActor1 = 0; CPhysicActor* l_pActor2 = 0; CPhysicFixedJoint* l_pFixedJoint = 0; l_pFixedJoint = new CPhysicFixedJoint(); l_pActor1 = l_pBone1->GetPhysxActor(); if (l_szActor2=="NULL") { l_pFixedJoint->SetInfo(l_pActor1); } else { l_pActor2 = l_pBone2->GetPhysxActor(); l_pFixedJoint->SetInfo(l_pActor1,l_pActor2); } CORE->GetPhysicsManager()->AddPhysicFixedJoint(l_pFixedJoint); m_vFixedJoints.push_back(l_pFixedJoint); return true; }
void CPhysxSkeleton::InitParents() { for(size_t i = 0; i < m_vBones.size(); ++i) { if (!m_vBones[i]->IsBoneRoot()) { int l_iParentId = m_vBones[i]->GetParentID(); if (l_iParentId != -1) { string l_szNameParent = m_pCalSkeleton->getBone(l_iParentId)->getCoreBone()->getName(); CPhysxBone* l_pParentPhysBone = GetPhysxBoneByName(l_szNameParent); m_vBones[i]->SetParent(l_pParentPhysBone); } else { m_vBones[i]->SetParent(0); } } else { m_vBones[i]->SetParent(0); } } }
bool CPhysxSkeleton::Load(const string& _szFileName) { CXMLTreeNode l_XML; CXMLTreeNode l_XMLObjects; if(!l_XML.LoadFile(_szFileName.c_str())) { LOGGER->AddNewLog(ELL_WARNING,"CPhysxRagdoll:: No s'ha trobat el XML \"%s\"", _szFileName.c_str()); return false; } l_XMLObjects = l_XML(0); int l_iNumObjects = l_XMLObjects.GetNumChildren(); for(int i = 0; i < l_iNumObjects; i++) { CXMLTreeNode l_XMLObject = l_XMLObjects(i); string l_szType,l_szName; if(l_XMLObject.IsComment()) { continue; } l_szName = l_XMLObject.GetPszISOProperty("name" ,""); l_szType = l_XMLObject.GetPszISOProperty("type" ,""); CPhysxBone* l_pBone = GetPhysxBoneByName(l_szName); if (l_pBone!=0) { if (l_szType=="box") { l_pBone->AddBoxActor(l_XMLObject, m_pEntity); } if (l_szType=="sphere") { l_pBone->AddSphereActor(l_XMLObject, m_pEntity); } if (l_szType=="capsule") { l_pBone->AddCapsuleActor(l_XMLObject, m_pEntity); } } } if (!m_bRagdollActive) { SleepPhysxBones(); } return true; }
void CPhysxSkeleton::UpdateCal3dFromPhysx() { for(size_t i = 0; i < m_vBones.size(); ++i) { m_vBones[i]->UpdateCal3dFromPhysx(); } m_mTransform = GetPhysxBoneByName("Bip01 Pelvis")->GetTransform(); m_pCalSkeleton->calculateState(); }
bool CPhysxSkeleton::Load(const std::string& _szFileName) { ASSERT(false,"No deberia de hacer esto!!!!"); bool lOk = true; CXMLTreeNode l_XML; CXMLTreeNode l_XMLObjects; if(!l_XML.LoadAndFindNode(_szFileName.c_str(), "node" , l_XMLObjects)) { LOG_WARNING_APPLICATION( "Could not open file %s", _szFileName.c_str()); lOk = false; } else { for(uint32 i = 0, l_iNumObjects = l_XMLObjects.GetNumChildren(); i < l_iNumObjects; ++i) { const CXMLTreeNode& l_XMLObject = l_XMLObjects(i); const std::string& l_szName = l_XMLObject.GetAttribute<std::string>("name" , ""); CPhysxBone* l_pBone = GetPhysxBoneByName(l_szName); if (l_pBone ) { const std::string& l_szType = l_XMLObject.GetAttribute<std::string>("type" , ""); if (l_szType == "box") { l_pBone->AddBoxActor(l_XMLObject, m_pEntity); } else if (l_szType == "sphere") { l_pBone->AddSphereActor(l_XMLObject, m_pEntity); } else if (l_szType == "capsule") { l_pBone->AddCapsuleActor(l_XMLObject, m_pEntity); } } } if (!m_bRagdollActive) { SleepPhysxBones(); } } return lOk; }
bool CPhysxSkeleton::AddSphericalJoint(CXMLTreeNode _XMLObjects) { string l_szActor1, l_szActor2, l_szDirection; l_szActor1 = _XMLObjects.GetAttribute<std::string>("Actor1" , ""); l_szActor2 = _XMLObjects.GetAttribute<std::string>("Actor2" , ""); l_szDirection = _XMLObjects.GetAttribute<std::string>("Direction" , ""); SSphericalLimitInfo l_pJointInfo = GetJointParameterInfo(_XMLObjects); CPhysxBone* l_pBone1 = GetPhysxBoneByName(l_szActor1); CPhysxBone* l_pBone2 = GetPhysxBoneByName(l_szActor2); CPhysicActor* l_pActor1 = 0; CPhysicActor* l_pActor2 = 0; l_pActor1 = l_pBone1->GetPhysxActor(); CPhysicSphericalJoint* l_pSphericalJoint = 0; l_pSphericalJoint = new CPhysicSphericalJoint(); CalVector l_vCalVect = l_pBone1->GetCalBone()->getTranslationAbsolute(); Math::Vect3f l_vJointPoint(-l_vCalVect.x, l_vCalVect.y, l_vCalVect.z); l_vJointPoint = m_mTransform * l_vJointPoint; Math::Vect3f l_vAxis; CalVector l_vVect; //MES PROVES if (l_szDirection == "Out") { if (l_pBone1->GetChildList().size() > 0) { int l_pChildId = l_pBone1->GetChildList()[0]; string l_szNameChild = m_pCalSkeleton->getBone(l_pChildId)->getCoreBone()->getName(); CPhysxBone* l_pPhysChild = GetPhysxBoneByName(l_szNameChild); l_vVect = l_pPhysChild->GetCalBone()->getTranslationAbsolute(); l_vVect.x = -l_vVect.x; /* l_vAxis = Math::Vect3f(l_vVect.x-l_vJointPoint.x,l_vVect.y-l_vJointPoint.y,l_vVect.z-l_vJointPoint.z); l_vAxis.Normalize();*/ } else { Math::Vect3f l_vMiddle = l_pBone1->GetMiddlePoint(); l_vVect = CalVector(l_vMiddle.x, l_vMiddle.y, l_vMiddle.z); /* l_vAxis(l_vMiddle.x-l_vJointPoint.x,l_vMiddle.y-l_vJointPoint.y,l_vMiddle.z-l_vJointPoint.z); l_vAxis.Normalize();*/ } } else if (l_szDirection == "In") { /* if (!l_pBone1->IsBoneRoot()) { int l_pParentID = l_pBone1->GetParentID(); string l_szNameParent = m_pCalSkeleton->getBone(l_pParentID)->getCoreBone()->getName(); CPhysxBone* l_pPhysParent = GetPhysxBoneByName(l_szNameParent); CalVector l_vVect = l_pPhysParent->GetCalBone()->getTranslationAbsolute(); l_vVect.x = -l_vVect.x; /* l_vAxis = Math::Vect3f(l_vVect.x-l_vJointPoint.x,l_vVect.y-l_vJointPoint.y,l_vVect.z-l_vJointPoint.z); l_vAxis.Normalize(); } */ } Math::Vect3f l_vAxisAux(l_vVect.x, l_vVect.y, l_vVect.z); l_vAxisAux = m_mTransform * l_vAxisAux; l_vAxis = Math::Vect3f(l_vAxisAux.x - l_vJointPoint.x, l_vAxisAux.y - l_vJointPoint.y, l_vAxisAux.z - l_vJointPoint.z); l_vAxis.Normalize(); l_pJointInfo.m_vAnchor = l_vJointPoint; l_pJointInfo.m_vAxis = l_vAxis; if (l_szActor2 == "NULL") { //l_pSphericalJoint->SetInfoComplete(l_vJointPoint,l_vAxis,l_pActor1); l_pSphericalJoint->SetInfoRagdoll(l_pJointInfo, l_pActor1); } else { l_pActor2 = l_pBone2->GetPhysxActor(); //l_pSphericalJoint->SetInfoComplete(l_vJointPoint,l_vAxis,l_pActor1,l_pActor2); l_pSphericalJoint->SetInfoRagdoll(l_pJointInfo, l_pActor1, l_pActor2); } PhysXMInstance->AddPhysicSphericalJoint(l_pSphericalJoint); m_vSphericalJoints.push_back(l_pSphericalJoint); return true; }