Пример #1
0
 public static string GetBaseTypeStr(Type t)
 {
     if (t.IsGenericType)
     {
         return(LuaMisc.GetTypeName(t));
     }
     else
     {
         return(t.FullName.Replace("+", "."));
     }
 }
Пример #2
0
    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));
        }
    }
Пример #5
0
        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);
        }
Пример #6
0
    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));
        }
    }
Пример #7
0
        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);
        }
Пример #8
0
    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));
        }
    }
Пример #9
0
    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));
        }
    }
Пример #10
0
 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));
 }
Пример #11
0
    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);
    }
Пример #14
0
        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);
        }
Пример #15
0
    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);
    }
Пример #16
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);
        }
    }
Пример #17
0
    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);
    }
Пример #18
0
    //获取类型名字
    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));
        }
    }
Пример #23
0
    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));
        }
    }
Пример #25
0
    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));
        }
    }
Пример #26
0
    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));
        }
    }
Пример #27
0
    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);
    }
Пример #28
0
        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));
        }
    }