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

📄 trackareastate.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 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 + -