游戏里面的角色或者npc会有各种各样的状态,对应在游戏中表现就是玩家或者npc头像下面的小图标,所以需要抽象出一个状态管理器来管理这些状态。状态管理器如下:
class StateMgr
{
public:
StateMgr(SceneEntryPk* owner) : _owner(owner) {}
~StateMgr(){}
void set(...); //设置一种状态,参数包括状态编号,过期时间时间,是否通知等
void clear(...);//清除身上一种状态
void reset(...);//重置所有状态(清空状态)
...
private:
SceneEntryPk* _owner = NULL; //状态拥有者
std::set<int> _state_set; //拥有的所有状态
...
};
因为角色类SceneUser和npc类SceneNpc都是SceneEntryPk的子类,所以所以只要在SceneEntryPk里面声明一个StateMgr对象即可实现对角色和npc的管理。如下所示:
class SceneEntryPk
{
...
public:
StateMgr& get_state() {
return _state;
}
private:
StateMgr _state;
...
};
用的时候只要user->get_state().set(...)或者npc->get_state().set(...)即可对角色或者npc设置一种状态。