示例#1
0
        void RegisterLuaObjectArr()
        {
            if (regLuaObjectArr != null && regLuaObjectArr.Length > 0)
            {
                for (int i = 0; i < regLuaObjectArr.Length; i++)
                {
                    if (string.IsNullOrEmpty(regLuaObjectArr[i].name))
                    {
                        DebugLogger.LogError("LuaBehaviour::RegisterLuaObjectArr->Group Name is Null, index = " + i);
                        continue;
                    }
                    lua.NewTable();

                    RegisterToLuaObject[] luaObjs = regLuaObjectArr[i].luaObjects;
                    if (luaObjs != null && luaObjs.Length > 0)
                    {
                        for (int j = 0; j < luaObjs.Length; j++)
                        {
                            if (luaObjs[j].regObj == null)
                            {
                                DebugLogger.LogError("LuaBehaviour::RegisterLuaObjectArr->obj or regObj is Null");
                                continue;
                            }
                            Type regType = luaObjs[j].regObj.GetType();
                            LuaRegister.RegisterType(regType);
                            lua.NewClassUserData(luaObjs[j].regObj);
                            lua.RawSetI(-2, j + 1);
                        }
                    }
                    lua.SetField(-2, regLuaObjectArr[i].name);
                }
            }
        }
示例#2
0
        public bool NewClassUserData(object obj)
        {
            if (obj == null)
            {
                PushNil();
                return(true);
            }
            int luaRef = LuaInstance.Instance.RegisterData.GetRegisterRef(obj.GetType());

            if (luaRef != LuaAPI.LUA_REFNIL)
            {
                NewUserData(obj);
                RawGetI(LuaAPI.LUA_REGISTRYINDEX, luaRef);
                PushLuaClosure(LuaState.GC, 0);
                SetField(-2, "__gc");
                SetMetaTable(-2);

                return(true);
            }
            else if (obj.GetType().IsSubclassOf(typeof(Delegate)))
            {
                NewUserData(obj);
                GetGlobal("LuaDelegate");
                PushLuaClosure(LuaState.GC, 0);
                SetField(-2, "__gc");
                SetMetaTable(-2);
                return(true);
            }
            else if ((obj.GetType().IsGenericType&& obj.GetType().GetGenericTypeDefinition() == typeof(List <>)) || obj.GetType().IsArray)
            {
                LuaRegister.RegisterType(obj.GetType());
                luaRef = LuaInstance.Instance.RegisterData.GetRegisterRef(obj.GetType());
                if (luaRef != LuaAPI.LUA_REFNIL)
                {
                    NewUserData(obj);
                    RawGetI(LuaAPI.LUA_REGISTRYINDEX, luaRef);
                    PushLuaClosure(LuaState.GC, 0);
                    SetField(-2, "__gc");
                    SetMetaTable(-2);
                    return(true);
                }
                else
                {
                    DebugLogger.LogError("-------No Class Found In Lua classesDic--------" + "Type   " + obj.GetType());
                    return(false);
                }
            }
            else
            {
                DebugLogger.LogError("-------No Class Found In Lua classesDic--------" + "Type   " + obj.GetType());
                return(false);
            }
        }
示例#3
0
        void RegisterLuaObject()
        {
            for (int i = 0; i < regLuaObject.Length; i++)
            {
                if (regLuaObject[i].obj == null || regLuaObject[i].regObj == null)
                {
                    DebugLogger.LogError("LuaBehaviour::RegisterLuaObjects->obj or regObj is Null");
                    continue;
                }
                string regName = regLuaObject[i].name;
                if (string.IsNullOrEmpty(regName))
                {
                    regName = regLuaObject[i].regObj.name;
                }

                Type regType = regLuaObject[i].regObj.GetType();
                LuaRegister.RegisterType(regType);

                lua.RawGetI(LuaAPI.LUA_REGISTRYINDEX, objRef);
                lua.NewClassUserData(regLuaObject[i].regObj);
                lua.SetField(-2, regName);
                lua.Pop(1);
            }
        }