給引擎正式加入對(duì)lua腳本的支持
其實(shí)最便利的辦法就是腳本和引擎獨(dú)立開來,但是這樣不便于c++和lua的通信
若是把lua全部都封裝進(jìn)引擎則由于lua和c++是2個(gè)不同的語言很難實(shí)現(xiàn)
再者封裝的一個(gè)弊端是封裝的越好則越的其靈活性降低
考慮下我把引擎lua上下文設(shè)計(jì)成了以下的樣子:
1 ////////////////////////////////////////////////////////////
2 /// 定義引擎Lua腳本上下文
3 ////////////////////////////////////////////////////////////
4 class LuaContext : public core::Object
5 {
6 public:
7 ///////////////////////////////////////////////////////
8 /// 構(gòu)造,析構(gòu)引擎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 /// 執(zhí)行給定lua腳本字符串
21 ///////////////////////////////////////////////////////
22 virtual int DoStirng(const char* script) = 0;
23
24 ///////////////////////////////////////////////////////
25 /// 載入給定lua腳本并執(zhí)行(.lua,.luac)
26 ///////////////////////////////////////////////////////
27 virtual int DoFile(const char* luafile) = 0;
28 public:
29 ///////////////////////////////////////////////////////
30 /// 從lua上下文中獲取給定名字的全局整數(shù)變量
31 ///////////////////////////////////////////////////////
32 virtual int GetInteger(const char* var, int def = 0) = 0;
33
34 ///////////////////////////////////////////////////////
35 /// 從lua上下文中獲取給定名字的全局浮點(diǎn)數(shù)變量 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為標(biāo)記符號(hào))
47 ///////////////////////////////////////////////////////
48 virtual bool GetBoolean(const char* var, bool &flag) = 0;
49
50 ///////////////////////////////////////////////////////
51 /// 執(zhí)行l(wèi)ua上下文中的給定函數(shù)(該函數(shù)既無參數(shù)也無返回值)
52 ///////////////////////////////////////////////////////
53 virtual void RunFunction(const char* fn) = 0;
54
55 DECLARE_OBJECT(LuaContext)
56 };
57
通過GetLuaStateOnwer獲取引擎全局的lua state指針.
當(dāng)然LuaContext中只是簡單封裝了一些獲取全局變量的函數(shù).
當(dāng)然這些是最常用的.
隨著引擎的開發(fā)我再根據(jù)情況加入更多可能的函數(shù).