给引擎正式加入对lua脚本的支持
其实最便利的办法就是脚本和引擎独立开来,但是这样不便于c++和lua的通信
若是把lua全部都封装进引擎则由于lua和c++是2个不同的语言很难实现
再者封装的一个弊端是封装的越好则越的其灵活性降低
考虑下我把引擎lua上下文设计成了以下的样子:
1 ////////////////////////////////////////////////////////////
2 /// 定义引擎Lua脚本上下文
3 ////////////////////////////////////////////////////////////
4 class LuaContext : public core::Object
5 {
6 public:
7 ///////////////////////////////////////////////////////
8 /// 构造,析构引擎Lua脚本上下文
9 ///////////////////////////////////////////////////////
10 LuaContext(){}
11 virtual ~LuaContext(){}
12 public:
13 #ifdef LUA_EXT_LUAPLUS
14 ///////////////////////////////////////////////////////
15 /// 获取luastateowner指针
16 ///////////////////////////////////////////////////////
17 virtual LuaPlus::LuaStateOwner* GetLuaStateOwner() = 0;
18 #endif
19 ///////////////////////////////////////////////////////
20 /// 执行给定lua脚本字符串
21 ///////////////////////////////////////////////////////
22 virtual int DoStirng(const char* script) = 0;
23
24 ///////////////////////////////////////////////////////
25 /// 载入给定lua脚本并执行(.lua,.luac)
26 ///////////////////////////////////////////////////////
27 virtual int DoFile(const char* luafile) = 0;
28 public:
29 ///////////////////////////////////////////////////////
30 /// 从lua上下文中获取给定名字的全局整数变量
31 ///////////////////////////////////////////////////////
32 virtual int GetInteger(const char* var, int def = 0) = 0;
33
34 ///////////////////////////////////////////////////////
35 /// 从lua上下文中获取给定名字的全局浮点数变量 GetDouble()
36 ///////////////////////////////////////////////////////
37 virtual float GetFloat(const char* var, float def = 0.0f) = 0;
38 virtual double GetDouble(const char* var, double def = 0.0) = 0;
39
40 ///////////////////////////////////////////////////////
41 /// 从lua上下文中获取给定名字的全局字符串变量(len为字符串长度)
42 ///////////////////////////////////////////////////////
43 virtual const char* GetString(const char* var, int &len) = 0;
44
45 ///////////////////////////////////////////////////////
46 /// 从lua上下文中获取给定名字的全局布尔变量(flag为标记符号)
47 ///////////////////////////////////////////////////////
48 virtual bool GetBoolean(const char* var, bool &flag) = 0;
49
50 ///////////////////////////////////////////////////////
51 /// 执行lua上下文中的给定函数(该函数既无参数也无返回值)
52 ///////////////////////////////////////////////////////
53 virtual void RunFunction(const char* fn) = 0;
54
55 DECLARE_OBJECT(LuaContext)
56 };
57
通过GetLuaStateOnwer获取引擎全局的lua state指针.
当然LuaContext中只是简单封装了一些获取全局变量的函数.
当然这些是最常用的.
随着引擎的开发我再根据情况加入更多可能的函数.