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()); }