📄 trackareastate.cpp
字号:
#include "stdafx.h"
#include "TrackAreaState.h"
#include "Field.h"
#include "AIParamParser.h"
TrackAreaState::TrackAreaState()
{
m_bRegenPosSelected = FALSE;
m_pSearchTimer = new util::Timer;
}
TrackAreaState::~TrackAreaState()
{
SAFE_DELETE( m_pSearchTimer );
}
VOID TrackAreaState::Init()
{
}
VOID TrackAreaState::OnEnter( LPARAM param1, LPARAM param2, LPARAM param3 )
{
State::OnEnter( param1, param2, param3 );
// 啊具且 格钎痢阑 茫绰促.
if( !m_pNPC->SearchAreaPos( m_vAreaPos ) )
{
m_bIsSetAreaPos = FALSE;
}
else
{
m_bIsSetAreaPos = TRUE;
if( m_pNPC->MoveAndBroadcast( &m_vAreaPos, CMS_RUN ) )
{
m_bRegenPosSelected = TRUE;
}
else
{
m_bRegenPosSelected = FALSE;
}
}
m_pSearchTimer->SetTimer( AIParamParser::Instance()->GetInfo().m_wSEARCH_PERIOD );
}
VOID TrackAreaState::OnExit()
{
State::OnExit();
}
VOID TrackAreaState::OnUpdate( DWORD dwDeltaTick )
{
__UNUSED(dwDeltaTick);
if( m_pSearchTimer->IsExpired() )
{
// 林函俊 利捞 乐绰瘤 沤祸
Character* pTargetChar = m_pNPC->SearchTarget();
if( pTargetChar )
{
m_pNPC->SetTargetChar( pTargetChar );
m_pNPC->ChangeState( STATE_ID_TRACK );
return;
}
}
if( !m_bIsSetAreaPos )
{
if( m_pNPC->SearchAreaPos( m_vAreaPos ) )
{
m_bIsSetAreaPos = TRUE;
}
else
{
m_pNPC->ChangeState( STATE_ID_IDLE );
return;
}
}
// 捞悼捞 场唱搁 促矫 m_vAreaPos肺 框流牢促.
if( !m_pNPC->IsMoving() )
{
// 格利瘤俊 档崔窍搁 Idle惑怕肺 傈捞
if( m_bRegenPosSelected )
{
m_pNPC->ChangeState( STATE_ID_IDLE );
return;
}
// 格利瘤俊 档崔且 锭鳖瘤 促矫 捞悼
else
{
DoTrackArea();
}
}
}
VOID TrackAreaState::DoTrackArea()
{
WzVector wvCurPos, wvNextPos, wvMovement, wvNormal;
m_pNPC->GetPos( &wvCurPos );
// 捞悼且 芭府甫 备茄促.
AIParamInfo& stAIParamInfo = AIParamParser::Instance()->GetInfo();
float MOVE_DISTANCE = random( stAIParamInfo.m_fMIN_MOVE_DISTANCE*10, stAIParamInfo.m_fMAX_MOVE_DISTANCE*10 ) / 10.f;
float fDistFromRegenPos = VectorLength( &(m_vAreaPos - wvCurPos) );
if( MOVE_DISTANCE >= fDistFromRegenPos )
{
MOVE_DISTANCE = fDistFromRegenPos;
m_bRegenPosSelected = TRUE;
}
// RegenPos甫 氢秦 炼陛究 辨茫扁茄促.
VectorNormalize( &wvNormal, &( m_vAreaPos - wvCurPos ) );
wvMovement = wvNormal * MOVE_DISTANCE;
wvNextPos = wvCurPos + wvMovement;
// 捞悼啊瓷 咯何甫 眉农饶 菩哦阑 朝赴促.
if(!m_pNPC->MoveAndBroadcast( &wvNextPos, CMS_RUN ) )
{
// 捞悼捞 角菩窍搁 流立 m_vAreaPos肺 捞悼秦夯促.
if( !m_pNPC->MoveAndBroadcast( &m_vAreaPos, CMS_RUN ) )
{
// 弊贰档 角菩窍搁 促矫 矫档茄促.
m_pNPC->SearchAreaPos( m_vAreaPos );
return;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -