#include "stdafx.h" #include "STargetMgr.h" #include "SGameAvatarEx.h" #include "SDebug_Util.h" SGameTargetMgr::SGameTargetMgr(SGame * pGame) { m_pGame = pGame; SetTarget(NULL); } SGameTargetMgr::~SGameTargetMgr() { } void SGameTargetMgr::SetTarget( SGameAvatarEx* pTarget ) { m_pTarget = pTarget; if( m_pTarget ) { m_TargetID = m_pTarget->GetArID(); } else { m_TargetID = 0; } } bool SGameTargetMgr::IsTarget( AR_HANDLE leaveID ) { return ( m_TargetID == leaveID ) ? true : false; } BOOL SGameTargetMgr::CheckTarget( AR_HANDLE leaveID ) { if( m_TargetID == leaveID ) { SetTarget( NULL ); return TRUE; } return FALSE; } ////////////////////////////////////////////////////////////////////////// // STargetMgr::STargetMgr() { ClearTargetList(); } STargetMgr::~STargetMgr() { ClearTargetList(); } //다음 타겟 달라 SGameAvatarEx * STargetMgr::GetNextTarget() { if( m_MobList.empty() ) return NULL; else { SGameAvatarEx * pTarget = m_MobList[0]; m_MobList.erase( m_MobList.begin() ); //하나씩 계속 제거. return pTarget; } } void STargetMgr::ClearTargetList() { m_MobList.clear(); } void STargetMgr::AddTarget( SGameAvatarEx * pTarget ) { m_MobList.push_back( pTarget ); } void STargetMgr::LeaveTarget( AR_HANDLE handle ) { if( m_MobList.empty() ) return; for( unsigned int i(0); m_MobList.size()>i; i++ ) { if( m_MobList[i]->GetArID() == handle ) { m_MobList.erase( m_MobList.begin()+i ); return; } } } namespace { struct TargetCompareFN { static K3DVector vLocalPlayerPos; bool operator() ( SGameAvatarEx *pr1, SGameAvatarEx *pr2 ) { return ( vLocalPlayerPos - *pr1->GetPosition() ).SquareMagnitude() < ( vLocalPlayerPos - *pr2->GetPosition() ).SquareMagnitude(); } }; K3DVector TargetCompareFN::vLocalPlayerPos; } void STargetMgr::SortTarget( K3DVector* pLocalPlayerPos ) { TargetCompareFN::vLocalPlayerPos = *pLocalPlayerPos; std::sort( m_MobList.begin(), m_MobList.end(), TargetCompareFN() ); }