private void UF_DebugEvent() { GLuaState lua = GLuaState.Get(System.IntPtr.Zero); int oldtop = lua.LuaGetTop(); try{ lua.LuaGetGlobal("Lua"); if (lua.LuaIsNil(-1) || !lua.lua_istable(-1)) { return; } lua.LuaGetField(-1, "global"); if (lua.LuaIsNil(-1) || !lua.lua_istable(-1)) { return; } lua.LuaGetField(-1, "event"); if (lua.LuaIsNil(-1) || !lua.lua_istable(-1)) { return; } lua.LuaGetField(-1, "debug_event"); if (lua.LuaIsNil(-1) || !lua.lua_isfunction(-1)) { return; } lua.Push(true); lua.LuaCall(1, 0); }catch (System.Exception ex) { Debugger.UF_Exception(ex); } lua.LuaSetTop(oldtop); }
private string UF_GetLuaGInfo() { GLuaState lua = GLuaState.Get(System.IntPtr.Zero); int oldtop = lua.LuaGetTop(); lua.LuaGetGlobal("TraceGlobal"); string info = string.Empty; if (!lua.LuaIsNil(-1) && lua.lua_isfunction(-1)) { lua.LuaCall(0, 1); info = lua.LuaToString(-1); } lua.LuaSetTop(oldtop); return(info); }
//所有模块的包先被加载 //所有Lua中的文件夹定义为一个包 private void UF_LoadLuaModulesPackages(List <AssetDataBases.AssetFileInfo> list) { if (m_Luastate == null || list == null) { return; } HashSet <string> hashmap = new HashSet <string>(); //遍历全部的资源信息文件,获取其相对路径 foreach (var v in list) { string dirName = GHelper.UF_GetDirectoryName(v.absName); if (!hashmap.Contains(dirName)) { hashmap.Add(dirName); } } int top = m_Luastate.LuaGetTop(); try { //设置module 记录包路径模块 m_Luastate.LuaCreateTable(); m_Luastate.LuaPushValue(-1); m_Luastate.LuaSetGlobal(MODULE_NAME); //按层级创建talbe pacakge foreach (var v_path in hashmap) { int s_top = m_Luastate.LuaGetTop(); foreach (var p_name in GHelper.UF_SplitString(v_path, '/')) { if (string.IsNullOrEmpty(p_name)) { continue; } if (p_name == "Runtimes") { //Runtimes作为全局根结点 m_Luastate.LuaGetGlobal("_G"); continue; } m_Luastate.LuaGetField(-1, p_name); if (m_Luastate.LuaIsNil(-1)) { m_Luastate.LuaRemove(-1); m_Luastate.LuaCreateTable(); m_Luastate.LuaPushValue(-1); m_Luastate.LuaSetField(-3, p_name); } } //设置到Module中记录 m_Luastate.LuaGetGlobal(MODULE_NAME); m_Luastate.LuaPushValue(-2); m_Luastate.LuaSetField(-2, v_path); m_Luastate.LuaSetTop(s_top); } } catch (Exception e) { Debugger.UF_Exception(e); } m_Luastate.LuaSetTop(top); }