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

📄 npcstatemanager.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "stdafx.h"
#include "NPCStateManager.h"
#include "NPC.h"
#include "State.h"
#include "NPCStateFactory.h"


NPCStateManager::NPCStateManager( NPC *pOwner )
{
	m_pNPC = pOwner;

	m_pStateFactory = new NPCStateFactory;
}

NPCStateManager::~NPCStateManager()
{
	Release();

	SAFE_DELETE( m_pStateFactory );
}

VOID NPCStateManager::Release()
{
	m_mapStates.clear();
}

VOID NPCStateManager::Init( DWORD dwStateID, LPARAM param1 )
{
	m_dwStateChangeCount = 0;
	m_dwStateChangeCheckTick = 0;

	// 贸澜 State
	STATE_MAP_ITER it = m_mapStates.find( dwStateID );
	m_pCurState = it->second;
	m_pCurState->OnEnter( param1 );
}

VOID NPCStateManager::Update( DWORD dwDeltaTick )
{
	// 漂荐炼扒 眉农
	m_pNPC->SpecialAction();

	// 惑怕历亲 眉农
	m_pNPC->StatusResist();

	m_pCurState->OnUpdate( dwDeltaTick );
}

VOID NPCStateManager::AddStateObject( DWORD dwStateID, DWORD dwLinkStateID )
{
	State *pAddState = m_pStateFactory->Alloc( dwLinkStateID );

	pAddState->SetNPC( m_pNPC );
	pAddState->SetStateID( dwStateID );

	m_mapStates.insert( STATE_MAP_PAIR( dwStateID, pAddState ) );
}

VOID NPCStateManager::ChangeState( DWORD dwStateID, LPARAM param1, LPARAM param2, LPARAM param3 )
{
	if( ++m_dwStateChangeCount > 10 )
	{
		SUNLOG( eCRITICAL_LOG,  "[NPCStateManager::ChangeState] Warning: too many state change! ObjectKey(%d)  Count(%d)", m_pNPC->GetObjectKey(), m_dwStateChangeCount );
	}

	if( GetTickCount() - m_dwStateChangeCheckTick >= 1000 )
	{
		m_dwStateChangeCheckTick = GetTickCount();
		m_dwStateChangeCount = 0;
	}

	// 官拆 惑怕狼 器牢磐甫 茫绰促.
	STATE_MAP_ITER it = m_mapStates.find( dwStateID );

	// 官拆 惑怕啊 沥狼登绢 乐瘤 臼篮 版快 府畔茄促.
	if( it == m_mapStates.end() )	
	{
		return;
	}

	// 官拆 惑怕啊 泅犁 惑怕客 鞍栏搁 弊成 府畔茄促.
	if( it->second == m_pCurState ) return;

	// 烙矫 抛胶飘
//	SUNLOG( eCRITICAL_LOG, "[ChangeState] CurState[%d] NextState[%d]", m_pCurState->GetStateID(), dwStateID );

	m_bChangeStateSafe = FALSE;

	// 泅犁 惑怕狼 付公府 内靛
	m_pCurState->OnExit();

	// 惑怕 器牢磐 背眉
	m_pCurState = it->second;

	// 官诧 惑怕狼 檬扁拳 内靛
	m_pCurState->OnEnter( param1, param2, param3 );		

	m_bChangeStateSafe = TRUE;
}

















⌨️ 快捷键说明

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