/// <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)); }
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; })); }
public LuaProxy(object instance) { _instance = instance ?? throw new ArgumentNullException(nameof(instance)); _cacheItem = LuaProxyCache.Get(instance.GetType()); }