ActorManager.h
上传用户:lian_0917
上传日期:2013-03-24
资源大小:1151k
文件大小:3k
源码类别:

其他游戏

开发平台:

MultiPlatform

  1. /********************************************************************
  2. created: 2004/06/24
  3. created: 23:55
  4. filename:  d:WorksGameLib_sdkActorManager.h
  5. file path: d:WorksGameLib_sdk
  6. file base: ActorManager
  7. file ext: h
  8. author: lazybug
  9. purpose: 人物管理器类的定义
  10. *********************************************************************/
  11. #pragma once
  12. #include "./stdafx.h"
  13. #include "GameObj.h"
  14. #include <functional>
  15. class CGameLogic ;
  16. /*
  17.  * 人物管理器,管理游戏中所有的人物和简单物品
  18.  */
  19. class CActorManager
  20. {
  21. public:
  22. /*
  23.  * 构造函数
  24.  *  参数:
  25.  *  context - 环境变量,LogicEngine对象的指针,用于互操作
  26.  */
  27. CActorManager( CGameLogic* context );
  28. /*
  29.  * 析构函数,销毁所有的人物和简单物品
  30.  */
  31. ~CActorManager(void);
  32. /*
  33.  * 创建默认人物和简单物品
  34.  */
  35. void CreateActors() ;
  36.    /*
  37. *  取某个人物的引用
  38. *    参数:
  39. *    name - 人物名
  40. *    返回值:
  41. *    对应人物的引用,如果人物不存在,抛出std标准异常
  42. */
  43. CPlayer& GetActor(const std::string& name ) ;
  44. /*
  45.  * 取简单物品的引用,参见CActorManager::GetActor
  46.  */
  47. CSimpleObj& GetSimpleObj(const std::string& name) ;
  48. /*
  49.  * 取当前用户控制的人物的引用
  50.  *  返回值:
  51.  *  返回引用,如果没有用户控制的人物,抛出std标准异常
  52.  */
  53. CPlayer& GetActiveActor() ;
  54. /*
  55.  * 对人物根据Y坐标排序,用于画图的覆盖
  56.  */
  57. void SortActors() ;
  58. /*
  59.  * 枚举人物
  60.  *  返回值:
  61.  *  依次返回游戏中所有人物对象的指针,如果枚举结束,返回NULL
  62.  */
  63. CPlayer* enumActor() ;
  64. /*
  65.  * 枚举状态压栈,嵌套调用枚举时使用
  66.  */
  67. void push_enum_state() ;
  68. /*
  69.  * 枚举状态出栈,嵌套调用结束时使用
  70.  */
  71. void pop_enum_state() ;
  72. /*
  73.  * 关闭场景里的所有人物
  74.  */
  75. void DisableAllActors() ;
  76. /*
  77.  * 设定用户控制的人物
  78.  *  参数:
  79.  *  name - 人物名
  80.  */
  81. void SetActiveActor( const std::string& name ) ;
  82. /*
  83.  * 刷新用户关注的npc
  84.  */
  85. void RefreshUserAttention() ;
  86. /*
  87.  * 返回用户关注的npc
  88.  *  返回值:
  89.  *  用户关注的npc人物对象的指针,如果没有,则返回NULL
  90.  */
  91. CPlayer* GetUserAttention() ;
  92. private:
  93. /* 简单物品列表,比如萝卜*/
  94. std::vector< std::pair<std::string, CSimpleObj*> > m_simple_data ;
  95. /* 人物列表 */
  96. std::vector< std::pair<std::string, CPlayer*> > m_enum_data ;
  97. /* 枚举人物列表的指针 */
  98. std::vector< std::pair<std::string, CPlayer*> >::iterator m_enum_pos ;  
  99. /* 嵌套枚举的保存栈 */
  100. std::list< std::vector< std::pair<std::string, CPlayer*> >::iterator > m_enum_stack ;
  101. /* 用户控制的人物 */
  102. CPlayer* m_activePlayer ;
  103. /* 用户所关注的npc的指针,可以引发调查菜单 */
  104. CPlayer* m_user_attention_player ;
  105. /* 环境变量 */
  106. CGameLogic* m_context ;
  107. };
  108. /*
  109.  * 函数对象,用于人物对象的Y坐标比较
  110.  */ struct BaseYcomp { /*
  111.  * 函数对象()重载,比较CPlayer的Y坐标
  112.  */ bool operator()(const std::pair<std::string, CPlayer*>& a, const std::pair<std::string, CPlayer*>& b) const  {  return ( ((a.second)->y) < ((b.second)->y) ) ; } };