Пример #1
0
 protected internal void OnDestroy()
 {
     if (!_Destroyed)
     {
         _Destroyed = true;
         CallLuaFunc("onDestroy");
         _NeighboursReady = false;
         _Neighbours      = null;
         if (!object.ReferenceEquals(_Self, null))
         {
             var l = _Self.L;
             if (l != IntPtr.Zero)
             {
                 l.getref(_Self.Refid); // self
                 l.getfenv(-1);         // self ex
                 l.ClearTable(-1);
                 l.pop(2);
             }
             _Self.Dispose();
             _Self = null;
         }
         if (_DestroyRegIndex > 0)
         {
             RemoveDestroyRegIndex(_DestroyRegIndex);
             _DestroyRegIndex = 0;
         }
         ClearExVal();
         CheckDestroyed();
     }
 }
Пример #2
0
    static int OnEvent(IntPtr L)
    {
        int count = LuaDLL.lua_gettop(L);

        Type[] types1 = { typeof(BaseLua), typeof(string) };

        if (count == 2)
        {
            BaseLua obj  = LuaScriptMgr.GetNetObject <BaseLua>(L, 1);
            string  arg0 = LuaScriptMgr.GetLuaString(L, 2);
            obj.OnEvent(arg0);
            return(0);
        }
        else if (LuaScriptMgr.CheckTypes(L, types1, 1) && LuaScriptMgr.CheckParamsType(L, typeof(object), 3, count - 2))
        {
            BaseLua  obj   = LuaScriptMgr.GetNetObject <BaseLua>(L, 1);
            string   arg0  = LuaScriptMgr.GetString(L, 2);
            object[] objs1 = LuaScriptMgr.GetParamsObject(L, 3, count - 2);
            obj.OnEvent(arg0, objs1);
            return(0);
        }
        else
        {
            LuaDLL.luaL_error(L, "invalid arguments to method: BaseLua.OnEvent");
        }

        return(0);
    }
Пример #3
0
    static int ClearClick(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 1);
        BaseLua obj = LuaScriptMgr.GetUnityObject <BaseLua>(L, 1);

        obj.ClearClick();
        return(0);
    }
Пример #4
0
    static int ClearClick(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 1);
        BaseLua obj = (BaseLua)LuaScriptMgr.GetUnityObjectSelf(L, 1, "BaseLua");

        obj.ClearClick();
        return(0);
    }
Пример #5
0
    static int RemoveClick(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 2);
        BaseLua obj  = LuaScriptMgr.GetUnityObject <BaseLua>(L, 1);
        string  arg0 = LuaScriptMgr.GetLuaString(L, 2);

        obj.RemoveClick(arg0);
        return(0);
    }
Пример #6
0
    static int AddClick(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 2);
        BaseLua obj  = (BaseLua)LuaScriptMgr.GetUnityObjectSelf(L, 1, "BaseLua");
        string  arg0 = LuaScriptMgr.GetLuaString(L, 2);

        obj.AddClick(arg0);
        return(0);
    }
Пример #7
0
    static int Registere(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 1);
        BaseLua arg0 = LuaScriptMgr.GetNetObject <BaseLua>(L, 1);
        bool    o    = EventSender.Registere(arg0);

        LuaScriptMgr.Push(L, o);
        return(1);
    }
Пример #8
0
    static int GetGameObject(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 2);
        BaseLua    obj  = LuaScriptMgr.GetNetObject <BaseLua>(L, 1);
        string     arg0 = LuaScriptMgr.GetLuaString(L, 2);
        GameObject o    = obj.GetGameObject(arg0);

        LuaScriptMgr.Push(L, o);
        return(1);
    }
Пример #9
0
    static int OnInit(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 3);
        BaseLua     obj  = LuaScriptMgr.GetNetObject <BaseLua>(L, 1);
        AssetBundle arg0 = LuaScriptMgr.GetNetObject <AssetBundle>(L, 2);
        string      arg1 = LuaScriptMgr.GetLuaString(L, 3);

        obj.OnInit(arg0, arg1);
        return(0);
    }
Пример #10
0
        public static bool Registere(BaseLua listener)
        {
            bool result = listeners.Contains(listener);

            if (result)
            {
                return(result);
            }
            listeners.Add(listener);
            return(result);
        }
Пример #11
0
 public void BindLua(IntPtr l, int index)
 {
     CheckDestroyed();
     _LuaBinded = true;
     _Self      = BindBehav(l, this, index);
     if (!_Awaken && !(enabled && gameObject.activeInHierarchy))
     {
         if (_DestroyRegIndex <= 0)
         {
             _DestroyRegIndex = _DestroyRegNextIndex++;
             _DestroyReg[_DestroyRegIndex] = this;
         }
     }
 }
Пример #12
0
 public void BindLua()
 {
     if (!_LuaBinded && ReferenceEquals(_Self, null) && this != null && !_Destroyed)
     {
         CheckDestroyed();
         _LuaBinded       = true;
         _Self            = this.BindBehav();
         _NeighboursReady = true;
         if (!_Awaken && !(enabled && gameObject.activeInHierarchy))
         {
             if (_DestroyRegIndex <= 0)
             {
                 _DestroyRegIndex = _DestroyRegNextIndex++;
                 _DestroyReg[_DestroyRegIndex] = this;
             }
         }
     }
 }
Пример #13
0
    static int set_callBack(IntPtr L)
    {
        object  o   = LuaScriptMgr.GetLuaObject(L, 1);
        BaseLua obj = (BaseLua)o;

        if (obj == null)
        {
            LuaTypes types = LuaDLL.lua_type(L, 1);

            if (types == LuaTypes.LUA_TTABLE)
            {
                LuaDLL.luaL_error(L, "unknown member name callBack");
            }
            else
            {
                LuaDLL.luaL_error(L, "attempt to index callBack on a nil value");
            }
        }

        obj.callBack = LuaScriptMgr.GetLuaFunction(L, 3);
        return(0);
    }
Пример #14
0
    static int get_uluaMgr(IntPtr L)
    {
        object  o   = LuaScriptMgr.GetLuaObject(L, 1);
        BaseLua obj = (BaseLua)o;

        if (obj == null)
        {
            LuaTypes types = LuaDLL.lua_type(L, 1);

            if (types == LuaTypes.LUA_TTABLE)
            {
                LuaDLL.luaL_error(L, "unknown member name uluaMgr");
            }
            else
            {
                LuaDLL.luaL_error(L, "attempt to index uluaMgr on a nil value");
            }
        }

        LuaScriptMgr.PushObject(L, obj.uluaMgr);
        return(1);
    }
Пример #15
0
    static int set_LuaName(IntPtr L)
    {
        object o = LuaScriptMgr.GetLuaObject(L, 1);

        if (o == null)
        {
            LuaTypes types = LuaDLL.lua_type(L, 1);

            if (types == LuaTypes.LUA_TTABLE)
            {
                LuaDLL.luaL_error(L, "unknown member name LuaName");
            }
            else
            {
                LuaDLL.luaL_error(L, "attempt to index LuaName on a nil value");
            }
        }

        BaseLua obj = (BaseLua)o;

        obj.LuaName = LuaScriptMgr.GetString(L, 3);
        return(0);
    }
Пример #16
0
 protected internal void OnDestroy()
 {
     if (!_Destroyed)
     {
         _Destroyed = true;
         CallLuaFunc("onDestroy");
         if (!object.ReferenceEquals(_Self, null))
         {
             _Self.Dispose();
             _Self = null;
         }
         if (_DestroyRegIndex > 0)
         {
             RemoveDestroyRegIndex(_DestroyRegIndex);
             _DestroyRegIndex = 0;
         }
         if (ExFields != null)
         {
             ExFields.Clear();
         }
         CheckDestroyed();
     }
 }
Пример #17
0
 public static IDelegateLuaWrapper CreateDelegateImp(Type t, BaseLua dyn)
 {
     if (t != null && t.IsSubclassOf(typeof(Delegate)))
     {
         bool cached      = false;
         Type wrapperType = null;
         lock (DelType2WrapperType)
         {
             cached = DelType2WrapperType.TryGetValue(t, out wrapperType);
         }
         System.Reflection.MethodInfo      invoke = t.GetMethod("Invoke");
         System.Reflection.ParameterInfo[] pars   = invoke.GetParameters();
         if (invoke.ReturnType == typeof(void))
         {
             if (pars != null && pars.Length > 0)
             {
                 if (pars.Length < ActionWrapperTypes.Length)
                 {
                     wrapperType = ActionWrapperTypes[pars.Length];
                     Type[] genericTypes = new Type[pars.Length];
                     for (int i = 0; i < pars.Length; ++i)
                     {
                         genericTypes[i] = pars[i].ParameterType;
                     }
                     wrapperType = wrapperType.MakeGenericType(genericTypes);
                 }
             }
             else
             {
                 wrapperType = typeof(ActionLuaWrapper);
             }
         }
         else
         {
             var gcnt = 0;
             if (pars != null && pars.Length > 0)
             {
                 gcnt = pars.Length;
             }
             Type[] genericTypes = new Type[gcnt + 1];
             genericTypes[0] = invoke.ReturnType;
             if (gcnt < FuncWrapperTypes.Length)
             {
                 wrapperType = FuncWrapperTypes[gcnt];
                 if (gcnt > 0)
                 {
                     for (int i = 0; i < gcnt; ++i)
                     {
                         genericTypes[i + 1] = pars[i].ParameterType;
                     }
                     wrapperType = wrapperType.MakeGenericType(genericTypes);
                 }
             }
         }
         if (wrapperType != null)
         {
             if (!cached)
             {
                 lock (DelType2WrapperType)
                 {
                     DelType2WrapperType[t] = wrapperType;
                 }
             }
             var wrapper = Activator.CreateInstance(wrapperType) as IDelegateLuaWrapper;
             wrapper.Target = dyn;
             return(wrapper);
         }
     }
     return(null);
 }
Пример #18
0
        public static Delegate CreateDelegate(Type t, BaseLua dyn)
        {
            {
                var dynlua = dyn as Capstones.LuaWrap.BaseLua;
                var l      = dynlua.L;
                var refid  = dynlua.Refid;
                if (l != IntPtr.Zero && refid != 0)
                {
                    using (var lr = new LuaStateRecover(l))
                    {
                        l.checkstack(5);
                        l.pushlightuserdata(LuaConst.LRKEY_DEL_CACHE); // #reg
                        l.gettable(lua.LUA_REGISTRYINDEX);             // reg
                        if (!l.istable(-1))
                        {
                            l.pop(1);                                      // X

                            l.newtable();                                  // reg
                            l.newtable();                                  // reg meta
                            l.PushString(LuaConst.LS_COMMON_K);            // reg meta 'k'
                            l.SetField(-2, LuaConst.LS_META_KEY_MODE);     // reg meta
                            l.setmetatable(-2);                            // reg
                            l.pushlightuserdata(LuaConst.LRKEY_DEL_CACHE); // reg #reg
                            l.pushvalue(-2);                               // reg #reg reg
                            l.settable(lua.LUA_REGISTRYINDEX);             // reg
                        }

                        l.getref(refid); // reg func
                        l.gettable(-2);  // reg finfo
                        if (!l.istable(-1))
                        {
                            l.pop(1);        // reg
                            l.newtable();    // reg finfo
                            l.pushvalue(-2); // reg finfo reg
                            l.getref(refid); // reg finfo reg func
                            l.pushvalue(-3); // reg finfo reg func finfo
                            l.settable(-3);  // reg info reg
                            l.pop(1);        //reg info
                        }

                        l.PushLua(t);   // reg finfo dtype
                        l.gettable(-2); // reg finfo del
                        IDelegateLuaWrapper delwrapper = null;
                        if (l.isuserdata(-1))
                        {
                            var wr = l.GetLua <WeakReference>(-1);
                            if (wr != null)
                            {
                                delwrapper = wr.GetWeakReference <IDelegateLuaWrapper>();
                                if (delwrapper == null)
                                {
                                    wr.ReturnToPool();
                                }
                            }
                        }
                        if (delwrapper == null)
                        {
                            delwrapper = CreateDelegateImp(t, dyn);
                            if (delwrapper != null)
                            {
                                var wr = ObjectPool.WeakReferencePool.GetFromPool(delwrapper);
                                l.pop(1);               // reg finfo
                                l.PushLua(t);           // reg finfo dtype
                                l.PushLuaRawObject(wr); // reg finfo dtype del
                                l.settable(-3);         // reg finfo
                            }
                        }
                        if (delwrapper != null)
                        {
                            return(CreateDelegateFromWrapper(t, delwrapper));
                        }
                    }
                }
            }
            var wrapper = CreateDelegateImp(t, dyn);

            if (wrapper != null)
            {
                return(CreateDelegateFromWrapper(t, wrapper));
            }
            return(null);
        }
Пример #19
0
 public static bool Remove(BaseLua listener)
 {
     return(listeners.Remove(listener));
 }
Пример #20
0
 public static T CreateDelegate <T>(BaseLua dyn) where T : class
 {
     return(CreateDelegate(typeof(T), dyn) as T);
 }