📄 actiontarget.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 + -