コード例 #1
0
        /*
         * Pushes the object into the Lua stack according to its type.
         */
        internal void push(IntPtr luaState, object o)
        {
            if (o == null)
            {
                LuaDLL.lua_pushnil(luaState);
                return;
            }

            Type t = o.GetType();

            if (t == typeof(bool))
            {
                bool b = (bool)o;
                LuaDLL.lua_pushboolean(luaState, b);
            }
            else if (t == typeof(UnityEngine.Object))
            {
                UnityEngine.Object obj = (UnityEngine.Object)o;

                if (obj == null)
                {
                    LuaDLL.lua_pushnil(luaState);
                    return;
                }
                else
                {
                    pushObject(luaState, o, "luaNet_metatable");
                }
            }
            else if (t.IsEnum)
            {
                LuaScriptMgr.PushEnum(luaState, o);
            }
            else if (t.IsArray)
            {
                LuaScriptMgr.PushArray(luaState, o);
            }
            else if (t.IsPrimitive)
            {
                double d = Convert.ToDouble(o);
                LuaDLL.lua_pushnumber(luaState, d);
            }
            else if (t == typeof(string))
            {
                string str = (string)o;
                LuaDLL.lua_pushstring(luaState, str);
            }
            else if (IsILua(o))
            {
#if !__NOGEN__
                (((ILuaGeneratedType)o).__luaInterface_getLuaTable()).push(luaState);
#endif
            }
            else if (t == typeof(LuaTable))
            {
                ((LuaTable)o).push(luaState);
            }
            else if (t == typeof(LuaCSFunction))
            {
                pushFunction(luaState, (LuaCSFunction)o);
            }
            else if (t == typeof(LuaFunction))
            {
                ((LuaFunction)o).push(luaState);
            }
            else if (t.IsValueType)
            {
                int index = addObject(o);
                PushNewValueObject(luaState, o, index, "luaNet_metatable");
            }
            else
            {
                pushObject(luaState, o, "luaNet_metatable");
            }
        }