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

📄 retreatstate.cpp

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