void CLocalNetworkBackdoor::EntityDormant( int iEnt, int iSerialNum ) { CCachedEntState *pCached = &m_CachedEntState[iEnt]; IClientNetworkable *pNet = pCached->m_pNetworkable; Assert( pNet == entitylist->GetClientNetworkable( iEnt ) ); if ( pNet ) { Assert( pCached->m_iSerialNumber == pNet->GetIClientUnknown()->GetRefEHandle().GetSerialNumber() ); if ( pCached->m_iSerialNumber == iSerialNum ) { m_EntsAlive.Set( iEnt ); // Tell the game code that this guy is now dormant. Assert( pCached->m_bDormant == pNet->IsDormant() ); if ( !pCached->m_bDormant ) { pNet->NotifyShouldTransmit( SHOULDTRANSMIT_END ); pCached->m_bDormant = true; } } else { pNet->Release(); pCached->m_pNetworkable = NULL; m_PrevEntsAlive.Clear( iEnt ); } } }
//----------------------------------------------------------------------------- // Purpose: Clears all entity lists and releases entities //----------------------------------------------------------------------------- void CClientEntityList::Release( void ) { // Free all the entities. ClientEntityHandle_t iter = FirstHandle(); ClientEntityHandle_t next; while( iter != InvalidHandle() ) { next = NextHandle( iter ); // Try to call release on anything we can. IClientNetworkable *pNet = GetClientNetworkableFromHandle( iter ); if ( pNet ) { pNet->Release(); } else { // Try to call release on anything we can. IClientThinkable *pThinkable = GetClientThinkableFromHandle( iter ); if ( pThinkable ) { pThinkable->Release(); } } RemoveEntity( iter ); iter = next; } m_iNumServerEnts = 0; m_iMaxServerEnts = 0; m_iMaxUsedServerIndex = -1; }