AGS.Plugin.Lua.LuaDotNetMethodProxy.__Call C# (CSharp) 메소드

__Call() 공개 메소드

public __Call ( IntPtr L ) : int
L System.IntPtr
리턴 int
        public int __Call(lua_State L)
        {
            List<object> paramValues = new List<object>();
            if (InvokeLua.lua_touserdata(L, 1) != proxy_object.userdata)
            {
                InvokeLua.lua_pushstring(L, "attempt to call method on bad self");
                return InvokeLua.lua_error(L);
            }
            InvokeLua.lua_remove(L, 1);
            foreach (MethodInfo method in proxy_methods)
            {
                ParameterInfo[] parameters = method.GetParameters();
                if (parameters.Length != InvokeLua.lua_gettop(L))
                {
                    continue;
                }
                paramValues.Clear();
                for (int i = 0; i < parameters.Length; i++)
                {
                    object o;
                    if (TryGetValue(parameters[i].ParameterType, L, i + 1, proxy_object.proxiedByUserdata, out o))
                    {
                        paramValues.Add(o);
                    }
                    else
                    {
                        break;
                    }
                }
                if (paramValues.Count != parameters.Length)
                {
                    continue;
                }
                object result = method.Invoke(proxy_object.ProxyObject, paramValues.ToArray());
                LuaDotNetObjectProxy.PushValue(L, result, proxy_object.proxied, proxy_object.proxiedByUserdata);
                return 1;
            }
            InvokeLua.lua_pushstring(L, "invalid arguments to method");
            return InvokeLua.lua_error(L);
        }