Files
funnygame/game/client/basemodelentity.cpp
2026-03-16 15:35:31 +02:00

80 lines
1.8 KiB
C++

#include "basemodelentity.h"
void C_BaseModelEntity::Precache()
{
}
void C_BaseModelEntity::Spawn()
{
BaseClass::Spawn();
SetThink(Think);
}
void C_BaseModelEntity::Think( float fDelta )
{
UpdateModel();
if (m_pInstance)
{
m_pInstance->SetPosition(GetAbsOrigin());
m_pInstance->SetRotation(GetAbsAngles());
m_pInstance->SetScale({GetScale(),GetScale(),GetScale()});
}
}
void C_BaseModelEntity::SetModel( const char *szName )
{
V_memset(m_szModel, 0, 256);
V_strncpy(m_szModel, szName, 255);
}
void C_BaseModelEntity::UpdateModel()
{
if (!V_strncmp(m_szModel, m_szCurrentModel, 256))
return;
V_memset(m_szCurrentModel, 0, 256);
V_strncpy(m_szCurrentModel, m_szModel, 255);
if (m_hModelHandle)
{
g_pAssetManager->UnrefModel(m_hModelHandle);
g_pWorldRenderer->DestroyMeshInstance(
g_pAssetManager->GetMeshByIndex(m_pModel->m_hMesh)->m_pMesh,
m_pInstance);
}
m_hModelHandle = g_pAssetManager->LoadModel(m_szCurrentModel);
m_pModel = g_pAssetManager->GetModelByIndex(m_hModelHandle);
if (!m_pModel)
{
V_printf("Failed to load %u %s\n", V_strnlen(m_szCurrentModel,255), m_szCurrentModel);
m_pInstance = NULL;
return;
}
FunnyMesh_t *pMesh = g_pAssetManager->GetMeshByIndex(m_pModel->m_hMesh);
m_pInstance = g_pWorldRenderer->CreateInstance(pMesh->m_pMesh);
}
C_BaseModelEntity::~C_BaseModelEntity()
{
if (m_pInstance)
{
FunnyMesh_t *pMesh = g_pAssetManager->GetMeshByIndex(m_pModel->m_hMesh);
g_pWorldRenderer->DestroyMeshInstance(pMesh->m_pMesh, m_pInstance);
g_pAssetManager->UnrefModel(m_hModelHandle);
}
}
BEGIN_DATADESC(C_BaseModelEntity)
DEFINE_KEYFIELD(m_szModel, FIELD_STRING, "model")
END_DATADESC()
IMPLEMENT_RECV_DT(C_BaseModelEntity)
NetPropString(m_szModel)
END_RECV_DT()
IMPLEMENT_EMPTY_SEND_DT(C_BaseModelEntity)
LINK_ENTITY_TO_CLASS(prop_physics, C_BaseModelEntity)