給引擎正式加入對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中只是簡單封裝了一些獲取全局變量的函數.
當然這些是最常用的.
隨著引擎的開發我再根據情況加入更多可能的函數.