public static bool NewTable(ScriptState luaState, string fullPath) { var runtime = LuaRuntimePool.GetRuntime(luaState); var oldTop = LuaCore.GetTop(luaState); var paths = GetSearchPaths(fullPath); var tableName = paths[0]; if (paths.Length > 1) { LuaCore.GetGlobal(luaState, paths[0]); if (!TableNotFound(runtime, luaState, -1, paths[0])) { return(false); } for (int i = 1; i < paths.Length - 1; i++) { LuaCore.PushString(luaState, paths[i]); LuaCore.GetTable(luaState, -2); if (!TableNotFound(runtime, luaState, -1, paths[i])) { return(false); } } tableName = paths[paths.Length - 1]; } LuaCore.CreateTable(luaState); LuaCore.SetGlobal(luaState, tableName); LuaCore.SetTop(luaState, oldTop); return(true); }
public static void SearchSetLuaObjectEx(ScriptState luaState, string fullPath, object o, string metatableName) { var oldTop = LuaCore.GetTop(luaState); var runtime = LuaRuntimePool.GetRuntime(luaState); var paths = GetSearchPaths(fullPath); if (paths.Length == 1) { runtime.ObjectMgr.PushObjectEx(luaState, o, metatableName); LuaCore.SetGlobal(luaState, paths[0]); } else { LuaCore.GetGlobal(luaState, paths[0]); for (int i = 1; i < paths.Length - 1; i++) { LuaCore.PushString(luaState, paths[i]); LuaCore.GetTable(luaState, -2); } LuaCore.PushString(luaState, paths[paths.Length - 1]); runtime.ObjectMgr.PushObjectEx(luaState, o, metatableName); LuaCore.SetTable(luaState, -3); } LuaCore.SetTop(luaState, oldTop); }
public IList <object> Call(params object[] args) { var topIndex = LuaCore.GetTop(_luaState); var runtime = LuaRuntimePool.GetRuntime(_luaState); if (_func != null) { DataHelper.PushObject(_luaState, _func); } else { LuaCore.GlobalRawGet(_luaState, _reference); } foreach (var arg in args) { DataHelper.PushObject(_luaState, arg); } if (LuaCore.Call(_luaState, args.Length, -1, 0) == 0) { return(runtime.ObjectMgr.PopResults(_luaState, topIndex)); } runtime.ThrowExceptionFromError(_luaState, topIndex); return(null); }
private static IList <object> GetCtorArguments(ScriptState luaState) { var n = LuaCore.GetTop(luaState); IList <object> args = new List <object>(n); for (int i = 1; i <= n; i++) { args.Add(DataHelper.GetObject(luaState, i)); } return(args); }
private int Call(ScriptState luaState) { var finder = Finder; var runtime = LuaRuntimePool.GetRuntime(luaState); object instance = null; int argIndex = 1; if (!finder.IsStatic) { instance = DataHelper.GetObject(luaState, 1); argIndex = 2; } var n = LuaCore.GetTop(luaState); IList <object> args = new List <object>(argIndex); IList <object> argTypes = new List <object>(argIndex); for (; argIndex <= n; argIndex++) { var arg = DataHelper.GetObject(luaState, argIndex); args.Add(arg); argTypes.Add(arg == null ? typeof(object) : arg.GetType()); } var m = finder.Search(argTypes); if (m == null) { string memberKey = finder.CreateKey(argTypes); runtime.ThrowError("未能找到" + memberKey + "的方法!"); } argTypes.Clear(); object result = null; try { if (m != null) { result = m.Invoke(instance, args.ToArray()); } } catch (Exception ex) { runtime.ThrowError(ex); } finally { args.Clear(); } DataHelper.PushObject(luaState, result); return(1); }
private int Call(ScriptState luaState) { var runtime = LuaRuntimePool.GetRuntime(luaState); var n = LuaCore.GetTop(luaState); IList <object> args = new List <object>(n); for (int i = 1; i <= n; i++) { args.Add(DataHelper.GetObject(luaState, i)); } object result = null; try { result = _func(args); } catch (Exception ex) { runtime.ThrowError(ex); } DataHelper.PushObject(luaState, result); return(1); }
public static void SearchSetLuaObject(ScriptState luaState, string fullPath, object o) { var oldTop = LuaCore.GetTop(luaState); var paths = GetSearchPaths(fullPath); if (paths.Length == 1) { DataHelper.PushObject(luaState, o); LuaCore.SetGlobal(luaState, paths[0]); } else { LuaCore.GetGlobal(luaState, paths[0]); for (int i = 1; i < paths.Length - 1; i++) { LuaCore.PushString(luaState, paths[i]); LuaCore.GetTable(luaState, -2); } LuaCore.PushString(luaState, paths[paths.Length - 1]); DataHelper.PushObject(luaState, o); LuaCore.SetTable(luaState, -3); } LuaCore.SetTop(luaState, oldTop); }
public static object SearchLuaObject(ScriptState luaState, string fullPath) { var oldTop = LuaCore.GetTop(luaState); var paths = GetSearchPaths(fullPath); LuaCore.GetGlobal(luaState, paths[0]); var result = DataHelper.GetObject(luaState, -1); if (paths.Length > 1) { for (int i = 1; i < paths.Length; i++) { LuaCore.PushString(luaState, paths[i]); LuaCore.GetTable(luaState, -2); result = DataHelper.GetObject(luaState, -1); if (result == null) { break; } } } LuaCore.SetTop(luaState, oldTop); return(result); }