📄 npcstatemanager.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 + -