Files
2026-06-01 12:46:52 +02:00

124 lines
2.9 KiB
C++

#include "stdafx.h"
#include "SGameAvatarAddOnMgr.h"
#include "SGameForceSphereFX.h"
#include "SDebug_Util.h"
SGameAvatarAddOnMgr::SGameAvatarAddOnMgr() : m_pGameObj( NULL ),
m_pSeqModel( NULL ),
m_nAddOnType( 0 ),
m_hCreaturehandle( 0 ),
m_bRenderFlag( true )
{
memset( m_pAddOnList, 0, sizeof( m_pAddOnList ) );
}
SGameAvatarAddOnMgr::~SGameAvatarAddOnMgr()
{
std::vector< SGameAvatarAddOnMgr* >::iterator iter = m_vAddOnMgr.begin();
for( ; iter != m_vAddOnMgr.end() ; )
{
SAFE_DELETE( (*iter) );
iter = m_vAddOnMgr.erase( iter );
}
memset( m_pAddOnList, 0, sizeof( m_pAddOnList ) );
m_pGameObj = NULL;
SAFE_DELETE( m_pSeqModel );
}
void SGameAvatarAddOnMgr::SetGameObject( SGameAvatarEx* pGameObj )
{
m_pGameObj = pGameObj;
}
void SGameAvatarAddOnMgr::SetCreatureHandle( ADD_ON_TYPE nAddOnType, AR_HANDLE handle )
{
if( SGAME_ADDON_MAX > nAddOnType )
{
if( m_pAddOnList[nAddOnType] )
{
m_pAddOnList[nAddOnType]->m_hCreaturehandle = handle;
}
}
}
void SGameAvatarAddOnMgr::AddAddOn( SGameAvatarAddOnMgr* pAddOn )
{
if( pAddOn && pAddOn->GetAddOnType() < SGAME_ADDON_MAX )
{
pAddOn->SetGameObject( m_pGameObj );
pAddOn->Initialize();
m_vAddOnMgr.push_back( pAddOn );
m_pAddOnList[pAddOn->GetAddOnType()] = pAddOn;
}
else
assert( false && "SGameAvatarAddOnMgr::AddAddOn" );
}
void SGameAvatarAddOnMgr::RemoveAddOn( ADD_ON_TYPE nAddOnType )
{
std::vector< SGameAvatarAddOnMgr* >::iterator iter = m_vAddOnMgr.begin();
for( ; iter != m_vAddOnMgr.end() ; )
{
if( (*iter)->GetAddOnType() == nAddOnType )
{
m_pAddOnList[nAddOnType] = NULL;
SAFE_DELETE( (*iter) );
iter = m_vAddOnMgr.erase( iter );
break;
}
else
++iter;
}
}
void SGameAvatarAddOnMgr::SetAddOnRenderFlag( ADD_ON_TYPE nAddOnType, bool bRenderFlag )
{
if( nAddOnType < SGAME_ADDON_MAX )
{
if( m_pAddOnList[nAddOnType] )
m_pAddOnList[nAddOnType]->SetRenderFlag( bRenderFlag );
}
else
assert( false && "SGameAvatarAddOnMgr::AddAddOn" );
}
bool SGameAvatarAddOnMgr::IsActivateAddOn( ADD_ON_TYPE nAddOnType )
{
if( nAddOnType < SGAME_ADDON_MAX )
return m_pAddOnList[nAddOnType] != NULL ? true : false;
assert( false && "SGameAvatarAddOnMgr::AddAddOn" );
return false;
}
SGameAvatarAddOnMgr* SGameAvatarAddOnMgr::GetAddOn( ADD_ON_TYPE nAddOnType )
{
if( nAddOnType < SGAME_ADDON_MAX )
return m_pAddOnList[nAddOnType];
return NULL;
}
void SGameAvatarAddOnMgr::Process( DWORD dwTime )
{
std::vector< SGameAvatarAddOnMgr* >::iterator iter = m_vAddOnMgr.begin();
for( ; iter != m_vAddOnMgr.end(); ++iter )
{
(*iter)->Process( dwTime );
}
}
void SGameAvatarAddOnMgr::Render( class KViewportObject** ppViewportList, int nViewportCount )
{
std::vector< SGameAvatarAddOnMgr* >::iterator iter = m_vAddOnMgr.begin();
for( ; iter != m_vAddOnMgr.end(); ++iter )
{
(*iter)->Render( ppViewportList, nViewportCount );
}
}