Files
marohook/Andromeda-CS2-Base/Andromeda-CS2-Base/GameClient/CEntityCache/CEntityCache.cpp
T
2025-10-20 14:00:35 +03:00

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;
}