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); } } }
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); } }
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); } }