77 lines
1.9 KiB
C++
77 lines
1.9 KiB
C++
#include "CEntityCache.hpp"
|
|
|
|
static CEntityCache g_CEntityCache{};
|
|
|
|
void CEntityCache::OnAddEntity( CEntityInstance* pInst , CHandle handle )
|
|
{
|
|
std::scoped_lock Lock( m_Lock );
|
|
|
|
auto pBaseEntity = pInst->pEntityIdentity()->pBaseEntity();
|
|
|
|
if ( pBaseEntity )
|
|
{
|
|
auto it = std::find_if( m_CachedEntity.begin() , m_CachedEntity.end() , [handle]( const CachedEntity_t& i )
|
|
{
|
|
return i.m_Handle == handle;
|
|
} );
|
|
|
|
if ( it == m_CachedEntity.end() )
|
|
{
|
|
CachedEntity_t CachedBoxEntity;
|
|
|
|
CachedBoxEntity.m_Handle = handle;
|
|
CachedBoxEntity.m_Type = GetEntityType( pBaseEntity );
|
|
|
|
if ( CachedBoxEntity.m_Type != CachedEntity_t::UNKNOWN )
|
|
m_CachedEntity.emplace_back( CachedBoxEntity );
|
|
}
|
|
else
|
|
{
|
|
it->m_Handle = handle;
|
|
it->m_Type = GetEntityType( pBaseEntity );
|
|
}
|
|
}
|
|
}
|
|
|
|
void CEntityCache::OnRemoveEntity( CEntityInstance* pInst , CHandle handle )
|
|
{
|
|
std::scoped_lock lock( m_Lock );
|
|
|
|
auto it = std::find_if( m_CachedEntity.begin() , m_CachedEntity.end() , [handle]( const CachedEntity_t& i )
|
|
{
|
|
return i.m_Handle == handle;
|
|
} );
|
|
|
|
if ( it != m_CachedEntity.end() )
|
|
{
|
|
it->m_bDraw = false;
|
|
it->m_Type = CachedEntity_t::UNKNOWN;
|
|
|
|
auto NewEnd = std::remove_if( m_CachedEntity.begin() , m_CachedEntity.end() , []( const CachedEntity_t& i )
|
|
{
|
|
return i.m_Type == CachedEntity_t::UNKNOWN;
|
|
} );
|
|
|
|
m_CachedEntity.erase( NewEnd , m_CachedEntity.end() );
|
|
}
|
|
}
|
|
|
|
auto CEntityCache::GetEntityType( C_BaseEntity* pBaseEntity ) -> CachedEntity_t::Type
|
|
{
|
|
if ( pBaseEntity->IsBasePlayerController() )
|
|
return CachedEntity_t::PLAYER_CONTROLLER;
|
|
else if ( pBaseEntity->IsBasePlayerWeapon() )
|
|
return CachedEntity_t::BASE_WEAPON;
|
|
else if ( pBaseEntity->IsPlantedC4() )
|
|
return CachedEntity_t::PLANTED_C4;
|
|
else if ( pBaseEntity->IsGrenadeProjectile() )
|
|
return CachedEntity_t::GRENADE_PROJECTILE;
|
|
|
|
return CachedEntity_t::UNKNOWN;
|
|
}
|
|
|
|
auto GetEntityCache() -> CEntityCache*
|
|
{
|
|
return &g_CEntityCache;
|
|
}
|