Exemple #1
0
        string GenerateMethods()
        {
            var builder = new StringBuilder();

            foreach (var method in Methods)
            {
                var parameters    = method.GetParameters();
                var parameterStrs = "";
                var parameterArgs = "";
                for (int i = 0; i < parameters.Length; ++i)
                {
                    if (i != 0)
                    {
                        parameterStrs += ", ";
                    }
                    parameterStrs += $"{parameters[i].ParameterType.GetFullName()} {parameters[i].Name}";
                    parameterArgs += $", {parameters[i].Name}";
                }
                var call = ScorpioReflectUtil.ReturnString($@"__Call(""{method.Name}""{parameterArgs})", method.ReturnType);
                builder.Append($@"
    public {method.ReturnType.GetFullName()} {method.Name}({parameterStrs}) {{
        {call};
    }}");
            }
            return(builder.ToString());
        }
        string CreateDelegate(int buildType)
        {
            var builder = new StringBuilder();

            foreach (var type in m_Delegates)
            {
                var fullName     = ScorpioReflectUtil.GetFullName(type);
                var InvokeMethod = type.GetMethod("Invoke");
                var parameters   = InvokeMethod.GetParameters();
                var pars         = "";
                for (int i = 0; i < parameters.Length; ++i)
                {
                    if (i != 0)
                    {
                        pars += ",";
                    }
                    pars += $"arg{i}";
                }
                var invoke = parameters.Length == 0 ? $"scriptObject.call(ScriptValue.Null)" : $"scriptObject.call(ScriptValue.Null,{pars})";
                var call   = ScorpioReflectUtil.ReturnString(invoke, InvokeMethod.ReturnType);
                var func   = $"return new {fullName}( ({pars}) => {{ {call}; }} );";
                if (buildType == 0)
                {
                    builder.Append($@"
        delegates[typeof({fullName})] = (scriptObject) => {{ {func} }};");
                }
                else
                {
                    builder.Append($@"
        if (delegateType == typeof({fullName}))
            {func}");
                }
            }
            return(builder.ToString());
        }