Beispiel #1
0
        public void PushCSObject(object o)
        {
            if (o == null)
            {
                LuaLib.lua_pushnil(L);
                return;
            }

            int refId;

            if (!_objectUserdataRefIds.TryGetValue(o, out refId))
            {
                LuaBindMetatable metatable = Bindings.GetMetatable(o.GetType(), LuaBindMetatableType.Instance);

                int objectUserdataValue = _newObjectUserdataValue++;
                LuaLib.wutlua_newuserdata(L, objectUserdataValue);                              // |ud
                metatable.Push();                                                               // |ud|mt
                LuaLib.lua_setmetatable(L, -2);                                                 // |ud		// ud.metatable = mt

                refId = LuaLib.luaL_ref(L, LuaIndices.LUA_REGISTRYINDEX);                       // |

                _objects[objectUserdataValue] = o;
                _objectUserdataRefIds[o]      = refId;
            }
            LuaLib.lua_rawgeti(L, LuaIndices.LUA_REGISTRYINDEX, refId);                 // |ud
        }
Beispiel #2
0
 public LuaTable(LuaState luaState, int index) : base(luaState)
 {
     if (!LuaLib.lua_isnil(luaState.L, index))
     {
         LuaLib.lua_pushvalue(luaState.L, index);                                                // |...|t|...|t
         _RefId = LuaLib.luaL_ref(luaState.L, LuaIndices.LUA_REGISTRYINDEX);                     // |...|t|...|		// Registry[reference] = t
     }
 }
Beispiel #3
0
 public LuaTable(LuaState luaState) : base(luaState)
 {
     LuaLib.lua_newtable(luaState.L);                                                            // |...|t
     _RefId = LuaLib.luaL_ref(luaState.L, LuaIndices.LUA_REGISTRYINDEX);                         // |...|		// Registry[reference] = t
 }
Beispiel #4
0
 public LuaFunction(LuaState luaState, int index) : base(luaState)
 {
     LuaLib.lua_pushvalue(luaState.L, index);                                            // |...|f|...|f
     _RefId = LuaLib.luaL_ref(luaState.L, LuaIndices.LUA_REGISTRYINDEX);                 // |...|f|...|		// Registry[reference] = f
 }