⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 targetlistiterator.cpp

📁 墨香最新私服
💻 CPP
字号:
// TargetListIterator.cpp: implementation of the CTargetListIterator class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TargetListIterator.h"

#include "TargetList.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CTargetListIterator::CTargetListIterator()
{
	m_CurMode = TLMODE_NONE;
}
CTargetListIterator::CTargetListIterator(CTargetList* pTargetList)
{
	Init(pTargetList);
}

CTargetListIterator::~CTargetListIterator()
{
	ASSERT(m_CurMode == TLMODE_NONE);
}

void CTargetListIterator::Init(CTargetList* pTargetList)
{
	m_pTargetList = pTargetList;
	m_PositionOfList = 0;
	m_pCurTargetData = NULL;
	m_DataNum = 0;

	m_CurMode = TLMODE_INITED;
}

void CTargetListIterator::Release()
{
	m_pTargetList->SetBufLen(m_PositionOfList);
	m_CurMode = TLMODE_NONE;
}

void CTargetListIterator::AddTarget(DWORD id,WORD Flag,BYTE kind)
{
	ShiftToNext();
	
	m_pCurTargetData->SetTarget(id,Flag,kind);
	m_DataNum = 0;
}

void CTargetListIterator::AddTargetData(TARGETDATA data)
{
	ASSERT(m_pCurTargetData);
	m_pCurTargetData->SetTargetData(m_DataNum++,data);

	m_PositionOfList += m_pCurTargetData->GetOneDataSize();
}


void CTargetListIterator::AddTargetWithNoData(DWORD id,BYTE kind)
{
	AddTarget(id,0,kind);
}
	
void CTargetListIterator::AddTargetWithResultInfo(DWORD id,BYTE kind,RESULTINFO* pResultInfo)
{
	WORD flag = 0;
	if(pResultInfo->bDispelFromEvil)	flag |= TARGET_FLAG_DISPELFROMEVIL;
	if(pResultInfo->bDodge)	flag |= TARGET_FLAG_DODGE;
	if(pResultInfo->bCritical)	flag |= TARGET_FLAG_CRITICAL;
	if(pResultInfo->RealDamage)	flag |= TARGET_FLAG_LIFEDAMAGE;
	if(pResultInfo->ShieldDamage)	flag |= TARGET_FLAG_SHIELDDAMAGE;
	if(pResultInfo->CounterDamage)	flag |= TARGET_FLAG_COUNTERDAMAGE;
	if(pResultInfo->HealLife)	flag |= TARGET_FLAG_HEALLIFE;
	if(pResultInfo->RechargeNaeryuk)	flag |= TARGET_FLAG_RECHARGE;
	if(pResultInfo->StunTime)	flag |= TARGET_FLAG_STUN;
	if(pResultInfo->Vampiric_Life)	flag |= TARGET_FLAG_VAMPIRIC_LIFE;
	if(pResultInfo->Vampiric_Naeryuk)	flag |= TARGET_FLAG_VAMPIRIC_NR;
	
	AddTarget(id,flag,kind);
	
	if(flag&TARGET_FLAG_LIFEDAMAGE)		AddTargetData(pResultInfo->RealDamage);
	if(flag&TARGET_FLAG_SHIELDDAMAGE)	AddTargetData(pResultInfo->ShieldDamage);
	if(flag&TARGET_FLAG_COUNTERDAMAGE)	AddTargetData(pResultInfo->CounterDamage);
	if(flag&TARGET_FLAG_HEALLIFE)		AddTargetData(pResultInfo->HealLife);
	if(flag&TARGET_FLAG_RECHARGE)		AddTargetData(pResultInfo->RechargeNaeryuk);
	if(flag&TARGET_FLAG_STUN)			AddTargetData(pResultInfo->StunTime);
	if(flag&TARGET_FLAG_VAMPIRIC_LIFE)	AddTargetData(pResultInfo->Vampiric_Life);
	if(flag&TARGET_FLAG_VAMPIRIC_NR)	AddTargetData(pResultInfo->Vampiric_Naeryuk);
}

BOOL CTargetListIterator::GetNextTarget()
{
	if(m_PositionOfList >= m_pTargetList->GetBufLen())
		return FALSE;

	ShiftToNext();
	
	WORD flag = GetTargetFlag();

	if(flag&TARGET_FLAG_LIFEDAMAGE)		m_PositionOfList += m_pCurTargetData->GetOneDataSize();
	if(flag&TARGET_FLAG_SHIELDDAMAGE)	m_PositionOfList += m_pCurTargetData->GetOneDataSize();
	if(flag&TARGET_FLAG_COUNTERDAMAGE)	m_PositionOfList += m_pCurTargetData->GetOneDataSize();
	if(flag&TARGET_FLAG_HEALLIFE)		m_PositionOfList += m_pCurTargetData->GetOneDataSize();
	if(flag&TARGET_FLAG_RECHARGE)		m_PositionOfList += m_pCurTargetData->GetOneDataSize();
	if(flag&TARGET_FLAG_STUN)			m_PositionOfList += m_pCurTargetData->GetOneDataSize();
	if(flag&TARGET_FLAG_VAMPIRIC_LIFE)	m_PositionOfList += m_pCurTargetData->GetOneDataSize();
	if(flag&TARGET_FLAG_VAMPIRIC_NR)	m_PositionOfList += m_pCurTargetData->GetOneDataSize();
	
	m_DataNum = 0;
	return TRUE;
}

DWORD CTargetListIterator::GetTargetID()
{
	ASSERT(m_pCurTargetData);
	return m_pCurTargetData->GetTargetID();	
}

WORD CTargetListIterator::GetTargetFlag()
{
	ASSERT(m_pCurTargetData);
	return m_pCurTargetData->GetTargetFlag();
}

BYTE CTargetListIterator::GetTargetKind()
{
	ASSERT(m_pCurTargetData);
	return m_pCurTargetData->GetTargetKind();
}

void CTargetListIterator::GetTargetData(RESULTINFO* pResultInfo)
{
	pResultInfo->Clear();
	WORD flag = GetTargetFlag();
	if(flag&TARGET_FLAG_DISPELFROMEVIL)	pResultInfo->bDispelFromEvil = TRUE;
	if(flag&TARGET_FLAG_DODGE)			pResultInfo->bDodge = TRUE;
	if(flag&TARGET_FLAG_CRITICAL)		pResultInfo->bCritical = TRUE;
	if(flag&TARGET_FLAG_LIFEDAMAGE)		pResultInfo->RealDamage = m_pCurTargetData->GetTargetData(m_DataNum++);
	if(flag&TARGET_FLAG_SHIELDDAMAGE)	pResultInfo->ShieldDamage = m_pCurTargetData->GetTargetData(m_DataNum++);
	if(flag&TARGET_FLAG_COUNTERDAMAGE)	pResultInfo->CounterDamage = m_pCurTargetData->GetTargetData(m_DataNum++);
	if(flag&TARGET_FLAG_HEALLIFE)		pResultInfo->HealLife = m_pCurTargetData->GetTargetData(m_DataNum++);
	if(flag&TARGET_FLAG_RECHARGE)		pResultInfo->RechargeNaeryuk = m_pCurTargetData->GetTargetData(m_DataNum++);
	if(flag&TARGET_FLAG_STUN)			pResultInfo->StunTime = m_pCurTargetData->GetTargetData(m_DataNum++);
	if(flag&TARGET_FLAG_VAMPIRIC_LIFE)	pResultInfo->Vampiric_Life = m_pCurTargetData->GetTargetData(m_DataNum++);
	if(flag&TARGET_FLAG_VAMPIRIC_NR)	pResultInfo->Vampiric_Naeryuk = m_pCurTargetData->GetTargetData(m_DataNum++);
}

void CTargetListIterator::ShiftToNext()
{
	m_pCurTargetData = m_pTargetList->GetTargetData(m_PositionOfList);
	m_PositionOfList += m_pCurTargetData->GetBaseTargetDataSize();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -