#include "StdAfx.h" #include "EtWorldEventControl.h" #include "EtWorldEventArea.h" #include using namespace std; #ifdef _DEBUG #define new new(_NORMAL_BLOCK,__FILE__,__LINE__) #endif CEtWorldEventControl::CEtWorldEventControl( CEtWorldSector *pSector ) { m_pSector = pSector; m_nUniqueID = -1; } CEtWorldEventControl::~CEtWorldEventControl() { SAFE_DELETE_PVEC( m_pVecList ); SAFE_DELETE_VEC( m_nMapCreateUniqueIDSearch ); } bool CEtWorldEventControl::Initialize() { return true; } bool CEtWorldEventControl::Load( CStream *pStream ) { int nCount; pStream->Read( &m_nUniqueID, sizeof(int) ); pStream->Read( &nCount, sizeof(int) ); for( int i=0; iLoad( pStream ) == false ) { SAFE_DELETE( pArea ); continue; } m_nMapCreateUniqueIDSearch.insert( make_pair( pArea->GetCreateUniqueID(), pArea ) ); m_pVecList.push_back( pArea ); } return true; } void CEtWorldEventControl::Process( EtVector3 &vPos, bool bIgnoreY ) { m_dwVecCheckList.clear(); CEtWorldEventArea *pArea; for( DWORD i=0; iIsActive() ) continue; if( pArea->CheckArea( vPos, bIgnoreY ) == true ) m_dwVecCheckList.push_back( i ); } } DWORD CEtWorldEventControl::GetAreaCount() { return (DWORD)m_pVecList.size(); } CEtWorldEventArea *CEtWorldEventControl::GetAreaFromIndex( DWORD dwIndex ) { return m_pVecList[dwIndex]; } CEtWorldEventArea *CEtWorldEventControl::GetAreaFromName( const char *szName, int nIndex ) { int nOffset = 0; for( DWORD i=0; iGetName(), szName ) == NULL ) { if( nOffset == nIndex ) return m_pVecList[i]; nOffset++; } } return NULL; } CEtWorldEventArea *CEtWorldEventControl::GetAreaFromCreateUniqueID( int nUniqueID ) { std::map::iterator it = m_nMapCreateUniqueIDSearch.find( nUniqueID ); if( it != m_nMapCreateUniqueIDSearch.end() ) return it->second; return NULL; } int CEtWorldEventControl::FindAreaFromName( const char *szName, std::vector *pVecList ) { int nCount = 0; for( DWORD i=0; iGetName(), szName ) == NULL ) { if( pVecList ) pVecList->push_back( m_pVecList[i] ); nCount++; } } return nCount; } DWORD CEtWorldEventControl::GetCheckAreaCount() { return (DWORD)m_dwVecCheckList.size(); } CEtWorldEventArea *CEtWorldEventControl::GetCheckArea( DWORD dwIndex ) { return m_pVecList[ m_dwVecCheckList[dwIndex] ]; } int CEtWorldEventControl::FindCheckAreaFromSubStr( const char *szStr, std::vector *pVecList ) { CEtWorldEventArea *pArea; int nCount = 0; for( DWORD i=0; iGetName(), szStr ) ) { if( pVecList ) pVecList->push_back( pArea ); nCount++; } } return nCount; } CEtWorldEventArea *CEtWorldEventControl::AllocArea() { return new CEtWorldEventArea( this ); } CEtWorldEventArea *CEtWorldEventControl::InsertArea( EtVector3 &vMin, EtVector3 &vMax, const char *szName ) { CEtWorldEventArea *pArea = AllocArea(); pArea->SetName( szName ); pArea->SetMin( vMin ); pArea->SetMax( vMax ); m_pVecList.push_back( pArea ); m_nMapCreateUniqueIDSearch.insert( make_pair( pArea->GetCreateUniqueID(), pArea ) ); return pArea; } void CEtWorldEventControl::RemoveArea( const char *szName ) { for( DWORD i=0; iGetName() ) == NULL ) { m_nMapCreateUniqueIDSearch.erase( m_pVecList[i]->GetCreateUniqueID() ); SAFE_DELETE( m_pVecList[i] ); m_pVecList.erase( m_pVecList.begin() + i ); } } } void CEtWorldEventControl::RemoveArea( DWORD dwIndex ) { if( dwIndex >= m_pVecList.size() ) return; m_nMapCreateUniqueIDSearch.erase( m_pVecList[dwIndex]->GetCreateUniqueID() ); SAFE_DELETE( m_pVecList[dwIndex] ); m_pVecList.erase( m_pVecList.begin() + dwIndex ); } void CEtWorldEventControl::RemoveAreaFromCreateUniqueID( int nUniqueID ) { for( DWORD i=0; iGetCreateUniqueID() ) { m_nMapCreateUniqueIDSearch.erase( m_pVecList[i]->GetCreateUniqueID() ); SAFE_DELETE( m_pVecList[i] ); m_pVecList.erase( m_pVecList.begin() + i ); } } }