예제 #1
0
        public object GetValue(int index)
        {
            string type = mLuaState.L_TypeName(index);

            switch (type)
            {
            case "number":
                return(mLuaState.ToNumber(index));

            case "boolean":
                return(mLuaState.ToBoolean(index));

            case "string":
                string utf8 = mLuaState.ToString(index);
                return(XCSharp.DecodeUTF8(utf8));

            case "function":
                return(mLuaState.L_Ref(UniLua.LuaDef.LUA_REGISTRYINDEX));

            case "table":
                XTable table = new XTable();
                {
                    mLuaState.PushValue(index);
                    int t = mLuaState.GetTop();

                    mLuaState.PushNil();
                    while (mLuaState.Next(t))
                    {
                        object key = this.GetValue(-2);
                        object val = this.GetValue(-1);
                        table[key] = val;

                        mLuaState.Pop(1);
                    }
                    mLuaState.Pop(1);
                }
                return(table);

            default:
                return(mLuaState.ToUserData(index));
            }
        }