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

📄 actiontarget.cpp

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

#include "stdafx.h"
#include "ActionTarget.h"

#include "ObjectManager.h"
#include "Hero.h"
#include "MoveManager.h"

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

#define IS_PK	(m_TargetFlag & ACTIONTARGET_FLAG_PK)

ObjectArray<LPOBJECT> CActionTarget::m_ObjectArray;

CActionTarget::CActionTarget()
{
	Clear();
}

CActionTarget::~CActionTarget()
{

}

void CActionTarget::InitActionTarget(CObject* pObject,DWORD flag)
{
	m_TargetKind = eActionTargetKind_Object;
	m_TargetID = pObject->GetID();
	m_TargetFlag = flag;
}
void CActionTarget::InitActionTarget(VECTOR3* pPos,DWORD flag)
{
	m_TargetKind = eActionTargetKind_Position;
	m_TargetPosition = *pPos;
	m_TargetFlag = flag;
}

void CActionTarget::Clear()
{
	m_TargetKind = eActionTargetKind_None;
}

void CActionTarget::CopyFrom(CActionTarget* pSrc)
{
	if(pSrc == NULL)
	{
		m_TargetKind = eActionTargetKind_Object;
		m_TargetID = 0;
	}
	else
		memcpy(this,pSrc,sizeof(CActionTarget));
}

VECTOR3* CActionTarget::GetTargetPosition()
{
	switch(m_TargetKind)
	{
	case eActionTargetKind_None:
		ASSERTMSG(0,"GetTargetPosition is Called, When TargetKind is None");
		break;
		
	case eActionTargetKind_Object:
		{
			CObject* pObject = OBJECTMGR->GetObject(m_TargetID);
			if(pObject == NULL)
			{
				return NULL;
			}
			pObject->GetPosition(&m_TargetPosition);
			return &m_TargetPosition;
		}

	case eActionTargetKind_Position:		
		return &m_TargetPosition;
	}
	return NULL;
}

void CActionTarget::SetTargetObjectsInArea(CHero* pHero,CSkillArea* pSkillArea)
{
	// Hero 牢磊肺 罐绰 巴篮 巩颇 沥焊扼电啊 扁鸥 殿殿 利苞狼 备喊阑 困秦辑 捞促.
	// 吝缴 谅钎绰 捞固 悸泼 登绢廉 乐促.
	OBJECTMGR->GetTargetInArea(pHero,pSkillArea,&m_ObjectArray,IS_PK);
}
void CActionTarget::SetTargetObjectsInRange(VECTOR3* pCenterPos,float Radius)
{
	OBJECTMGR->GetTargetInRange(pCenterPos,Radius,&m_ObjectArray,IS_PK);
}
void CActionTarget::SetPositionFirstTargetObject()
{
	m_ObjectArray.SetPositionHead();
}
CObject* CActionTarget::GetNextTargetObject()
{
	return m_ObjectArray.GetNextObject();
}

float CActionTarget::GetRadius()
{
	switch(m_TargetKind)
	{
	case eActionTargetKind_None:
		ASSERTMSG(0,"GetTargetPosition is Called, When TargetKind is None");
		break;
		
	case eActionTargetKind_Object:
		{
			CObject* pObject = OBJECTMGR->GetObject(m_TargetID);
			if(pObject == NULL)
				return 0;
			return pObject->GetRadius();			
		}

	case eActionTargetKind_Position:		
		return 0;
	}
	return 0;
}

DWORD CActionTarget::GetTargetID()
{
	switch(m_TargetKind)
	{
	case eActionTargetKind_None:
		//ASSERTMSG(0,"GetTargetID is Called, When TargetKind is None");
		break;
		
	case eActionTargetKind_Object:
		{
			CObject* pObject = OBJECTMGR->GetObject(m_TargetID);
			if(pObject == NULL)
				return 0;
			return pObject->GetID();			
		}

	case eActionTargetKind_Position:		
		return 0;
	}
	return 0;	
}


void CActionTarget::GetMainTarget(MAINTARGET* pRtMainTarget)
{
	switch(m_TargetKind)
	{
	case eActionTargetKind_None:
		ASSERTMSG(0,"GetTargetID is Called, When TargetKind is None");
		break;
		
	case eActionTargetKind_Object:
		{
			pRtMainTarget->MainTargetKind = MAINTARGET::MAINTARGETKIND_OBJECTID;

			CObject* pObject = OBJECTMGR->GetObject(m_TargetID);
			if(pObject == NULL)
			{
				pRtMainTarget->dwMainTargetID = 0;
				return;
			}			
			pRtMainTarget->dwMainTargetID = pObject->GetID();
		}
		break;

	case eActionTargetKind_Position:
		{
			pRtMainTarget->MainTargetKind = MAINTARGET::MAINTARGETKIND_POS;
			pRtMainTarget->cpTargetPos.Compress(GetTargetPosition());
		}
		break;
	}	
}

void CActionTarget::GetTargetArray(CTargetList* pTList)
{
	CObject* pObject;
	pTList->Clear();
	CTargetListIterator iter(pTList);

	SetPositionFirstTargetObject();
	while(pObject = GetNextTargetObject())
	{
		iter.AddTargetWithNoData(pObject->GetID(),SKILLRESULTKIND_NONE);
	}
	iter.Release();
}

void CActionTarget::SetOneTarget(CObject* pObject)
{
	m_ObjectArray.Init();
	if(pObject == NULL)
	{
		CObject* pTempObj = OBJECTMGR->GetObject(GetTargetID());
//		ASSERT(pTempObj)
		if(pTempObj)
			m_ObjectArray.AddObject(pTempObj);
	}
	else
		m_ObjectArray.AddObject(pObject);
}

void CActionTarget::ConvertMainTargetToPosition(CObject* pAttacker,float AttackDist)
{
	VECTOR3 pos = *GetTargetPosition();
	VECTOR3 apos;
	pAttacker->GetPosition(&apos);
	float dist = CalcDistanceXZ(&pos,&apos);
	if(dist > AttackDist)
	{
		float gap = dist - AttackDist + 50.f;	// 50篮 弊成 坷瞒啊 乐阑瘤 葛福聪 霖巴
		VECTOR3 dir = apos - pos;
		Normalize(&dir,&dir);
		dir = dir * gap;
		pos = pos + dir;
	}
	InitActionTarget(&pos,m_TargetFlag);
}

⌨️ 快捷键说明

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