public static string GetBaseTypeStr(Type t) { if (t.IsGenericType) { return(LuaMisc.GetTypeName(t)); } else { return(t.FullName.Replace("+", ".")); } }
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))); } return(create(func, self, true)); }
public static Delegate CreateDelegate(IntPtr L, Type t, LuaFunction func = null) { DelegateValue create = null; if (!dict.TryGetValue(t, out create)) { LuaDLL.luaL_error(L, string.Format("Delegate {0} not register", LuaMisc.GetTypeName(t))); return(null); } return(create(func)); }
static int set_onClickEvent(IntPtr L) { try { TestEventListener obj = (TestEventListener)ToLua.CheckObject(L, 1, typeof(TestEventListener)); EventObject arg0 = null; if (LuaDLL.lua_isuserdata(L, 2) != 0) { arg0 = (EventObject)ToLua.ToObject(L, 2); } else { return(LuaDLL.luaL_throw(L, "The event 'TestEventListener.onClickEvent' can only appear on the left hand side of += or -= when used outside of the type 'TestEventListener'")); } if (arg0.op == EventOp.Add) { TestEventListener.OnClick ev = (TestEventListener.OnClick) DelegateTraits <TestEventListener.OnClick> .Create(arg0.func); obj.onClickEvent += ev; } else if (arg0.op == EventOp.Sub) { TestEventListener.OnClick ev = (TestEventListener.OnClick)LuaMisc.GetEventHandler(obj, typeof(TestEventListener), "onClickEvent"); Delegate[] ds = ev.GetInvocationList(); LuaState state = LuaState.Get(L); for (int i = 0; i < ds.Length; i++) { ev = (TestEventListener.OnClick)ds[i]; LuaDelegate ld = ev.Target as LuaDelegate; if (ld != null && ld.func == arg0.func) { obj.onClickEvent -= ev; state.DelayDispose(ld.func); break; } } arg0.func.Dispose(); } return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
public BindType(Type t) { //if (CustomSettings.staticClassTypes == null) //{ // Debug.LogError("\nCustomSettings.staticClassTypes is null ! "); // return; //} if (t == null) { throw new NotSupportedException("\nBindType Type is null ! "); } if (typeof(System.MulticastDelegate).IsAssignableFrom(t)) { throw new NotSupportedException(string.Format("\nDon't export Delegate {0} as a class, register it in customDelegateList", LuaMisc.GetTypeName(t))); } //if (IsObsolete(t)) //{ // throw new Exception(string.Format("\n{0} is obsolete, don't export it!", LuaMisc.GetTypeName(t))); //} type = t; nameSpace = ToLuaExport.GetNameSpace(t, out libName); name = ToLuaExport.CombineTypeStr(nameSpace, libName); libName = ToLuaExport.ConvertToLibSign(libName); if (name == "object") { wrapName = "System_Object"; name = "System.Object"; } else if (name == "string") { wrapName = "System_String"; name = "System.String"; } else { wrapName = name.Replace('.', '_'); wrapName = ToLuaExport.ConvertToLibSign(wrapName); } if ((type.IsAbstract && type.IsSealed)) { IsStatic = true; } baseType = LuaMisc.GetExportBaseType(type); }
static int set_Finished(IntPtr L) { try { Task obj = (Task)ToLua.CheckObject(L, 1, typeof(Task)); EventObject arg0 = null; if (LuaDLL.lua_isuserdata(L, 2) != 0) { arg0 = (EventObject)ToLua.ToObject(L, 2); } else { return(LuaDLL.luaL_throw(L, "The event 'Task.Finished' can only appear on the left hand side of += or -= when used outside of the type 'Task'")); } if (arg0.op == EventOp.Add) { Task.FinishedHandler ev = (Task.FinishedHandler)DelegateFactory.CreateDelegate(typeof(Task.FinishedHandler), arg0.func); obj.Finished += ev; } else if (arg0.op == EventOp.Sub) { Task.FinishedHandler ev = (Task.FinishedHandler)LuaMisc.GetEventHandler(obj, typeof(Task), "Finished"); Delegate[] ds = ev.GetInvocationList(); LuaState state = LuaState.Get(L); for (int i = 0; i < ds.Length; i++) { ev = (Task.FinishedHandler)ds[i]; LuaDelegate ld = ev.Target as LuaDelegate; if (ld != null && ld.func == arg0.func) { obj.Finished -= ev; state.DelayDispose(ld.func); break; } } arg0.func.Dispose(); } return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
public BindType(Type t) { // 如果是委托及其衍生类,抛出异常 if (typeof(System.MulticastDelegate).IsAssignableFrom(t)) { throw new NotSupportedException(string.Format("\nDon't export Delegate {0} as a class, register it in customDelegateList", LuaMisc.GetTypeName(t))); } //if (IsObsolete(t)) //{ // throw new Exception(string.Format("\n{0} is obsolete, don't export it!", LuaMisc.GetTypeName(t))); //} type = t; // 获取 type 的命名空间,并将 libName 更新为从完全限定名到命名空间后一位(也就是带'.'字符)的字符 nameSpace = ToLuaExport.GetNameSpace(t, out libName); // 用"."字符拼接参数 space 与 name 为一个字符串并返回 name = ToLuaExport.CombineTypeStr(nameSpace, libName); // 过滤、替换字符串中指定的字符并返回 libName = ToLuaExport.ConvertToLibSign(libName); // 按规律设置 name 和 wrapName 的值 if (name == "object") { wrapName = "System_Object"; name = "System.Object"; } else if (name == "string") { wrapName = "System_String"; name = "System.String"; } else { wrapName = name.Replace('.', '_'); wrapName = ToLuaExport.ConvertToLibSign(wrapName); } // 获取 CustomSettings.staticClassTypes(静态类型)中 type 的 index int index = CustomSettings.staticClassTypes.IndexOf(type); // 如果大等于 0(代表没有这个类型)或 type 是虚类、密封类,设置 IsStatic 为真 if (index >= 0 || (type.IsAbstract && type.IsSealed)) { IsStatic = true; } // 获取导出文件的基类 baseType = LuaMisc.GetExportBaseType(type); }
static int set_onBeforeRender(IntPtr L) { try { EventObject arg0 = null; if (LuaDLL.lua_isuserdata(L, 2) != 0) { arg0 = (EventObject)ToLua.ToObject(L, 2); } else { return(LuaDLL.luaL_throw(L, "The event 'UnityEngine.Application.onBeforeRender' can only appear on the left hand side of += or -= when used outside of the type 'UnityEngine.Application'")); } if (arg0.op == EventOp.Add) { UnityEngine.Events.UnityAction ev = (UnityEngine.Events.UnityAction) DelegateTraits <UnityEngine.Events.UnityAction> .Create(arg0.func); UnityEngine.Application.onBeforeRender += ev; } else if (arg0.op == EventOp.Sub) { UnityEngine.Events.UnityAction ev = (UnityEngine.Events.UnityAction)LuaMisc.GetEventHandler(null, typeof(UnityEngine.Application), "onBeforeRender"); Delegate[] ds = ev.GetInvocationList(); LuaState state = LuaState.Get(L); for (int i = 0; i < ds.Length; i++) { ev = (UnityEngine.Events.UnityAction)ds[i]; LuaDelegate ld = ev.Target as LuaDelegate; if (ld != null && ld.func == arg0.func) { UnityEngine.Application.onBeforeRender -= ev; state.DelayDispose(ld.func); break; } } arg0.func.Dispose(); } return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int set_OnUpdate(IntPtr L) { try { EventObject arg0 = null; if (LuaDLL.lua_isuserdata(L, 2) != 0) { arg0 = (EventObject)ToLua.ToObject(L, 2); } else { return(LuaDLL.luaL_throw(L, "The event 'SceneLoader.OnUpdate' can only appear on the left hand side of += or -= when used outside of the type 'SceneLoader'")); } if (arg0.op == EventOp.Add) { System.Action <float> ev = (System.Action <float>)DelegateFactory.CreateDelegate(typeof(System.Action <float>), arg0.func); SceneLoader.OnUpdate += ev; } else if (arg0.op == EventOp.Sub) { System.Action <float> ev = (System.Action <float>)LuaMisc.GetEventHandler(null, typeof(SceneLoader), "OnUpdate"); Delegate[] ds = ev.GetInvocationList(); LuaState state = LuaState.Get(L); for (int i = 0; i < ds.Length; i++) { ev = (System.Action <float>)ds[i]; LuaDelegate ld = ev.Target as LuaDelegate; if (ld != null && ld.func == arg0.func) { SceneLoader.OnUpdate -= ev; state.DelayDispose(ld.func); break; } } arg0.func.Dispose(); } return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
public static string GetTypeStr(this Type type) { if (typeof(ICollection).IsAssignableFrom(type)) { return("table"); } if (type.IsGenericType) { var typeName = LuaMisc.GetTypeName(type); int pos = typeName.IndexOf("<", StringComparison.Ordinal); if (pos > 0) { return(typeName.Substring(0, pos)); } } return(LuaMisc.GetTypeName(type)); }
public static Delegate CreateDelegate(Type t, LuaFunction func = null) { DelegateValue create = null; if (!dict.TryGetValue(t, out create)) { throw new LuaException(string.Format("Delegate {0} not register", LuaMisc.GetTypeName(t))); } if (!dict2.ContainsKey(func)) { Delegate del = create(func); dict2[func] = del; dict3[del] = func; } return(dict2[func]); }
private static int set_onClickEvent(IntPtr L) { int result; try { TestEventListener testEventListener = (TestEventListener)ToLua.CheckObject(L, 1, typeof(TestEventListener)); if (LuaDLL.lua_isuserdata(L, 2) != 0) { EventObject eventObject = (EventObject)ToLua.ToObject(L, 2); if (eventObject.op == EventOp.Add) { TestEventListener.OnClick value = (TestEventListener.OnClick)DelegateFactory.CreateDelegate(typeof(TestEventListener.OnClick), eventObject.func); testEventListener.onClickEvent += value; } else if (eventObject.op == EventOp.Sub) { TestEventListener.OnClick onClick = (TestEventListener.OnClick)LuaMisc.GetEventHandler(testEventListener, typeof(TestEventListener), "onClickEvent"); Delegate[] invocationList = onClick.GetInvocationList(); LuaState luaState = LuaState.Get(L); for (int i = 0; i < invocationList.Length; i++) { onClick = (TestEventListener.OnClick)invocationList[i]; LuaDelegate luaDelegate = onClick.Target as LuaDelegate; if (luaDelegate != null && luaDelegate.func == eventObject.func) { testEventListener.onClickEvent -= onClick; luaState.DelayDispose(luaDelegate.func); break; } } eventObject.func.Dispose(); } result = 0; } else { result = LuaDLL.luaL_throw(L, "The event 'TestEventListener.onClickEvent' can only appear on the left hand side of += or -= when used outside of the type 'TestEventListener'"); } } catch (Exception e) { result = LuaDLL.toluaL_exception(L, e, null); } return(result); }
private static int set_logMessageReceivedThreaded(IntPtr L) { int result; try { if (LuaDLL.lua_isuserdata(L, 2) != 0) { EventObject eventObject = (EventObject)ToLua.ToObject(L, 2); if (eventObject.op == EventOp.Add) { Application.LogCallback logCallback = (Application.LogCallback)DelegateFactory.CreateDelegate(typeof(Application.LogCallback), eventObject.func); Application.add_logMessageReceivedThreaded(logCallback); } else if (eventObject.op == EventOp.Sub) { Application.LogCallback logCallback2 = (Application.LogCallback)LuaMisc.GetEventHandler(null, typeof(Application), "logMessageReceivedThreaded"); Delegate[] invocationList = logCallback2.GetInvocationList(); LuaState luaState = LuaState.Get(L); for (int i = 0; i < invocationList.Length; i++) { logCallback2 = (Application.LogCallback)invocationList[i]; LuaDelegate luaDelegate = logCallback2.get_Target() as LuaDelegate; if (luaDelegate != null && luaDelegate.func == eventObject.func) { Application.remove_logMessageReceivedThreaded(logCallback2); luaState.DelayDispose(luaDelegate.func); break; } } eventObject.func.Dispose(); } result = 0; } else { result = LuaDLL.luaL_throw(L, "The event 'UnityEngine.Application.logMessageReceivedThreaded' can only appear on the left hand side of += or -= when used outside of the type 'UnityEngine.Application'"); } } catch (Exception e) { result = LuaDLL.toluaL_exception(L, e, null); } return(result); }
public BindType(Type t) { if (typeof(System.MulticastDelegate).IsAssignableFrom(t)) { string ex = string.Format("\nDon't export Delegate {0} as a class, register it in customDelegateList", LuaMisc.GetTypeName(t)); throw new NotSupportedException(ex); } if (IsObsolete(t)) { throw new Exception(string.Format("\n{0} is obsolete, don't export it!", LuaMisc.GetTypeName(t))); } type = t; nameSpace = ToLuaExport.GetNameSpace(t, out libName); name = ToLuaExport.CombineTypeStr(nameSpace, libName); libName = ToLuaExport.ConvertToLibSign(libName); if (name == "object") { wrapName = "System_Object"; name = "System.Object"; } else if (name == "string") { wrapName = "System_String"; name = "System.String"; } else { wrapName = name.Replace('.', '_'); wrapName = ToLuaExport.ConvertToLibSign(wrapName); } int index = CustomSettings.staticClassTypes.IndexOf(type); if (index >= 0 || (type.IsAbstract && type.IsSealed)) { IsStatic = true; } baseType = LuaMisc.GetExportBaseType(type); }
static int set_StateChanged(IntPtr L) { MyFrameWork.BaseUI obj = (MyFrameWork.BaseUI)ToLua.CheckObject(L, 1, typeof(MyFrameWork.BaseUI)); EventObject arg0 = null; if (LuaDLL.lua_isuserdata(L, 2) != 0) { arg0 = (EventObject)ToLua.ToObject(L, 2); } else { return(LuaDLL.luaL_error(L, "The event 'MyFrameWork.BaseUI.StateChanged' can only appear on the left hand side of += or -= when used outside of the type 'MyFrameWork.BaseUI'")); } if (arg0.op == EventOp.Add) { MyFrameWork.StateChangedEvent ev = (MyFrameWork.StateChangedEvent)DelegateFactory.CreateDelegate(typeof(MyFrameWork.StateChangedEvent), arg0.func); obj.StateChanged += ev; } else if (arg0.op == EventOp.Sub) { MyFrameWork.StateChangedEvent ev = (MyFrameWork.StateChangedEvent)LuaMisc.GetEventHandler(obj, typeof(MyFrameWork.BaseUI), "StateChanged"); Delegate[] ds = ev.GetInvocationList(); LuaState state = LuaState.Get(L); for (int i = 0; i < ds.Length; i++) { ev = (MyFrameWork.StateChangedEvent)ds[i]; LuaDelegate ld = ev.Target as LuaDelegate; if (ld != null && ld.func == arg0.func) { obj.StateChanged -= ev; state.DelayDispose(ld.func); break; } } arg0.func.Dispose(); } return(0); }
static void GenFunctions() { HashSet <string> set = new HashSet <string>(); for (int i = 0; i < methods.Count; i++) { _MethodBase m = methods[i]; if (IsGenericMethod(m.Method)) { Debugger.Log("Generic Method {0}.{1} cannot be export to lua", LuaMisc.GetTypeName(type), m.GetTotalName()); continue; } string name = GetMethodName(m.Method); if (nameCounter[name] > 1) { if (!set.Contains(name)) { _MethodBase mi = GenOverrideFunc(name); if (mi == null) { set.Add(name); continue; } else { m = mi; //非重载函数,或者折叠之后只有一个函数 } } else { continue; } } set.Add(name); GenFunction(m); } }
public static Delegate CreateDelegate(Type t, LuaFunction func, LuaTable self) { DelegateFactory.DelegateValue delegateValue = null; if (!DelegateFactory.dict.TryGetValue(t, out delegateValue)) { throw new LuaException(string.Format("Delegate {0} not register", LuaMisc.GetTypeName(t)), null, 1); } if (!(func != null)) { return(delegateValue(func, self, true)); } LuaState luaState = func.GetLuaState(); LuaDelegate luaDelegate = luaState.GetLuaDelegate(func, self); if (luaDelegate != null) { return(Delegate.CreateDelegate(t, luaDelegate, luaDelegate.method)); } Delegate @delegate = delegateValue(func, self, true); luaDelegate = (@delegate.Target as LuaDelegate); luaState.AddLuaDelegate(luaDelegate, func, self); return(@delegate); }
//获取类型名字 public static string GetTypeStr(Type t) { if (t.IsByRef) { t = t.GetElementType(); return(GetTypeStr(t)); } else if (t.IsArray) { string str = GetTypeStr(t.GetElementType()); str += LuaMisc.GetArrayRank(t); return(str); } else if (t == extendType) { return(GetTypeStr(type)); } else if (IsIEnumerator(t)) { return(LuaMisc.GetTypeName(typeof(IEnumerator))); } return(LuaMisc.GetTypeName(t)); }
static int Reverse(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); Type argType = null; object obj = ToLua.CheckGenericObject(L, 1, typeof(List <>), out argType); if (count == 1) { LuaMethodCache.CallMethod("Reverse", obj); return(0); } else if (count == 3) { int arg0 = (int)LuaDLL.luaL_checknumber(L, 2); int arg1 = (int)LuaDLL.luaL_checknumber(L, 3); LuaMethodCache.CallMethod("Reverse", obj, arg0, arg1); return(0); } else { return(LuaDLL.luaL_throw(L, string.Format("invalid arguments to method: List<{0}>.LastIndexOf", LuaMisc.GetTypeName(argType)))); } } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int IndexOf(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); Type argType = null; object obj = ToLua.CheckGenericObject(L, 1, typeof(List <>), out argType); if (count == 2) { object arg0 = ToLua.CheckVarObject(L, 2, argType); int o = (int)LuaMethodCache.CallMethod("IndexOf", obj, arg0); LuaDLL.lua_pushinteger(L, o); return(1); } else if (count == 3) { object arg0 = ToLua.CheckVarObject(L, 2, argType); int arg1 = (int)LuaDLL.luaL_checknumber(L, 3); int o = (int)LuaMethodCache.CallMethod("IndexOf", obj, arg0, arg1); LuaDLL.lua_pushinteger(L, o); return(1); } else if (count == 4) { object arg0 = ToLua.CheckVarObject(L, 2, argType); int arg1 = (int)LuaDLL.luaL_checknumber(L, 3); int arg2 = (int)LuaDLL.luaL_checknumber(L, 4); int o = (int)LuaMethodCache.CallMethod("IndexOf", obj, arg0, arg1, arg2); LuaDLL.lua_pushinteger(L, o); return(1); } else { return(LuaDLL.luaL_throw(L, string.Format("invalid arguments to method: List<{0}>.IndexOf", LuaMisc.GetTypeName(argType)))); } } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int FindLastIndex(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); Type argType = null; object obj = ToLua.CheckGenericObject(L, 1, typeof(List <>), out argType); if (count == 2) { Delegate arg0 = (Delegate)ToLua.CheckObject(L, 2, typeof(System.Predicate <>).MakeGenericType(argType)); int o = (int)LuaMethodCache.CallMethod("FindLastIndex", obj, arg0); LuaDLL.lua_pushinteger(L, o); return(1); } else if (count == 3) { int arg0 = (int)LuaDLL.luaL_checknumber(L, 2); Delegate arg1 = (Delegate)ToLua.CheckObject(L, 3, typeof(System.Predicate <>).MakeGenericType(argType)); int o = (int)LuaMethodCache.CallMethod("FindLastIndex", obj, arg0, arg1); LuaDLL.lua_pushinteger(L, o); return(1); } else if (count == 4) { int arg0 = (int)LuaDLL.luaL_checknumber(L, 2); int arg1 = (int)LuaDLL.luaL_checknumber(L, 3); Delegate arg2 = (Delegate)ToLua.CheckObject(L, 4, typeof(System.Predicate <>).MakeGenericType(argType)); int o = (int)LuaMethodCache.CallMethod("FindLastIndex", obj, arg0, arg1, arg2); LuaDLL.lua_pushinteger(L, o); return(1); } else { return(LuaDLL.luaL_throw(L, string.Format("invalid arguments to method: List<{0}>.FindLastIndex", LuaMisc.GetTypeName(argType)))); } } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int CopyTo(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); Type argType = null; object obj = ToLua.CheckGenericObject(L, 1, typeof(List <>), out argType); if (count == 2) { object arg0 = ToLua.CheckObject(L, 2, argType.MakeArrayType()); LuaMethodCache.CallMethod("CopyTo", obj, arg0); return(0); } else if (count == 3) { object arg0 = ToLua.CheckObject(L, 2, argType.MakeArrayType()); int arg1 = (int)LuaDLL.luaL_checknumber(L, 3); LuaMethodCache.CallMethod("CopyTo", obj, arg0, arg1); return(0); } else if (count == 5) { int arg0 = (int)LuaDLL.luaL_checknumber(L, 2); object arg1 = ToLua.CheckObject(L, 3, argType.MakeArrayType()); int arg2 = (int)LuaDLL.luaL_checknumber(L, 4); int arg3 = (int)LuaDLL.luaL_checknumber(L, 5); LuaMethodCache.CallMethod("CopyTo", obj, arg0, arg1, arg2, arg3); return(0); } else { return(LuaDLL.luaL_throw(L, string.Format("invalid arguments to method: List<{0}>.CopyTo", LuaMisc.GetTypeName(argType)))); } } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int set_willRenderCanvases(IntPtr L) { try { EventObject arg0 = null; if (LuaDLL.lua_isuserdata(L, 2) != 0) { arg0 = (EventObject)ToLua.ToObject(L, 2); } else { return(LuaDLL.luaL_throw(L, "The event 'UnityEngine.Canvas.willRenderCanvases' can only appear on the left hand side of += or -= when used outside of the type 'UnityEngine.Canvas'")); } if (arg0.op == EventOp.Add) { UnityEngine.Canvas.WillRenderCanvases ev = (UnityEngine.Canvas.WillRenderCanvases)DelegateFactory.CreateDelegate(typeof(UnityEngine.Canvas.WillRenderCanvases), arg0.func); UnityEngine.Canvas.willRenderCanvases += ev; } else if (arg0.op == EventOp.Sub) { UnityEngine.Canvas.WillRenderCanvases ev = (UnityEngine.Canvas.WillRenderCanvases)LuaMisc.GetEventHandler(null, typeof(UnityEngine.Canvas), "willRenderCanvases"); Delegate[] ds = ev.GetInvocationList(); LuaState state = LuaState.Get(L); for (int i = 0; i < ds.Length; i++) { ev = (UnityEngine.Canvas.WillRenderCanvases)ds[i]; LuaDelegate ld = ev.Target as LuaDelegate; if (ld != null && ld.func == arg0.func) { UnityEngine.Canvas.willRenderCanvases -= ev; state.DelayDispose(ld.func); break; } } arg0.func.Dispose(); } return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int Sort(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); Type argType = null; object obj = ToLua.CheckGenericObject(L, 1, typeof(List <>), out argType); if (count == 1) { LuaMethodCache.CallMethod("Sort", obj); return(0); } else if (count == 2 && TypeChecker.CheckTypes(L, 2, typeof(System.Comparison <>).MakeGenericType(argType))) { Delegate arg0 = (Delegate)ToLua.ToObject(L, 2); LuaMethodCache.CallMethod("Sort", obj, arg0); return(0); } else if (count == 2 && TypeChecker.CheckTypes(L, 2, typeof(IComparer <>).MakeGenericType(argType))) { object arg0 = ToLua.ToObject(L, 2); LuaMethodCache.CallMethod("Sort", obj, arg0); return(0); } else if (count == 4) { int arg0 = (int)LuaDLL.luaL_checknumber(L, 2); int arg1 = (int)LuaDLL.luaL_checknumber(L, 3); object arg2 = ToLua.CheckObject(L, 4, typeof(IComparer <>).MakeGenericType(argType)); LuaMethodCache.CallMethod("Sort", obj, arg0, arg1, arg2); return(0); } else { return(LuaDLL.luaL_throw(L, string.Format("invalid arguments to method: List<{0}>.LastIndexOf", LuaMisc.GetTypeName(argType)))); } } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int set_logMessageReceivedThreaded(IntPtr L) { try { EventObject arg0 = null; if (LuaDLL.lua_isuserdata(L, 2) != 0) { arg0 = (EventObject)ToLua.ToObject(L, 2); } else { return(LuaDLL.luaL_throw(L, "The event 'UnityEngine.Application.logMessageReceivedThreaded' can only appear on the left hand side of += or -= when used outside of the type 'UnityEngine.Application'")); } if (arg0.op == EventOp.Add) { UnityEngine.Application.LogCallback ev = (UnityEngine.Application.LogCallback)DelegateFactory.CreateDelegate(typeof(UnityEngine.Application.LogCallback), arg0.func); UnityEngine.Application.logMessageReceivedThreaded += ev; } else if (arg0.op == EventOp.Sub) { UnityEngine.Application.LogCallback ev = (UnityEngine.Application.LogCallback)LuaMisc.GetEventHandler(null, typeof(UnityEngine.Application), "logMessageReceivedThreaded"); Delegate[] ds = ev.GetInvocationList(); LuaState state = LuaState.Get(L); for (int i = 0; i < ds.Length; i++) { ev = (UnityEngine.Application.LogCallback)ds[i]; LuaDelegate ld = ev.Target as LuaDelegate; if (ld != null && ld.func == arg0.func) { UnityEngine.Application.logMessageReceivedThreaded -= ev; state.DelayDispose(ld.func); break; } } arg0.func.Dispose(); } return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int set_Interrupt(IntPtr L) { try { Spine.TrackEntry obj = (Spine.TrackEntry)ToLua.CheckObject(L, 1, typeof(Spine.TrackEntry)); EventObject arg0 = null; if (LuaDLL.lua_isuserdata(L, 2) != 0) { arg0 = (EventObject)ToLua.ToObject(L, 2); } else { return(LuaDLL.luaL_throw(L, "The event 'Spine.TrackEntry.Interrupt' can only appear on the left hand side of += or -= when used outside of the type 'Spine.TrackEntry'")); } if (arg0.op == EventOp.Add) { Spine.AnimationState.TrackEntryDelegate ev = (Spine.AnimationState.TrackEntryDelegate)DelegateFactory.CreateDelegate(typeof(Spine.AnimationState.TrackEntryDelegate), arg0.func); obj.Interrupt += ev; } else if (arg0.op == EventOp.Sub) { Spine.AnimationState.TrackEntryDelegate ev = (Spine.AnimationState.TrackEntryDelegate)LuaMisc.GetEventHandler(obj, typeof(Spine.TrackEntry), "Interrupt"); Delegate[] ds = ev.GetInvocationList(); LuaState state = LuaState.Get(L); for (int i = 0; i < ds.Length; i++) { ev = (Spine.AnimationState.TrackEntryDelegate)ds[i]; LuaDelegate ld = ev.Target as LuaDelegate; if (ld != null && ld.func == arg0.func) { obj.Interrupt -= ev; state.DelayDispose(ld.func); break; } } arg0.func.Dispose(); } return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static void AutoAddBaseType(BindType bt, bool beDropBaseType) { Type t = bt.baseType; if (t == null) { return; } if (CustomSettings.sealedList.Contains(t)) { CustomSettings.sealedList.Remove(t); Debugger.LogError("{0} not a sealed class, it is parent of {1}", LuaMisc.GetTypeName(t), bt.name); } if (t.IsInterface) { Debugger.LogWarning("{0} has a base type {1} is Interface, use SetBaseType to jump it", bt.name, t.FullName); bt.baseType = t.BaseType; } else if (dropType.IndexOf(t) >= 0) { Debugger.LogWarning("{0} has a base type {1} is a drop type", bt.name, t.FullName); bt.baseType = t.BaseType; } else if (!beDropBaseType || baseType.IndexOf(t) < 0) { int index = allTypes.FindIndex((iter) => { return(iter.type == t); }); if (index < 0) { #if JUMP_NODEFINED_ABSTRACT if (t.IsAbstract && !t.IsSealed) { Debugger.LogWarning("not defined bindtype for {0}, it is abstract class, jump it, child class is {1}", LuaMisc.GetTypeName(t), bt.name); bt.baseType = t.BaseType; } else { Debugger.LogWarning("not defined bindtype for {0}, autogen it, child class is {1}", LuaMisc.GetTypeName(t), bt.name); bt = new BindType(t); allTypes.Add(bt); } #else Debugger.LogWarning("not defined bindtype for {0}, autogen it, child class is {1}", LuaMisc.GetTypeName(t), bt.name); bt = new BindType(t); allTypes.Add(bt); #endif } else { return; } } else { return; } AutoAddBaseType(bt, beDropBaseType); }
public BindType(Type t) { if (typeof(System.MulticastDelegate).IsAssignableFrom(t)) { throw new NotSupportedException(string.Format("\nDon't export Delegate {0} as a class, register it in customDelegateList", LuaMisc.GetTypeName(t))); } type = t; nameSpace = ToLuaExport.GetNameSpace(t, out libName); name = ToLuaExport.CombineTypeStr(nameSpace, libName); libName = ToLuaExport.ConvertToLibSign(libName); if (name == "object") { wrapName = "System_Object"; name = "System.Object"; } else if (name == "string") { wrapName = "System_String"; name = "System.String"; } else { wrapName = name.Replace('.', '_'); wrapName = ToLuaExport.ConvertToLibSign(wrapName); } if (type.BaseType != null && type.BaseType != typeof(ValueType)) { baseType = type.BaseType; } int index = CustomSettings.staticClassTypes.IndexOf(type); if (index >= 0 || (type.GetConstructor(Type.EmptyTypes) == null && type.IsAbstract && type.IsSealed)) { IsStatic = true; baseType = baseType == typeof(object) ? null : baseType; } }
private static int set_reapplyDrivenProperties(IntPtr L) { int result; try { if (LuaDLL.lua_isuserdata(L, 2) != 0) { EventObject eventObject = (EventObject)ToLua.ToObject(L, 2); if (eventObject.op == EventOp.Add) { RectTransform.ReapplyDrivenProperties value = (RectTransform.ReapplyDrivenProperties)DelegateFactory.CreateDelegate(typeof(RectTransform.ReapplyDrivenProperties), eventObject.func); RectTransform.reapplyDrivenProperties += value; } else if (eventObject.op == EventOp.Sub) { RectTransform.ReapplyDrivenProperties reapplyDrivenProperties = (RectTransform.ReapplyDrivenProperties)LuaMisc.GetEventHandler(null, typeof(RectTransform), "reapplyDrivenProperties"); Delegate[] invocationList = reapplyDrivenProperties.GetInvocationList(); LuaState luaState = LuaState.Get(L); for (int i = 0; i < invocationList.Length; i++) { reapplyDrivenProperties = (RectTransform.ReapplyDrivenProperties)invocationList[i]; LuaDelegate luaDelegate = reapplyDrivenProperties.Target as LuaDelegate; if (luaDelegate != null && luaDelegate.func == eventObject.func) { RectTransform.reapplyDrivenProperties -= reapplyDrivenProperties; luaState.DelayDispose(luaDelegate.func); break; } } eventObject.func.Dispose(); } result = 0; } else { result = LuaDLL.luaL_throw(L, "The event 'UnityEngine.RectTransform.reapplyDrivenProperties' can only appear on the left hand side of += or -= when used outside of the type 'UnityEngine.RectTransform'"); } } catch (Exception e) { result = LuaDLL.toluaL_exception(L, e, null); } return(result); }
static int set_completed(IntPtr L) { try { UnityEngine.AsyncOperation obj = (UnityEngine.AsyncOperation)ToLua.CheckObject(L, 1, typeof(UnityEngine.AsyncOperation)); EventObject arg0 = null; if (LuaDLL.lua_isuserdata(L, 2) != 0) { arg0 = (EventObject)ToLua.ToObject(L, 2); } else { return(LuaDLL.luaL_throw(L, "The event 'UnityEngine.AsyncOperation.completed' can only appear on the left hand side of += or -= when used outside of the type 'UnityEngine.AsyncOperation'")); } if (arg0.op == EventOp.Add) { System.Action <UnityEngine.AsyncOperation> ev = (System.Action <UnityEngine.AsyncOperation>)DelegateFactory.CreateDelegate(typeof(System.Action <UnityEngine.AsyncOperation>), arg0.func); obj.completed += ev; } else if (arg0.op == EventOp.Sub) { System.Action <UnityEngine.AsyncOperation> ev = (System.Action <UnityEngine.AsyncOperation>)LuaMisc.GetEventHandler(obj, typeof(UnityEngine.AsyncOperation), "completed"); Delegate[] ds = ev.GetInvocationList(); LuaState state = LuaState.Get(L); for (int i = 0; i < ds.Length; i++) { ev = (System.Action <UnityEngine.AsyncOperation>)ds[i]; LuaDelegate ld = ev.Target as LuaDelegate; if (ld != null && ld.func == arg0.func) { obj.completed -= ev; state.DelayDispose(ld.func); break; } } arg0.func.Dispose(); } return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }