dAnimIKController* CreateSkeletonRig(DemoEntity* const character) { DemoEntity* const rootEntity = FindRigRoot(character); dAnimIKController* const controller = CreateIKController(); controller->SetUserData(rootEntity); int stack = 0; DemoEntity* entityStack[32]; dAnimIKRigJoint* parentJointStack[32]; for (DemoEntity* node = rootEntity->GetChild(); node; node = node->GetSibling()) { entityStack[stack] = node; parentJointStack[stack] = controller->GetAsIKRigJoint(); stack ++; } while (stack) { stack--; DemoEntity* const entity = entityStack[stack]; dAnimIKRigJoint* const parentJoint = parentJointStack[stack]; dSkeletonRigDefinition* const definitions = FindDefinition(entity); if (definitions) { dAnimIK3dofJoint* const joint = new dAnimIK3dofJoint(parentJoint); joint->SetUserData(entity); for (DemoEntity* node = entity->GetChild(); node; node = node->GetSibling()) { entityStack[stack] = node; parentJointStack[stack] = joint; stack++; } } } return controller; }
void CCharacterPhysicsSupport::SpawnInitPhysics( CSE_Abstract* e ) { if( m_EntityAlife.g_Alive( ) ) { #ifdef DEBUG if( ph_dbg_draw_mask1.test(ph_m1_DbgTrackObject)&&stricmp( PH_DBG_ObjectTrackName( ), *m_EntityAlife.cName( ) )==0 ) { Msg("CCharacterPhysicsSupport::SpawnInitPhysics obj %s before collision correction %f,%f,%f", PH_DBG_ObjectTrackName(), m_EntityAlife.Position().x, m_EntityAlife.Position().y, m_EntityAlife.Position( ).z ); } #endif #ifdef USE_IK if( etStalker == m_eType || etActor == m_eType || (m_EntityAlife.Visual()->dcast_PKinematics()->LL_UserData() && m_EntityAlife.Visual()->dcast_PKinematics()->LL_UserData()->section_exist("ik")) ) CreateIKController( ); #endif VERIFY(pSettings); SpawnCharacterCreate( ); #ifdef DEBUG if( ph_dbg_draw_mask1.test( ph_m1_DbgTrackObject ) && stricmp( PH_DBG_ObjectTrackName( ), *m_EntityAlife.cName()) == 0 ) { Msg( "CCharacterPhysicsSupport::SpawnInitPhysics obj %s after collision correction %f,%f,%f", PH_DBG_ObjectTrackName(),m_EntityAlife.Position( ).x, m_EntityAlife.Position().y, m_EntityAlife.Position().z ); } #endif } else { ActivateShell( NULL ); } }
void CCharacterPhysicsSupport::in_ChangeVisual() { if(!m_physics_skeleton&&!m_pPhysicsShell) return; if(m_pPhysicsShell) { VERIFY(m_eType!=etStalker); if(m_physics_skeleton) { m_EntityAlife.processing_deactivate() ; m_physics_skeleton->Deactivate() ; xr_delete(m_physics_skeleton) ; } CreateSkeleton(m_physics_skeleton); if(m_pPhysicsShell)m_pPhysicsShell->Deactivate(); xr_delete(m_pPhysicsShell); ActivateShell(NULL); } if(m_ik_controller) { DestroyIKController(); CreateIKController(); } }
void CCharacterPhysicsSupport::SpawnInitPhysics(CSE_Abstract* e) { //if(!m_physics_skeleton)CreateSkeleton(m_physics_skeleton); if(m_EntityAlife.g_Alive()) { #ifdef DEBUG if(ph_dbg_draw_mask1.test(ph_m1_DbgTrackObject)&&stricmp(PH_DBG_ObjectTrack(),*m_EntityAlife.cName())==0) { Msg("CCharacterPhysicsSupport::SpawnInitPhysics obj %s before collision correction %f,%f,%f",PH_DBG_ObjectTrack(),m_EntityAlife.Position().x,m_EntityAlife.Position().y,m_EntityAlife.Position().z); } #endif CreateIKController(); CreateCharacter(); #ifdef DEBUG if(ph_dbg_draw_mask1.test(ph_m1_DbgTrackObject)&&stricmp(PH_DBG_ObjectTrack(),*m_EntityAlife.cName())==0) { Msg("CCharacterPhysicsSupport::SpawnInitPhysics obj %s after collision correction %f,%f,%f",PH_DBG_ObjectTrack(),m_EntityAlife.Position().x,m_EntityAlife.Position().y,m_EntityAlife.Position().z); } #endif //m_PhysicMovementControl.SetMaterial( ) } else { ActivateShell(NULL); } }
void CCharacterPhysicsSupport::in_ChangeVisual() { if(m_ik_controller) { DestroyIKController(); CreateIKController(); } xr_delete( m_interactive_animation ); destroy_animation_collision(); destroy( m_interactive_motion ); IKinematicsAnimated* KA = smart_cast<IKinematicsAnimated*>( m_EntityAlife.Visual( ) ); if( KA ) { m_death_anims.setup( KA, m_EntityAlife.cNameSect().c_str() , pSettings ); if( Type( ) != etBitting ) m_hit_animations.SetupHitMotions( *KA ); } if(!m_physics_skeleton&&!m_pPhysicsShell) return; if(m_pPhysicsShell) { VERIFY(m_eType!=etStalker); if(m_physics_skeleton) { m_EntityAlife.processing_deactivate() ; m_physics_skeleton->Deactivate() ; xr_delete(m_physics_skeleton) ; } CreateSkeleton(m_physics_skeleton); if(m_pPhysicsShell)m_pPhysicsShell->Deactivate(); xr_delete(m_pPhysicsShell); ActivateShell(NULL); } }