📄 fsm.h
字号:
#ifndef _FSM_H_
#define _FSM_H_
#include <windows.h>
#include <map>
using namespace std;
enum ENUM_FSM_CONDITION_ID
{
FCID_MOVE_COMPLETE,
FCID_ENOUGH_REST,
FCID_TARGET_FOUND,
FCID_TARGET_LOST,
FCID_CLOSE_TO_TARGET,
FCID_TARGET_IS_OUT_OF_ATTACK_RANGE,
FCID_TARGET_CHANGE,
FCID_HELP_REQUEST,
FCID_DEAD
};
class State;
class NPC;
struct AI_MSG;
typedef std::map<DWORD, State*> STATE_MAP;
typedef std::pair<DWORD, State*> STATE_MAP_PAIR;
typedef STATE_MAP::iterator STATE_MAP_ITER;
//=================================================================================================
/// Finite State Machine Class
/**
@author
Baek Sang Hyun
@since
2004. 9. 8
@remarks
- (State ID, 惑怕 努贰胶 器牢磐)甫 pair肺 窍绰 甘阑 蜡瘤, 包府茄促.
*/
//=================================================================================================
class FSM
{
public:
FSM();
~FSM();
public:
VOID AddTransition( DWORD stateID, DWORD conditionID, DWORD outputStateID );
VOID RemoveAllTransition();
VOID Init( NPC *pNPC, DWORD stateID );
VOID SetInitialState( DWORD stateID );
VOID Transition( DWORD conditionID );
BOOL OnAIMsg( AI_MSG *pMsg );
VOID Update();
DWORD GetCurStateID();
private:
VOID Create();
VOID Destroy();
VOID AddState( DWORD stateID, State *pState );
VOID ChangeState();
NPC *m_pNPC;
State *m_pCurState;
STATE_MAP m_mapStates;
BOOL m_bStateChange;
DWORD m_dwNextStateID;
DWORD m_numStateChangePerSec;
DWORD m_dwLastStateChangeCheckedTick;
};
#endif // _FSM_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -