public void PushNewValueObject(IntPtr luaState, object o, int index)
{
LuaDLL.luanet_newudata(luaState, index);
LuaDLL.luaL_getmetatable(luaState, o.GetType().AssemblyQualifiedName);
if (LuaDLL.lua_isnil(luaState, -1))
{
Debuger.LogWarning("Create not wrap ulua type:" + o.GetType().AssemblyQualifiedName);
LuaDLL.lua_settop(luaState, -2);
LuaDLL.luaL_newmetatable(luaState, o.GetType().AssemblyQualifiedName);
LuaDLL.lua_pushstring(luaState, "cache");
LuaDLL.lua_newtable(luaState);
LuaDLL.lua_rawset(luaState, -3);
LuaDLL.lua_pushlightuserdata(luaState, LuaDLL.luanet_gettag());
LuaDLL.lua_pushnumber(luaState, 1);
LuaDLL.lua_rawset(luaState, -3);
LuaDLL.lua_pushstring(luaState, "__index");
LuaDLL.lua_pushstring(luaState, "luaNet_indexfunction");
LuaDLL.lua_rawget(luaState, (int)LuaIndexes.LUA_REGISTRYINDEX);
LuaDLL.lua_rawset(luaState, -3);
LuaDLL.lua_pushstring(luaState, "__gc");
LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.gcFunction);
LuaDLL.lua_rawset(luaState, -3);
LuaDLL.lua_pushstring(luaState, "__tostring");
LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.toStringFunction);
LuaDLL.lua_rawset(luaState, -3);
LuaDLL.lua_pushstring(luaState, "__newindex");
LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.newindexFunction);
LuaDLL.lua_rawset(luaState, -3);
}
LuaDLL.lua_setmetatable(luaState, -2);
}