82 lines
1.9 KiB
C++
82 lines
1.9 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);
|
|
m_pInstance->SetPosition({0,0,0});
|
|
m_pInstance->SetRotation({0,0,0,1});
|
|
|
|
}
|
|
|
|
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)
|