//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void C_SceneEntity::ResetActorFlexesForScene() { int nActorCount = m_pScene->GetNumActors(); for( int iActor = 0; iActor < nActorCount; ++iActor ) { CChoreoActor *pChoreoActor = m_pScene->GetActor( iActor ); if ( !pChoreoActor ) continue; C_BaseFlex *pFlexActor = FindNamedActor( pChoreoActor ); if ( !pFlexActor ) continue; CStudioHdr *pStudioHdr = pFlexActor->GetModelPtr(); if ( !pStudioHdr ) continue; if ( pStudioHdr->numflexdesc() == 0 ) continue; // Reset the flex weights to their starting position. LocalFlexController_t iController; for ( iController = LocalFlexController_t(0); iController < pStudioHdr->numflexcontrollers(); ++iController ) { pFlexActor->SetFlexWeight( iController, 0.0f ); } // Reset the prediction interpolation values. pFlexActor->m_iv_flexWeight.Reset(); } }
bool SEditModelRender::LoadModel( const char *localPath ) { DestroyModel(); const model_t *mdl = modelinfo->FindOrLoadModel( localPath ); if ( !mdl ) return false; Q_strcpy( m_szModelPath, localPath ); C_BaseFlex *pEnt = new C_BaseFlex(); pEnt->InitializeAsClientEntity( NULL, #ifdef SWARM_DLL false #else RENDER_GROUP_OPAQUE_ENTITY #endif ); MDLCACHE_CRITICAL_SECTION(); pEnt->SetModelPointer( mdl ); pEnt->Spawn(); pEnt->SetAbsAngles( vec3_angle ); pEnt->SetAbsOrigin( vec3_origin ); pEnt->AddEffects( EF_NODRAW | EF_NOINTERP ); pEnt->m_EntClientFlags |= ENTCLIENTFLAG_DONTUSEIK; // leave it alone. pEnt->RemoveFromLeafSystem(); cl_entitylist->RemoveEntity( pEnt->GetRefEHandle() ); pEnt->CollisionProp()->DestroyPartitionHandle(); CStudioHdr *pHdr = pEnt->GetModelPtr(); m_iNumPoseParams = pHdr ? pHdr->GetNumPoseParameters() : 0; pModelInstance = pEnt; return true; }