void CCar::CreateSkeleton(CSE_Abstract *po) { if (!Visual()) return; IRenderVisual *pVis = Visual(); IKinematics* pK = smart_cast<IKinematics*>(pVis); IKinematicsAnimated* pKA = smart_cast<IKinematicsAnimated*>(pVis); if(pKA) { pKA->PlayCycle ("idle"); pK->CalculateBones (TRUE); } phys_shell_verify_object_model ( *this ); #pragma todo(" replace below by P_build_Shell or call inherited") m_pPhysicsShell = P_create_Shell(); m_pPhysicsShell->build_FromKinematics(pK,&bone_map); m_pPhysicsShell->set_PhysicsRefObject(this); m_pPhysicsShell->mXFORM.set(XFORM()); m_pPhysicsShell->Activate(true); m_pPhysicsShell->SetAirResistance(0.f,0.f); m_pPhysicsShell->SetPrefereExactIntegration(); ApplySpawnIniToPhysicShell(&po->spawn_ini(),m_pPhysicsShell,false); ApplySpawnIniToPhysicShell(pK->LL_UserData(),m_pPhysicsShell,false); }
void CPhysicObject::CreateSkeleton(CSE_ALifeObjectPhysic* po) { if(m_pPhysicsShell) return; if(!Visual()) return; LPCSTR fixed_bones=*po->fixed_bones; m_pPhysicsShell=P_build_Shell(this,!po->_flags.test(CSE_PHSkeleton::flActive),fixed_bones); ApplySpawnIniToPhysicShell(&po->spawn_ini(),m_pPhysicsShell,fixed_bones[0]!='\0'); ApplySpawnIniToPhysicShell(smart_cast<IKinematics*>(Visual())->LL_UserData(),m_pPhysicsShell,fixed_bones[0]!='\0'); }
void CHangingLamp::CreateBody(CSE_ALifeObjectHangingLamp *lamp) { if (!Visual()) return; if (m_pPhysicsShell) return; CKinematics* pKinematics= smart_cast<CKinematics*> (Visual()); m_pPhysicsShell = P_create_Shell(); bone_map .clear(); LPCSTR fixed_bones=*lamp->fixed_bones; 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") ; bone_map.insert(mk_pair(fixed_bone_id,physicsBone())) ; } }else{ bone_map.insert(mk_pair(pKinematics->LL_GetBoneRoot(),physicsBone())) ; } m_pPhysicsShell->build_FromKinematics(pKinematics,&bone_map); m_pPhysicsShell->set_PhysicsRefObject(this); m_pPhysicsShell->mXFORM.set(XFORM()); m_pPhysicsShell->Activate(true);//, //m_pPhysicsShell->SmoothElementsInertia(0.3f); m_pPhysicsShell->SetAirResistance();//0.0014f,1.5f ///////////////////////////////////////////////////////////////////////////// BONE_P_PAIR_IT i=bone_map.begin(),e=bone_map.end(); for(;i!=e;i++){ CPhysicsElement* fixed_element=i->second.element; ///R_ASSERT2(fixed_element,"fixed bone has no physics"); if(fixed_element)fixed_element->Fix(); } m_pPhysicsShell->mXFORM.set(XFORM()); m_pPhysicsShell->SetAirResistance(0.001f, 0.02f); SAllDDOParams disable_params; disable_params.Load(smart_cast<CKinematics*>(Visual())->LL_UserData()); m_pPhysicsShell->set_DisableParams(disable_params); ApplySpawnIniToPhysicShell(&lamp->spawn_ini(),m_pPhysicsShell,fixed_bones[0]!='\0'); }
BOOL CPhysicsShellHolder::net_Spawn (CSE_Abstract* DC) { CParticlesPlayer::net_SpawnParticles (); st_enable_state=(u8)stNotDefitnite; b_sheduled = true; BOOL ret=inherited::net_Spawn (DC);//load //create_physic_shell (); if(PPhysicsShell()&&PPhysicsShell()->isFullActive()) { PPhysicsShell()->GetGlobalTransformDynamic(&XFORM()); switch (EEnableState(st_enable_state)) { case stEnable : PPhysicsShell()->Enable() ;break; case stDisable : PPhysicsShell()->Disable() ;break; case stNotDefitnite : ;break; } ApplySpawnIniToPhysicShell(pSettings,PPhysicsShell(),false); st_enable_state=(u8)stNotDefitnite; } return ret; }