- /********************************************************************
- created: 2004/06/24
- created: 23:55
- filename: d:WorksGameLib_sdkActorManager.h
- file path: d:WorksGameLib_sdk
- file base: ActorManager
- file ext: h
- author: lazybug
- purpose: 人物管理器类的定义
- *********************************************************************/
- #pragma once
- #include "./stdafx.h"
- #include "GameObj.h"
- #include <functional>
- class CGameLogic ;
- /*
- * 人物管理器,管理游戏中所有的人物和简单物品
- */
- class CActorManager
- {
- public:
- /*
- * 构造函数
- * 参数:
- * context - 环境变量,LogicEngine对象的指针,用于互操作
- */
- CActorManager( CGameLogic* context );
- /*
- * 析构函数,销毁所有的人物和简单物品
- */
- ~CActorManager(void);
- /*
- * 创建默认人物和简单物品
- */
- void CreateActors() ;
- /*
- * 取某个人物的引用
- * 参数:
- * name - 人物名
- * 返回值:
- * 对应人物的引用,如果人物不存在,抛出std标准异常
- */
- CPlayer& GetActor(const std::string& name ) ;
- /*
- * 取简单物品的引用,参见CActorManager::GetActor
- */
- CSimpleObj& GetSimpleObj(const std::string& name) ;
- /*
- * 取当前用户控制的人物的引用
- * 返回值:
- * 返回引用,如果没有用户控制的人物,抛出std标准异常
- */
- CPlayer& GetActiveActor() ;
- /*
- * 对人物根据Y坐标排序,用于画图的覆盖
- */
- void SortActors() ;
- /*
- * 枚举人物
- * 返回值:
- * 依次返回游戏中所有人物对象的指针,如果枚举结束,返回NULL
- */
- CPlayer* enumActor() ;
- /*
- * 枚举状态压栈,嵌套调用枚举时使用
- */
- void push_enum_state() ;
- /*
- * 枚举状态出栈,嵌套调用结束时使用
- */
- void pop_enum_state() ;
- /*
- * 关闭场景里的所有人物
- */
- void DisableAllActors() ;
- /*
- * 设定用户控制的人物
- * 参数:
- * name - 人物名
- */
- void SetActiveActor( const std::string& name ) ;
- /*
- * 刷新用户关注的npc
- */
- void RefreshUserAttention() ;
- /*
- * 返回用户关注的npc
- * 返回值:
- * 用户关注的npc人物对象的指针,如果没有,则返回NULL
- */
- CPlayer* GetUserAttention() ;
- private:
- /* 简单物品列表,比如萝卜*/
- std::vector< std::pair<std::string, CSimpleObj*> > m_simple_data ;
- /* 人物列表 */
- std::vector< std::pair<std::string, CPlayer*> > m_enum_data ;
- /* 枚举人物列表的指针 */
- std::vector< std::pair<std::string, CPlayer*> >::iterator m_enum_pos ;
- /* 嵌套枚举的保存栈 */
- std::list< std::vector< std::pair<std::string, CPlayer*> >::iterator > m_enum_stack ;
- /* 用户控制的人物 */
- CPlayer* m_activePlayer ;
- /* 用户所关注的npc的指针,可以引发调查菜单 */
- CPlayer* m_user_attention_player ;
- /* 环境变量 */
- CGameLogic* m_context ;
- };
- /*
- * 函数对象,用于人物对象的Y坐标比较
- */ struct BaseYcomp { /*
- * 函数对象()重载,比较CPlayer的Y坐标
- */ bool operator()(const std::pair<std::string, CPlayer*>& a, const std::pair<std::string, CPlayer*>& b) const { return ( ((a.second)->y) < ((b.second)->y) ) ; } };