LuaUtil.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using LuaInterface;
  6. public class LuaUtil
  7. {
  8. public static void LuaDoFile(LuaState ls_, string name_)
  9. {
  10. //ls_.DoString(string.Format("require '{0}'", name_));
  11. if (ls_ != null)
  12. ls_.DoFile(name_);
  13. }
  14. public static T LuaDoFile<T>(LuaState ls_, string name_)
  15. {
  16. //ls_.DoString(string.Format("require '{0}'", name_));
  17. if (ls_ != null)
  18. return ls_.DoFile<T>(name_);
  19. return default(T);
  20. }
  21. public static void LuaRequire(LuaState ls_, string name_)
  22. {
  23. if (ls_ != null)
  24. ls_.Require(name_);
  25. }
  26. public static void LuaDoString(LuaState ls_, string strContent_)
  27. {
  28. ls_.DoString(strContent_);
  29. }
  30. public static void CallCS2Lua(string strFunc_)
  31. {
  32. if (!LuaMgr.HasInstance())
  33. return;
  34. LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  35. if(func!=null)
  36. {
  37. func.Call();
  38. func.Dispose();
  39. func = null;
  40. }
  41. }
  42. public static void CallCS2Lua(string strFunc_, params object[] args_)
  43. {
  44. if (!LuaMgr.HasInstance())
  45. return;
  46. LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  47. func.Call(args_);
  48. func.Dispose();
  49. func = null;
  50. }
  51. public static void CallCS2Lua<T1>(string strFunc_,T1 arg1)
  52. {
  53. if (!LuaMgr.HasInstance())
  54. return;
  55. LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  56. func.Call<T1>(arg1);
  57. func.Dispose();
  58. func = null;
  59. }
  60. public static void CallCS2Lua<T1,T2>(string strFunc_, T1 arg1,T2 arg2)
  61. {
  62. if (!LuaMgr.HasInstance())
  63. return;
  64. LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  65. func.Call<T1,T2>(arg1,arg2);
  66. func.Dispose();
  67. func = null;
  68. }
  69. public static void CallCS2Lua<T1, T2,T3>(string strFunc_, T1 arg1, T2 arg2,T3 arg3)
  70. {
  71. if (!LuaMgr.HasInstance())
  72. return;
  73. LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  74. func.Call<T1, T2,T3>(arg1, arg2,arg3);
  75. func.Dispose();
  76. func = null;
  77. }
  78. public static void CallCS2Lua<T1, T2, T3,T4>(string strFunc_, T1 arg1, T2 arg2, T3 arg3,T4 arg4)
  79. {
  80. if (!LuaMgr.HasInstance())
  81. return;
  82. LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  83. func.Call<T1, T2, T3,T4>(arg1, arg2, arg3,arg4);
  84. func.Dispose();
  85. func = null;
  86. }
  87. public static void CallCS2Lua<T1, T2, T3, T4,T5>(string strFunc_, T1 arg1, T2 arg2, T3 arg3, T4 arg4,T5 arg5)
  88. {
  89. if (!LuaMgr.HasInstance())
  90. return;
  91. LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  92. func.Call<T1, T2, T3, T4,T5>(arg1, arg2, arg3, arg4,arg5);
  93. func.Dispose();
  94. func = null;
  95. }
  96. public static void CallCS2Lua<T1, T2, T3, T4, T5,T6>(string strFunc_, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5,T6 arg6)
  97. {
  98. if (!LuaMgr.HasInstance())
  99. return;
  100. LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  101. func.Call<T1, T2, T3, T4, T5,T6>(arg1, arg2, arg3, arg4, arg5,arg6);
  102. func.Dispose();
  103. func = null;
  104. }
  105. public static void CallCS2Lua<T1, T2, T3, T4, T5, T6,T7>(string strFunc_, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6,T7 arg7)
  106. {
  107. if (!LuaMgr.HasInstance())
  108. return;
  109. LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  110. func.Call<T1, T2, T3, T4, T5, T6,T7>(arg1, arg2, arg3, arg4, arg5, arg6,arg7);
  111. func.Dispose();
  112. func = null;
  113. }
  114. public static void CallCS2Lua<T1, T2, T3, T4, T5, T6, T7,T8>(string strFunc_, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7,T8 arg8)
  115. {
  116. if (!LuaMgr.HasInstance())
  117. return;
  118. LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  119. func.Call<T1, T2, T3, T4, T5, T6, T7,T8>(arg1, arg2, arg3, arg4, arg5, arg6, arg7,arg8);
  120. func.Dispose();
  121. func = null;
  122. }
  123. public static void CallCS2Lua<T1, T2, T3, T4, T5, T6, T7, T8,T9>(string strFunc_, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8,T9 arg9)
  124. {
  125. if (!LuaMgr.HasInstance())
  126. return;
  127. LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  128. func.Call<T1, T2, T3, T4, T5, T6, T7, T8,T9>(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8,arg9);
  129. func.Dispose();
  130. func = null;
  131. }
  132. //public static object[] CallCS2LuaObject(string strFunc_, params object[] args_)
  133. //{
  134. // if (!LuaMgr.HasInstance())
  135. // return null;
  136. // LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  137. // return func.Call(args_);
  138. //}
  139. public static int CallCS2LuaInt(string strFunc_, LuaTable args_)
  140. {
  141. if (!LuaMgr.HasInstance())
  142. return 0;
  143. int iValue = 0;
  144. LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  145. func.BeginPCall();
  146. func.Push(args_);
  147. func.PCall();
  148. iValue = (int)func.CheckNumber();
  149. func.EndPCall();
  150. func.Dispose();
  151. func = null;
  152. return iValue;
  153. }
  154. public static LuaTable CallCS2LuaTable(string strFunc_, object args_)
  155. {
  156. if (!LuaMgr.HasInstance())
  157. return null;
  158. LuaFunction func = LuaMgr.Instance.luaState.GetFunction(strFunc_);
  159. LuaTable table = func.Invoke<object, LuaTable>(args_);
  160. return table;
  161. }
  162. public static string GetUILuaPath(string scriptname_,string directoryName_=null)
  163. {
  164. int iIdx = scriptname_.LastIndexOf('/');
  165. if (-1 == iIdx)
  166. if(directoryName_==null)
  167. {
  168. return scriptname_ + "/" + scriptname_;
  169. }
  170. else
  171. {
  172. return directoryName_ + "/" + scriptname_;
  173. }
  174. else
  175. return scriptname_;
  176. }
  177. public static string GetLuaScriptModuleName(string scriptname_ )
  178. {
  179. int iIdx = scriptname_.LastIndexOf('/');
  180. if (-1 == iIdx)
  181. return scriptname_ + ".";
  182. string strRet = scriptname_.Substring(iIdx + 1);
  183. return strRet + ".";
  184. }
  185. //测试lua层发送过来的数据对象的处理
  186. //tips: 此lua文件必须包含字段LuaType,用来区分是什么类型配置文件
  187. public static void ReceiveLuaTable(LuaTable luaTable_)
  188. {
  189. string strLuaType = luaTable_["LuaType"].ToString();
  190. switch(strLuaType)
  191. {
  192. case "PreAsset":
  193. TestLuaTableConf.Instance.ParseLuaTableConf(luaTable_);
  194. break;
  195. case "TestAsset":
  196. break;
  197. }
  198. }
  199. //通过函数,获得lua层函数内返回的table数据对象
  200. //tips: 此函数strFunc_,必须在LuaTableConf2CS.lua文件内已经定义,否则取出值为null
  201. //public static LuaTable GetLuaTable2Func(string strFunc_)
  202. //{
  203. // var objLua = CallCS2LuaObject(LuaUtil.GetLuaScriptModuleName("LuaTableConf2CS") + strFunc_)[0];
  204. // if(objLua != null)
  205. // {
  206. // return (LuaTable)objLua;
  207. // }
  208. // else
  209. // {
  210. // DebugHelper.Log("Error...GetLuaTable2Func!!!");
  211. // }
  212. // return null;
  213. //}
  214. //public static LuaTable LuaTable2FuncArgs(string strFunc_, params object[] args_)
  215. //{
  216. // var objLua = CallCS2LuaObject(LuaUtil.GetLuaScriptModuleName("LuaTableConf2CS") + strFunc_, args_)[0];
  217. // if (objLua != null)
  218. // {
  219. // return (LuaTable)objLua;
  220. // }
  221. // else
  222. // {
  223. // DebugHelper.Log("Error...GetLuaTable2Func!!!");
  224. // }
  225. // return null;
  226. //}
  227. public static void CallLuaTableConf2CS(string strFunc_, params object[] args_)
  228. {
  229. CallCS2Lua(LuaUtil.GetLuaScriptModuleName("LuaTableConf2CS") + strFunc_, args_);
  230. }
  231. //public static LuaTable GetLuaTable2FuncAgrs(string filePath_)
  232. //{
  233. // var objLua = CallCS2LuaObject(LuaUtil.GetLuaScriptModuleName("LuaTableConf2CS") + "GeLuaOpera2LT", filePath_)[0];
  234. // if (objLua != null)
  235. // {
  236. // return (LuaTable)objLua;
  237. // }
  238. // else
  239. // {
  240. // DebugHelper.Log("Error...GetLuaTable2Func!!!");
  241. // }
  242. // return null;
  243. //}
  244. }