EventManager.h
上传用户:lian_0917
上传日期:2013-03-24
资源大小:1151k
文件大小:5k
- #pragma once
- #include "stdafx.h"
- /*
- * 表示场景效果的枚举类型
- */
- enum RanderState
- {
- BackGround_Fadein, // 淡入
- BackGround_Fadeout, // 淡出
- BackGround_Blank, // 黑屏
- BackGround_Normal // 一般状态
- };
- /*
- * 保存脚本调用环境信息的结构体
- */
- struct CallInfo
- {
- std::string proc_name ; // 过程名,相当于cs
- size_t ip ; // 过程内偏移,相当于ip
- int logical_map ; // 全局量,当前逻辑地图
- std::string Scene ; // 全局量,当前场景
- std::string Mask ; // 全局量,当前场景的掩码
- };
- class CGameLogic ;
- /*
- * 事件管理器,处理所有脚本
- */
- class CEventManager
- {
- public:
- CEventManager(CGameLogic* contex);
- ~CEventManager(void);
- /*
- * 从文件读取某一幕的脚本
- * 参数:
- * scenefile - 文件名
- */
- void LoadScene(std::string scenefile) ;
- /*
- * 执行预定的入口函数
- */
- void Do_Default_Event() ;
- /*
- * 跳转到某事件,比如进出房屋,相当与jump
- */
- void Do_Event( const std::string& Proc, std::vector<std::string>* ArguList = NULL ) ;
- /*
- * 重载函数
- */
- void Do_Event( int ID, std::vector<std::string>* ArguList = NULL ) ;
- /*
- * 调用过程,相当与call
- */
- void Call_Event( const std::string& Proc, std::vector<std::string>* ArguList = NULL) ;
- void Call_Event( int ID, std::vector<std::string>* ArguList = NULL) ;
- /*
- * 强行从当前过程中返回
- */
- void Return_from_Event() ;
- /*
- * 查询事件的后续事件,如没有,则返回-1
- */
- int Following_Event( int ID ) ;
- /*
- * 是否在执行脚本过程
- */
- bool Has_something_todo() ;
- /*
- * 执行下一句脚本
- */
- bool Continue_Doing() ;
- /*
- * 得到当前背景图片ID
- */
- int GetBackImg() { return BackBmpID; }
- /*
- * 得到当前背景掩码ID
- */
- int GetMaskImg() { return MaskBmpID; }
- /*
- * 绘图引擎得到状态,整体淡入BackGround_Fadein,淡出,全黑
- */
- int GetState() ;
- /*
- * 设置场景显示效果,见RanderState
- */
- void SetState( RanderState state ) ;
- /*
- * 是否在等待用户的回车
- */
- bool is_wait_for_enter() ;
- /*
- * 开始逻辑等待,不执行脚本
- * 参数:
- * count - 需要等待的帧数
- */
- void Wait( size_t count ) ;
- /*
- * 处理用户按下的回车
- */
- void UserPressedEnter() ;
- bool m_is_in_state ;
- protected:
- /*
- * 从文件读入一行脚本代码
- */
- std::string readin(std::ifstream& in ) ;
- /*
- * 切换场景
- */
- void ChangeScene( const std::string& scene_name, const std::string& mask_name, int logical_map ) ;
- /*
- * 执行某条语句
- */
- void Executer( std::stringstream& stream ) ;
- /*
- * 根据段代码和ip放置读指令指针,int版本用来兼容老的设计,根据过程号寻址
- */
- void PosIterator( int cs, size_t ip, std::vector< std::string >::iterator& pos ) ;
- /*
- * 根据段代码和ip放置读指令指针,新的版本,根据过程名寻址
- */
- void PosIterator(const std::string& proc, size_t ip, std::vector< std::string>::iterator& pos) ;
- /*
- * 根据过程名返回代码段的引用
- */
- std::vector<std::string>& FindProc( const std::string& ProcName ) ;
- std::vector<std::string>& FindProc( int ProcID ) ;
- /*
- * 判断是否在逻辑等待,不执行脚本
- * 返回值:
- * true表示继续等待,不执行脚本,false表示不在等待状态
- */
- bool is_logic_waiting() ;
- private:
- /* 环境变量 */
- CGameLogic* contex ;
- /* 指向过程的指针,相当于cs */
- std::string now_event ;
- /* 所有的过程 */
- std::list< std::pair< std::string, std::vector< std::string > > > event_lib ;
- /* 执行过的脚本名集合,用于统计数据 */
- std::set<std::string> call_record ;
- /* 指向具体语句的指针,相当于ip */
- std::vector< std::string >::iterator pos_in_a_event ;
- /* 过程调用栈 */
- std::vector<CallInfo> Call_Stack ;
- /* 调用参数栈 */
- std::list< std::vector<std::string> > Arguments_Stack ;
- /* 当前过程参数列表 */
- std::vector< std::string > Arguments_list ;
- /* 事件关系库,记录一个事件的后续事件 */
- std::map<int, int> relation_lib ;
- /* 需要等待的帧数 */
- size_t m_waiting_frame ;
- /* 开始等待时候的帧数 */
- size_t m_frame_count ;
- /* 是否在执行逻辑等待 */
- bool m_is_doing_logic_wait ;
- /* 背景图片资源号 */
- int BackBmpID ;
- /* 掩码图片资源号 */
- int MaskBmpID ;
- /* 背景图片资源名字 */
- std::string BackBmpResName ;
- /* 掩码图片资源名字 */
- std::string MaskBmpResName ;
- /* 是否执行脚本过程中 */
- bool is_doing_event ;
- /* 是否等待用户回车 */
- bool wait_for_enter ;
- /* 场景显示效果 */
- RanderState m_background_state ;
- };
- inline int CEventManager::GetState()
- {
- return m_background_state ;
- }
- inline void CEventManager::SetState(RanderState state )
- {
- m_background_state = state ;
- }
- inline bool CEventManager::is_wait_for_enter()
- {
- return wait_for_enter ;
- }
- inline void CEventManager::UserPressedEnter()
- {
- wait_for_enter = false ;
- }