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