CPhysicsShell* P_build_Shell (CGameObject* obj,bool not_active_state,U16Vec& fixed_bones) { bone_map.clear (); CPhysicsShell* pPhysicsShell; if(!fixed_bones.empty()) for (U16It it=fixed_bones.begin(); it!=fixed_bones.end(); it++) bone_map.insert(mk_pair(*it,physicsBone())); pPhysicsShell=P_build_Shell(obj,not_active_state,&bone_map); // fix bones BONE_P_PAIR_IT i=bone_map.begin(),e=bone_map.end(); if(i!=e) pPhysicsShell->SetPrefereExactIntegration(); for(;i!=e;i++){ CPhysicsElement* fixed_element=i->second.element; //R_ASSERT2(fixed_element,"fixed bone has no physics"); if(!fixed_element) continue; fixed_element->Fix(); } return pPhysicsShell; }
CPhysicsShell* P_build_Shell (CGameObject* obj,bool not_active_state,BONE_P_MAP* p_bone_map,LPCSTR fixed_bones) { CPhysicsShell* pPhysicsShell; CKinematics* pKinematics=smart_cast<CKinematics*>(obj->Visual()); if(fixed_bones) { int count = _GetItemCount(fixed_bones); for (int i=0 ;i<count; ++i) { string64 fixed_bone ; _GetItem (fixed_bones,i,fixed_bone) ; u16 fixed_bone_id=pKinematics->LL_BoneID(fixed_bone) ; R_ASSERT2(BI_NONE!=fixed_bone_id,"wrong fixed bone") ; p_bone_map->insert(mk_pair(fixed_bone_id,physicsBone())) ; } pPhysicsShell=P_build_Shell(obj,not_active_state,p_bone_map); //m_pPhysicsShell->add_Joint(P_create_Joint(CPhysicsJoint::enumType::full_control,0,fixed_element)); } else pPhysicsShell=P_build_Shell(obj,not_active_state); BONE_P_PAIR_IT i=p_bone_map->begin(),e=p_bone_map->end(); if(i!=e) pPhysicsShell->SetPrefereExactIntegration(); for(;i!=e;i++) { CPhysicsElement* fixed_element=i->second.element; R_ASSERT2(fixed_element,"fixed bone has no physics"); //if(!fixed_element) continue; fixed_element->Fix(); } return pPhysicsShell; }