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

📄 runawaystate.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "stdafx.h"
#include "RunAwayState.h"
#include "Field.h"
#include <Timer.h>
#include <Define.h>
#include <SinTable.h>
#include "Player.h"
#include "AIParamParser.h"

RunAwayState::RunAwayState()
{
	m_pRunAwayTimer = new util::Timer;
}

RunAwayState::~RunAwayState()
{
	SAFE_DELETE( m_pRunAwayTimer );
}

VOID RunAwayState::Init()
{
	__asm nop;
}

VOID RunAwayState::OnEnter( LPARAM param1, LPARAM param2, LPARAM param3 )
{
	State::OnEnter( param1, param2, param3 );

	m_pNPC->GetPos( &m_vTargetPos );
	m_bTouchedSomething = FALSE;

	// 档噶啊具且 利阑 茫酒辑 鸥百苞 困摹甫 悸泼茄促.
	Player *pTarget = PlayerManager::Instance()->FindPlayerForObjectKey( param1 );
	if( pTarget )
	{
		m_pNPC->SetTargetChar( (Character*)pTarget );
		pTarget->GetPos( & m_vTargetPos );
	}

	// 档噶啊具且 矫埃阑 悸泼茄促.
	AIParamInfo& stAIParamInfo = AIParamParser::Instance()->GetInfo();
	if( param1 )
	{
		m_pRunAwayTimer->SetTimer( param2 );
	}
	else
	{
		m_pRunAwayTimer->SetTimer( stAIParamInfo.m_wRUNAWAY_TIME );
	}
}

VOID RunAwayState::OnExit()
{
	State::OnExit();
}

VOID RunAwayState::OnUpdate( DWORD dwDeltaTick )
{
	__UNUSED( dwDeltaTick );

	if( !m_pNPC->IsMoving() )
	{
		RunAway();
	}

	if( m_pRunAwayTimer->IsExpired() )
	{
		if( m_pNPC->GetTargetChar() )
		{
			m_pNPC->ChangeState( STATE_ID_HELP );
		}
		else
		{
			m_pNPC->SetTargetChar( NULL );
			m_pNPC->ChangeState( STATE_ID_IDLE );
		}
	}
}

VOID RunAwayState::RunAway()
{
	// 捞悼且 芭府甫 备茄促.
	AIParamInfo& stAIParamInfo = AIParamParser::Instance()->GetInfo();
	float MOVE_DISTANCE = random( stAIParamInfo.m_fMIN_MOVE_DISTANCE*10, stAIParamInfo.m_fMAX_MOVE_DISTANCE*10 ) / 10.f;

	WzVector wvCurPos, wvDestPos, wvMovement;

	m_pNPC->GetPos( &wvCurPos );

	Field *pField = m_pNPC->GetField();
	if( !pField ) return;

	// 捞傈 辨茫扁俊辑 公攫啊俊 搓篮 版快 60档 雀傈矫虐绊, 弊犯瘤 臼促搁 罚待茄 规氢栏肺 器牢泼
	if( m_bTouchedSomething )
	{
		m_bTouchedSomething = FALSE;
		wvMovement = m_wvRotatedVector;		
	}
	else
	{
		VectorNormalize( &wvMovement, &( wvCurPos - m_vTargetPos ) );
		wvMovement.x *= MOVE_DISTANCE;
		wvMovement.y *= MOVE_DISTANCE;
	}
	wvMovement.z = 2.f;

	wvDestPos = wvCurPos + wvMovement;

	if( !pField->FindPath( m_pNPC, &wvDestPos ) )
	{
		// 厘局拱俊 搓疽促绰 钎矫甫 窍绊 瘤陛 啊妨绰 规氢俊辑 60档 雀傈矫挪 氦磐甫 备秦敌促.
		m_bTouchedSomething	= TRUE;
		WzVector wvDistanceWantToMove;
		wvDistanceWantToMove = wvDestPos - wvCurPos;
		m_wvRotatedVector.x	=  wvDistanceWantToMove.x * FCOS(stAIParamInfo.m_wSEARCH_ROTATE_ANGLE) + wvDistanceWantToMove.y * FSIN(stAIParamInfo.m_wSEARCH_ROTATE_ANGLE);
		m_wvRotatedVector.y	=  -wvDistanceWantToMove.x * FSIN(stAIParamInfo.m_wSEARCH_ROTATE_ANGLE) + wvDistanceWantToMove.y * FCOS(stAIParamInfo.m_wSEARCH_ROTATE_ANGLE);			
		m_wvRotatedVector.z = 0.0f;

		return;
	}

	m_pNPC->SetMoveState( CMS_RUN );

	// 菩哦 焊郴扁
	MSG_CG_SYNC_MOVE_THRUST_BRD sendMsg;
	sendMsg.m_byCategory			= CG_SYNC;
	sendMsg.m_byProtocol			= CG_SYNC_MOVE_THRUST_BRD;
	sendMsg.m_dwObjectKey			= m_pNPC->GetObjectKey();
	sendMsg.m_byState				= CMS_RUN;
	sendMsg.wTileIndex				= m_pNPC->GetPathExplorer()->GetTile();
	sendMsg.wvCurPos				= wvCurPos;
	sendMsg.wvDestPos				= wvDestPos;
	m_pNPC->SendPacketAround( &sendMsg, sizeof(sendMsg) );
}


// 饭明绊 公矫
VOID RunAwayState::OnMsgLetsGo( AI_MSG *pMsg )
{
}

// 利 惯斑 公矫
VOID RunAwayState::OnMsgEnemyFound( AI_MSG *pMsg )
{
}

// 档噶惑怕啊 场唱搁 Follow(Idle)惑怕肺 汗蓖茄促.
VOID RunAwayState::OnMsgCommandFollow( AI_MSG *pMsg )
{
	m_pNPC->SetTargetChar( NULL );
}



















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -