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

119 lines
2.0 KiB
C++

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