Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

file 94 lines (57 sloc) 1.681 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
///**********************
///状态机类
///************************


#ifndef stateMachine_h_h_h
#define stateMachine_h_h_h

#include "State.h"
#include <vector>



class StateMachine
{
public:
    
///构造函数
StateMachine();
    
///析构函数
virtual ~StateMachine();
    
    
/**初始化函数,一般在这个函数里注册所有的状态
*在这个函数里需要手动指定当前活动状态。同时调用活动状态的begin函数
*/
virtual void initState()=0;
    
    
/**每帧更新函数
*@param time 上一帧到当前帧的时间
*/
virtual void update(float time);
    
    
/**消除所有状态
*@remark 会删除所有状态的内存
*/
void destroyAllState();
    
    
/**查找指定类型状态
*@return 如果没找到返回空
*/
State* findState(StateType type);
    
    
/**注册一个新的状态
*@return 如果已经注册了返回false
*/
bool registerState(State* pState);
    
    
/**注销一个状态
*@return 成功返回真。失败返回假
*@remark 不会清空状态内存。注销的状态需要用户手工删除
*/
bool unregisterState(StateType type);
    
    
/**获取状态的数量*/
size_t getStateCount()const {return m_stateCollect.size();}
    
    
/**获取指定索引的状态指针
*无返回空
*/
State* getState(unsigned int index) const ;
    
    
/**返回当前活动状态*/
State* getCurrentActive()const {return m_pcurrentState;}
    
///设置游戏开始的状态
void setBeginState(StateType GS);
    
    
protected:
    
typedef std::vector<State*> StateCollect;
    

///所有类型状态机容器
StateCollect m_stateCollect;
    
    
//保存当前的状态类型
State* m_pcurrentState;
    
};


#endif
Something went wrong with that request. Please try again.