private void UF_DrawTagGC() { GUILayout.Space(4); if (GUILayout.Button("GC UnusedRes", GUILayout.Height(40), GUILayout.Width(120))) { Resources.UnloadUnusedAssets(); } GUILayout.Space(4); if (GUILayout.Button("GC AssetBundle", GUILayout.Height(40), GUILayout.Width(120))) { AssetSystem.UF_GetInstance().UF_ClearAll(false); Resources.UnloadUnusedAssets(); } GUILayout.Space(4); if (GUILayout.Button("GC Mono", GUILayout.Height(40), GUILayout.Width(120))) { System.GC.Collect(); } GUILayout.Space(4); if (GUILayout.Button("GC Lua", GUILayout.Height(40), GUILayout.Width(120))) { GLuaState lua = GLuaState.Get(System.IntPtr.Zero); lua.LuaGC(LuaGCOptions.LUA_GCCOLLECT); } }
public static Delegate RemoveDelegate(Delegate obj, Delegate dg) { LuaDelegate remove = dg.Target as LuaDelegate; if (remove == null) { obj = Delegate.Remove(obj, dg); return(obj); } GLuaState state = remove.func.GetGLuaState(); Delegate[] ds = obj.GetInvocationList(); for (int i = 0; i < ds.Length; i++) { LuaDelegate ld = ds[i].Target as LuaDelegate; if (ld != null && ld == remove) { obj = Delegate.Remove(obj, ds[i]); state.DelayDispose(ld.func); state.DelayDispose(ld.self); break; } } return(obj); }
public static int GetEnumObject(IntPtr L, System.Enum e, out object obj) { GLuaState state = GLuaState.Get(L); obj = state.GetEnumObj(e); return(state.EnumMetatable); }
public static Delegate CreateDelegate(Type t, LuaFunction func, LuaTable self) { DelegateValue Create = null; if (!dict.TryGetValue(t, out Create)) { throw new LuaException(string.Format("Delegate {0} not register", LuaMisc.GetTypeName(t))); } if (func != null) { GLuaState state = func.GetGLuaState(); LuaDelegate target = state.GetLuaDelegate(func, self); if (target != null) { return(Delegate.CreateDelegate(t, target, target.method)); } else { Delegate d = Create(func, self, true); target = d.Target as LuaDelegate; state.AddLuaDelegate(target, func, self); return(d); } } return(Create(func, self, true)); }
static int Destroy(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); if (count == 1) { UnityEngine.Object arg0 = (UnityEngine.Object)ToLua.CheckObject(L, 1); ToLua.Destroy(L); UnityEngine.Object.Destroy(arg0); return(0); } else if (count == 2) { float arg1 = (float)LuaDLL.luaL_checknumber(L, 2); int udata = LuaDLL.tolua_rawnetobj(L, 1); ObjectTranslator translator = GLuaState.GetTranslator(L); translator.DelayDestroy(udata, arg1); return(0); } else { return(LuaDLL.luaL_throw(L, "invalid arguments to method: Object.Destroy")); } } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
public Enumerator(LuaDictTable list) { state = list.state; top = state.LuaGetTop(); state.Push(list.table); state.LuaPushNil(); }
private string UF_GetLuaRefCSObject() { ObjectTranslator objectTranslator = GLuaState.GetTranslator(System.IntPtr.Zero); Dictionary <System.Type, int> dicRefState = new Dictionary <System.Type, int> (); List <KeyValuePair <System.Type, int> > lstSort = new List <KeyValuePair <System.Type, int> > (); foreach (KeyValuePair <object, int> item in objectTranslator.objectsBackMap) { System.Type t = item.Key.GetType(); if (dicRefState.ContainsKey(t)) { dicRefState [t] += 1; } else { dicRefState.Add(t, 1); } } foreach (var item in dicRefState) { lstSort.Add(item); } lstSort.Sort((x, y) => - x.Value.CompareTo(y.Value)); string msg = ""; foreach (var each in lstSort) { msg += each.Key.ToString() + " : " + each.Value.ToString() + "\n"; } return(msg); }
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_GetLuaRefUnityObject() { string msg = ""; ObjectTranslator objectTranslator = GLuaState.GetTranslator(System.IntPtr.Zero); Dictionary <string, int> mDicUnityObject = new Dictionary <string, int> (); foreach (KeyValuePair <object, int> item in objectTranslator.objectsBackMap) { Object uobj = item.Key as Object; if (uobj != null) { string key = uobj.name + "(" + uobj.GetType().ToString() + ")"; if (!mDicUnityObject.ContainsKey(key)) { mDicUnityObject.Add(key, 1); } else { mDicUnityObject [key] += 1; } } } foreach (KeyValuePair <string, int> item in mDicUnityObject) { msg = msg + item.Key + " | " + item.Value + "\n"; } return(msg); }
//绑定全局方法 static void UF_RegisterGFunction(GLuaState luastate) { if (luastate == null) { return; } IntPtr L = luastate.LuaGetL(); LuaDLL.tolua_pushcsfunction(L, UF_PrintTag); LuaDLL.lua_setglobal(L, "printt"); LuaDLL.tolua_pushcsfunction(L, UF_PrintWarn); LuaDLL.lua_setglobal(L, "warn"); LuaDLL.tolua_pushcsfunction(L, UF_PrintError); LuaDLL.lua_setglobal(L, "error"); LuaDLL.tolua_pushcsfunction(L, UF_Unit64ToString); LuaDLL.lua_setglobal(L, "unit64_tostring"); LuaDLL.tolua_pushcsfunction(L, UF_MonoGC); LuaDLL.lua_setglobal(L, "GCMono"); LuaDLL.tolua_pushcsfunction(L, UF_TrackMsg); LuaDLL.lua_setglobal(L, "TrackMsg"); LuaDLL.lua_pushboolean(L, GlobalSettings.DebugMode); LuaDLL.lua_setglobal(L, "DEBUG_MODE"); }
public static void Register(GLuaState L) { L.BeginClass(typeof(LuaInterface.LuaMethod), typeof(System.Object)); L.RegFunction("Destroy", Destroy); L.RegFunction("Call", Call); L.RegFunction("__tostring", ToLua.op_ToString); L.EndClass(); }
public static LuaReflection Get(IntPtr L) { #if !MULTI_STATE return(_reflection); #else return(GLuaState.GetReflection(L)); #endif }
public static void Register(GLuaState L) { //L.BeginClass(typeof(LuaInterface.LuaOutMetatable), null); //L.EndClass(); L.BeginPreLoad(); L.RegFunction("tolua.out", LuaOpen_ToLua_Out); L.EndPreLoad(); }
public static void Register(GLuaState L) { L.BeginClass(typeof(LuaInterface.LuaProperty), typeof(System.Object)); L.RegFunction("Get", Get); L.RegFunction("Set", Set); L.RegFunction("__tostring", ToLua.op_ToString); L.EndClass(); }
public static ObjectTranslator Get(IntPtr L) { #if !MULTI_STATE return(_translator); #else return(GLuaState.GetTranslator(L)); #endif }
public static void Register(GLuaState L) { L.BeginClass(typeof(KeyValuePair <,>), null, "KeyValuePair"); L.RegFunction("__tostring", ToLua.op_ToString); L.RegVar("Key", get_Key, null); L.RegVar("Value", get_Value, null); L.EndClass(); }
public void Dispose() { if (state != null) { state.LuaSetTop(top); state = null; } }
public static void Register(GLuaState L) { L.BeginClass(typeof(System.Collections.IEnumerator), null); L.RegFunction("MoveNext", MoveNext); L.RegFunction("Reset", Reset); L.RegVar("Current", get_Current, null); L.EndClass(); }
public static void Register(GLuaState L) { L.BeginClass(typeof(LuaInterface.EventObject), typeof(System.Object)); L.RegFunction("__add", op_Addition); L.RegFunction("__sub", op_Subtraction); L.RegFunction("__tostring", ToLua.op_ToString); L.EndClass(); }
void Clear() { //_call = null; _add = null; _remove = null; self = null; luaState = null; }
public static void UF_Bind(GLuaState luastate) { //注册全局方法 UF_RegisterGFunction(luastate); //注册UI索引方法 UF_RegisterUI(luastate); //自定义的注册类 LuaNetwork.UF_Register(luastate); }
//LuaFunction _call = null; public LuaBeatEvent(LuaTable table) { self = table; luaState = table.GetGLuaState(); self.AddRef(); _add = self.GetLuaFunction("Add"); _remove = self.GetLuaFunction("Remove"); //_call = self.GetLuaFunction("__call"); }
public static void Register(GLuaState L) { L.BeginClass(typeof(Dictionary <,> .ValueCollection), typeof(System.Object), "ValueCollection"); L.RegFunction("CopyTo", CopyTo); L.RegFunction("GetEnumerator", GetEnumerator); L.RegFunction("New", _CreateSystem_Collections_Generic_Dictionary_ValueCollection); L.RegFunction("__tostring", ToLua.op_ToString); L.RegVar("Count", get_Count, null); L.EndClass(); }
public void UF_OnReset() { if (m_Luastate != null) { m_Luastate.Dispose(); } m_IsInited = false; lfHandleEventMsg = null; lfHandleNetMsg = null; m_Luastate = null; System.GC.Collect(); }
//加载全部Lua模块 internal IEnumerator UF_InitFramework() { if (!m_IsInited) { Debugger.UF_Log("LuaFramework -> Start"); m_Luastate = new GLuaState(); //第三方库 //m_Luastate.OpenLibs(LuaDLL.luaopen_struct); m_Luastate.OpenLibs(LuaDLL.luaopen_lpeg); //m_Luastate.OpenLibs(LuaDLL.luaopen_bit); m_Luastate.LuaSetTop(0); //加载基础库 UF_LuaBaseStart(m_Luastate); //静态绑定 LuaBinder.Bind(m_Luastate); //自定义绑定 LuaCustomBinder.UF_Bind(m_Luastate); yield return(null); //开启一个加载线程加载全部Runtime.Lua模块 Thread thread = new Thread(new ThreadStart(UF_InitLuaModules)); thread.Start(); //主线程等待全部Lua加载 while (!m_IsInited) { yield return(null); } yield return(null); m_Luastate.Collect(); System.GC.Collect(); yield return(null); //获取固有方法 lfHandleNetMsg = m_Luastate.GetFunction("OnHandleProtocol"); lfHandleEventMsg = m_Luastate.GetFunction("OnHandleEvent"); //模块加载完成,主函数启动 UF_CallLuaFunction("MainAwake"); yield return(null); } else { Debugger.UF_Warn("LuaFramework is already Init"); } yield break; }
public static void Register(GLuaState L) { L.BeginClass(typeof(System.Object), null); L.RegFunction("Equals", Equals); L.RegFunction("GetHashCode", GetHashCode); L.RegFunction("GetType", GetType); L.RegFunction("ToString", ToString); L.RegFunction("ReferenceEquals", ReferenceEquals); L.RegFunction("Destroy", Destroy); L.RegFunction("New", _CreateSystem_Object); L.RegFunction("__eq", op_Equality); L.EndClass(); }
public static void Register(GLuaState L) { L.BeginClass(typeof(ReadOnlyCollection <>), typeof(System.Object), "ReadOnlyCollection"); L.RegFunction("Contains", Contains); L.RegFunction("CopyTo", CopyTo); L.RegFunction("GetEnumerator", GetEnumerator); L.RegFunction("IndexOf", IndexOf); L.RegFunction(".geti", get_Item); L.RegFunction("get_Item", get_Item); L.RegFunction("__tostring", ToLua.op_ToString); L.RegVar("Count", get_Count, null); L.EndClass(); }
private void UF_LuaBaseStart(GLuaState luastate) { if (luastate != null) { string toluaroot = LuaRoot; string[] luafiles = { "Main.lua", "Mathf.lua", //ToLua/UnityEngine/Mathf.lua "Vector3.lua", //ToLua/UnityEngine/Vector3.lua "Quaternion.lua", //ToLua/UnityEngine/Quaternion.lua "Vector2.lua", //ToLua/UnityEngine/Vector2.lua "Vector4.lua", //ToLua/UnityEngine/Vector4.lua "Color.lua", //ToLua/UnityEngine/Color.lua "Ray.lua", //ToLua/UnityEngine/Ray.lua "Bounds.lua", //ToLua/UnityEngine/Bounds.lua "RaycastHit.lua", //ToLua/UnityEngine/RaycastHit.lua "Touch.lua", //ToLua/UnityEngine/Touch.lua "LayerMask.lua", //ToLua/UnityEngine/LayerMask.lua "Plane.lua", //ToLua/UnityEngine/Plane.lua "TypeOf.lua", //ToLua/System/TypeOf.lua "ValueType.lua", //ToLua/System/ValueType.lua "BindingFlags.lua", //ToLua/System/BindingFlags.lua }; int top = m_Luastate.LuaGetTop(); for (int k = 0; k < luafiles.Length; k++) { var assetinfo = AssetDataBases.UF_GetAssetInfo(luafiles[k]); if (assetinfo == default(AssetDataBases.AssetFileInfo)) { throw new LuaException(string.Format("Can not get lua file[{0}] in AssetDataBase,Load file failed!", luafiles[k]), LuaException.GetLastError()); } if (!UF_DoFile(m_Luastate.LuaGetL(), assetinfo.path, Path.GetFileNameWithoutExtension(assetinfo.name))) { string err = m_Luastate.LuaToString(-1); m_Luastate.LuaSetTop(top); throw new LuaException(err, LuaException.GetLastError()); } } m_Luastate.LuaSetTop(top); //打开基础库 LuaUnityLibs.OpenLuaLibs(luastate.LuaGetL()); luastate.Start(); } }
public virtual void Dispose(bool disposeManagedResources) { if (!beDisposed) { beDisposed = true; if (reference > 0 && luaState != null) { luaState.CollectRef(reference, name, !disposeManagedResources); } reference = -1; luaState = null; count = 0; } }
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); }