📄 retreatstate.cpp
字号:
#include "stdafx.h"
#include <Timer.h>
#include "RetreatState.h"
#include "Field.h"
#include <PacketStruct_CG.h>
#include <SinTable.h>
#include <3DEngine/3DTerrain/PathExplorer.h>
#include <math.h>
#include "AIParamParser.h"
#include "PublicMath.h"
RetreatState::RetreatState()
{
m_bFindDestPos = FALSE;
m_bTrialCount = 0;
}
RetreatState::~RetreatState()
{
}
VOID RetreatState::Init()
{
}
VOID RetreatState::OnEnter( LPARAM param1, LPARAM param2, LPARAM param3 )
{
m_bFindDestPos = FALSE;
m_bTrialCount = 0;
State::OnEnter( param1, param2, param3 );
}
VOID RetreatState::OnExit()
{
State::OnExit();
}
VOID RetreatState::OnUpdate( DWORD dwDeltaTick )
{
__UNUSED(dwDeltaTick);
// 格利瘤甫 茫疽栏搁
if( m_bFindDestPos )
{
// 捞悼捞 场朝 锭鳖瘤 扁促赴促.
if( !m_pNPC->IsMoving() )
{
if( m_pNPC->GetTargetChar() )
{
m_pNPC->ChangeState( STATE_ID_ATTACK );
}
else
{
m_pNPC->ChangeState( STATE_ID_IDLE );
}
}
}
// 给 茫疽栏搁 促矫 矫档茄促.
else
{
Retreat();
}
}
VOID RetreatState::Retreat()
{
// 鸥百捞 绝栏搁 Idle惑怕肺 倒酒埃促.
Character* pTargetChar = m_pNPC->GetTargetChar();
if( !pTargetChar )
{
SUNLOG( eFULL_LOG, "[Retreat] m_pTargetChar is NULL!" );
m_pNPC->ChangeState( STATE_ID_IDLE );
return;
}
m_bTrialCount++;
AIParamInfo& stAIParamInfo = AIParamParser::Instance()->GetInfo();
WzVector vCurPos, vTargetPos, vNormal, vTrackPos;
m_pNPC->GetPos( &vCurPos ); pTargetChar->GetPos( &vTargetPos );
VectorNormalize( &vNormal, &( vCurPos-vTargetPos ) );
// 捞悼 芭府甫 备茄促.
float fMinAttackDist = m_pNPC->GetAttackRange() * stAIParamInfo.m_fRETREAT_MIN_DISTANCE_LIMIT_RATIO;
float fDistance = random( fMinAttackDist*10.f, m_pNPC->GetAttackRange()*10.f ) / 10.f;
// 捞悼秦具且 规氢狼 30*m_bTrialCount档 救婆栏肺 罚待茄 困摹甫 掘绢柯促.
int iHalfAngle = min( 180, 30*m_bTrialCount );
int iRotateAngle = random( 0, iHalfAngle*2 );
if( iRotateAngle > iHalfAngle ) iRotateAngle = 360 + iHalfAngle - iRotateAngle;
Math_ZRotateVector( &vNormal, vTrackPos, iRotateAngle );
vTrackPos = vTargetPos + vTrackPos * fDistance;
if( m_pNPC->MoveAndBroadcast( &vTrackPos, CMS_RUN ) )
{
m_bFindDestPos = TRUE;
}
}
// 饭明绊 公矫
VOID RetreatState::OnMsgLetsGo( AI_MSG *pMsg )
{
}
// 利 惯斑 公矫
VOID RetreatState::OnMsgEnemyFound( AI_MSG *pMsg )
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -