C_NPC_Surface::C_NPC_Surface() { m_pMaterial = NULL; m_vecSurfacePos.EnsureCount( MAX_SURFACE_ELEMENTS ); m_iv_vecSurfacePos.EnsureCount( MAX_SURFACE_ELEMENTS ); m_flSurfaceV.EnsureCount( MAX_SURFACE_ELEMENTS ); m_iv_flSurfaceV.EnsureCount( MAX_SURFACE_ELEMENTS ); m_flSurfaceR.EnsureCount( MAX_SURFACE_ELEMENTS ); m_iv_flSurfaceR.EnsureCount( MAX_SURFACE_ELEMENTS ); for (int i = 0; i < MAX_SURFACE_ELEMENTS; i++) { IInterpolatedVar *pWatcher = &m_iv_vecSurfacePos.Element( i ); pWatcher->SetDebugName( "m_iv_vecSurfacePos" ); AddVar( &m_vecSurfacePos.Element( i ), pWatcher, LATCH_ANIMATION_VAR ); pWatcher = &m_iv_flSurfaceV.Element( i ); pWatcher->SetDebugName( "m_iv_flSurfaceV" ); AddVar( &m_flSurfaceV.Element( i ), pWatcher, LATCH_ANIMATION_VAR ); pWatcher = &m_iv_flSurfaceR.Element( i ); pWatcher->SetDebugName( "m_iv_flSurfaceR" ); AddVar( &m_flSurfaceR.Element( i ), pWatcher, LATCH_ANIMATION_VAR ); } }
void ResizeAnimationLayerCallback( void *pStruct, int offsetToUtlVector, int len ) { C_BaseAnimatingOverlay *pEnt = (C_BaseAnimatingOverlay*)pStruct; CUtlVector < CAnimationLayer > *pVec = &pEnt->m_AnimOverlay; CUtlVector< CInterpolatedVar< CAnimationLayer > > *pVecIV = &pEnt->m_iv_AnimOverlay; Assert( (char*)pVec - (char*)pEnt == offsetToUtlVector ); Assert( pVec->Count() == pVecIV->Count() ); Assert( pVec->Count() <= C_BaseAnimatingOverlay::MAX_OVERLAYS ); int diff = len - pVec->Count(); if ( diff != 0 ) { // remove all entries for ( int i=0; i < pVec->Count(); i++ ) { pEnt->RemoveVar( &pVec->Element( i ) ); } pEnt->InvalidatePhysicsRecursive( BOUNDS_CHANGED ); // adjust vector sizes if ( diff > 0 ) { for ( int i = 0; i < diff; ++i ) { int j = pVec->AddToTail( ); (*pVec)[j].SetOwner( pEnt ); } pVecIV->AddMultipleToTail( diff ); } else { pVec->RemoveMultiple( len, -diff ); pVecIV->RemoveMultiple( len, -diff ); } // Rebind all the variables in the ent's list. for ( int i=0; i < len; i++ ) { IInterpolatedVar *pWatcher = &pVecIV->Element( i ); pWatcher->SetDebugName( s_m_iv_AnimOverlayNames[i] ); pEnt->AddVar( &pVec->Element( i ), pWatcher, LATCH_ANIMATION_VAR, true ); } } // FIXME: need to set historical values of nOrder in pVecIV to MAX_OVERLAY // Ensure capacity pVec->EnsureCapacity( len ); int nNumAllocated = pVec->NumAllocated(); // This is important to do because EnsureCapacity doesn't actually call the constructors // on the elements, but we need them to be initialized, otherwise it'll have out-of-range // values which will piss off the datatable encoder. UtlVector_InitializeAllocatedElements( pVec->Base() + pVec->Count(), nNumAllocated - pVec->Count() ); }
void ResizeAnimationLayerCallback( void *pStruct, int offsetToUtlVector, int len ) { C_BaseAnimatingOverlay *pEnt = (C_BaseAnimatingOverlay*)pStruct; CUtlVector < C_AnimationLayer > *pVec = &pEnt->m_AnimOverlay; CUtlVector< CInterpolatedVar< C_AnimationLayer > > *pVecIV = &pEnt->m_iv_AnimOverlay; Assert( (char*)pVec - (char*)pEnt == offsetToUtlVector ); Assert( pVec->Count() == pVecIV->Count() ); Assert( pVec->Count() <= C_BaseAnimatingOverlay::MAX_OVERLAYS ); int diff = len - pVec->Count(); if ( diff == 0 ) return; // remove all entries for ( int i=0; i < pVec->Count(); i++ ) { pEnt->RemoveVar( &pVec->Element( i ) ); } // adjust vector sizes if ( diff > 0 ) { pVec->AddMultipleToTail( diff ); pVecIV->AddMultipleToTail( diff ); } else { pVec->RemoveMultiple( len, -diff ); pVecIV->RemoveMultiple( len, -diff ); } // Rebind all the variables in the ent's list. for ( int i=0; i < len; i++ ) { IInterpolatedVar *pWatcher = &pVecIV->Element( i ); pWatcher->SetDebugName( s_m_iv_AnimOverlayNames[i] ); pEnt->AddVar( &pVec->Element( i ), pWatcher, LATCH_ANIMATION_VAR, true ); } // FIXME: need to set historical values of nOrder in pVecIV to MAX_OVERLAY }