idlestate.cpp

来自「奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码」· C++ 代码 · 共 119 行

CPP
119 行
字号
#include "stdafx.h"
#include "IdleState.h"
#include "Field.h"
#include "BattleRecord.h"
#include <Timer.h>
#include "AIParamParser.h"

IdleState::IdleState()
{
	m_pIdleTimer = new util::Timer;
	m_pSearchTimer = new util::Timer;
}

IdleState::~IdleState()
{
	SAFE_DELETE( m_pIdleTimer );
	SAFE_DELETE( m_pSearchTimer );
}

VOID IdleState::Init()
{
}

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

	AIParamInfo& stAIParamInfo = AIParamParser::Instance()->GetInfo();
	if( param1 )
	{
		m_pIdleTimer->SetTimer( (DWORD)param1 );
	}
	else
	{
		m_pIdleTimer->SetTimer( random(stAIParamInfo.m_wIDLE_MIN_TIME, stAIParamInfo.m_wIDLE_MAX_TIME) );
	}

	m_pSearchTimer->SetTimer( stAIParamInfo.m_wSEARCH_PERIOD );

	m_pNPC->SetTargetChar( NULL );
}

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

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

	if( m_pIdleTimer->IsExpired() )
	{
		m_pNPC->ChangeState( STATE_ID_WANDER );
		return;
	}

	if( m_pSearchTimer->IsExpired() )
	{
		Character* pTargetChar = m_pNPC->SearchTarget();
		if( !pTargetChar )		return;

		// 弊缝狼 老盔捞搁 糕滚甸俊霸 利 惯斑 皋技瘤甫 焊辰促.
		if( m_pNPC->IsMemberOfGroup() )
		{
			AI_MSG_ENEMY_FOUND aiMsg;
			aiMsg.dwTargetObjectKey = pTargetChar->GetObjectKey();
			m_pNPC->SendAIMessageToGroupExceptMe( &aiMsg, sizeof(aiMsg) );
		}

		// 鸥百阑 函版窍绊 惑怕甫 傈券茄促.
		m_pNPC->SetTargetChar( pTargetChar );
		m_pNPC->ChangeState( STATE_ID_TRACK );
	}
}

VOID IdleState::OnMsgAttacked( AI_MSG *pMsg )
{
	State::OnMsgAttacked( pMsg );

	AI_MSG_ATTACKED *pAttackMsg = (AI_MSG_ATTACKED*)pMsg;

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

	Character* pAttacker = pField->FindCharacter( pAttackMsg->dwAttackerKey );
	if( !pAttacker )	return;

	// 惑措啊 利焙捞搁 傍拜 惑怕肺 傈捞
	if( !m_pNPC->IsFriend( pAttacker ) )
	{
		m_pNPC->SetTargetChar( pAttacker );
		m_pNPC->ChangeState( STATE_ID_TRACK );
	}
}

VOID IdleState::OnMsgLeaveField( AI_MSG *pMsg )
{
	AI_MSG_LEAVE_FIELD *pLeaveMsg = (AI_MSG_LEAVE_FIELD*)pMsg;

	m_pNPC->RemoveEnemy( pLeaveMsg->dwObjectKey );
}

VOID IdleState::OnMsgLetsGo( AI_MSG *pMsg )
{
	State::OnMsgLetsGo( pMsg );

	m_pNPC->ChangeState( STATE_ID_WANDER );
}

VOID IdleState::OnMsgEnemyFound( AI_MSG *pMsg )
{
	State::OnMsgEnemyFound( pMsg );
}




⌨️ 快捷键说明

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