Ejemplo n.º 1
0
        /// <summary>
        /// Creates a Lua object from a .NET object
        /// </summary>
        public static LuaObject FromObject(object obj)
        {
            switch (obj)
            {
            case null:
                return(LuaNil.Instance);

            case LuaObject o:
                return(o);

            case bool b1:
                return(FromBool(b1));

            case string str:
                return(FromString(str));

            case double d:
                return(FromNumber(d));

            case float f:
                return(FromNumber(f));

            case int i:
                return(FromNumber(i));

            case uint u:
                return(FromNumber(u));

            case short s:
                return(FromNumber(s));

            case ushort @ushort:
                return(FromNumber(@ushort));

            case long l:
                return(FromNumber(l));

            case ulong @ulong:
                return(FromNumber(@ulong));

            case byte b:
                return(FromNumber(b));

            case sbyte @sbyte:
                return(FromNumber(@sbyte));

            case Func <Engine, LuaArguments, LuaArguments> directFunc:
                return(FromFunction(directFunc));

            case Func <Engine, LuaArguments, CancellationToken, Task <LuaArguments> > asyncFunc:
                return(FromFunction(asyncFunc));
            }

            if (LuaProxyCache.IsValid(obj.GetType()))
            {
                return(FromProxy(obj));
            }

            throw new ArgumentException("Cannot transform the object to a Lua Object", nameof(obj));
        }
Ejemplo n.º 2
0
        public LuaTable GetProxyTable(Type type)
        {
            return(_proxyTables.GetOrAdd(type, t =>
            {
                var cache = LuaProxyCache.Get(t);
                var table = new LuaTable();

                foreach (var kv in cache.StaticProperties)
                {
                    // TODO: Implement set.
                    table.NewIndexRaw(kv.Key, LuaObject.FromObject(kv.Value.Info.GetValue(null)));
                }

                foreach (var kv in cache.Methods)
                {
                    table.NewIndexRaw(kv.Key, kv.Value);
                }

                return table;
            }));
        }
Ejemplo n.º 3
0
 public LuaProxy(object instance)
 {
     _instance  = instance ?? throw new ArgumentNullException(nameof(instance));
     _cacheItem = LuaProxyCache.Get(instance.GetType());
 }