Ejemplo n.º 1
0
        public static object Get(lua_StatePtr L, int N, Type T)
        {
            N = GetActualStackIndex(L, N);

            if (LuaToNetMarshals.ContainsKey(T))
            {
                return(LuaToNetMarshals[T](L, N));
            }
            else
            {
                foreach (var KV in LuaToNetMarshals)
                {
                    if (KV.Key.IsAssignableFrom(T))
                    {
                        try {
                            return(KV.Value(L, N));
                        } catch (NotImplementedException) {
                            continue;
                        }
                    }
                }
            }

            throw new Exception("Unsupported Lua marshal type " + T);
        }
Ejemplo n.º 2
0
        public static int Push(lua_StatePtr L, object Ret)
        {
            Type T = typeof(object);

            if (Ret != null)
            {
                T = Ret.GetType();
            }

            if (T.IsArray)
            {
                Array Array = (Array)Ret;
                int   i     = 1;

                Lua.lua_createtable(L, Array.Length, 0);

                foreach (var Obj in Array)
                {
                    Push(L, Obj);
                    Lua.lua_rawseti(L, -2, i++);
                }

                return(1);
            }
            else if (NetToLuaMarshals.ContainsKey(T))
            {
                return(NetToLuaMarshals[T](L, Ret));
            }
            else
            {
                foreach (var KV in NetToLuaMarshals)
                {
                    if (KV.Key.IsAssignableFrom(T))
                    {
                        try {
                            return(KV.Value(L, Ret));
                        } catch (NotImplementedException) {
                            continue;
                        }
                    }
                }
            }

            throw new Exception("Unsupported Lua marshal type " + T);
        }