public override void RegisterPorts(FlowNode node, MethodInfo method, ReflectedMethodRegistrationOptions options) { call = method.RTCreateDelegate <ActionCall>(null); var o = node.AddFlowOutput(" "); node.AddFlowInput(" ", (f) => { Call(); o.Call(f); }); }
public override void RegisterPorts(FlowNode node, MethodInfo method, ReflectedMethodRegistrationOptions options) { call = method.RTCreateDelegate <FunctionCall <TResult> >(null); if (options.callable) { var o = node.AddFlowOutput(" "); node.AddFlowInput(" ", (f) => { Call(); o.Call(f); }); } node.AddValueOutput <TResult>("Value", () => { return(options.callable ? returnValue : Call()); }); }
public override void RegisterPorts(FlowNode node, MethodInfo method, ReflectedMethodRegistrationOptions options) { this.method = method; var parameters = method.GetParameters(); //Flow ports if (options.callable) { var o = node.AddFlowOutput(" "); node.AddFlowInput(" ", (f) => { CallMethod(); o.Call(f); }); } //Instance ports if (!method.IsStatic) { instanceInput = node.AddValueInput(method.DeclaringType.FriendlyName(), method.DeclaringType); if (options.callable) { node.AddValueOutput(method.DeclaringType.FriendlyName(), method.DeclaringType, () => { return(instance); }); } } //Return value port if (method.ReturnType != typeof(void)) { node.AddValueOutput("Value", method.ReturnType, () => { return(options.callable ? returnValue : CallMethod()); }); } //Parameter ports inputs = new List <ValueInput>(); for (var _i = 0; _i < parameters.Length; _i++) { var i = _i; var parameter = parameters[i]; var paramName = parameter.Name; if (instanceInput != null && paramName == instanceInput.name) //for rare cases where it's same as instance name like for example in Animation class. { paramName = paramName + " "; } if (parameter.IsOut || parameter.ParameterType.IsByRef) { node.AddValueOutput(paramName, parameter.ParameterType.GetElementType(), () => { if (!options.callable) { CallMethod(); } return(args[i]); }); inputs.Add(new ValueInput <object>(null, null, null)); //add dummy inputs for the shake of getting out args correctly by index } else { if (options.exposeParams && parameter.IsParams(parameters)) { paramsInputs = new List <ValueInput>(); paramsArrayType = parameter.ParameterType; for (var j = 0; j < options.exposedParamsCount; j++) { var paramPort = node.AddValueInput(paramName + " #" + j, parameter.ParameterType.GetEnumerableElementType(), paramName + j); paramsInputs.Add(paramPort); } } else { var paramPort = node.AddValueInput(paramName, parameter.ParameterType); if (parameter.IsOptional) { if (paramPort != null) { paramPort.serializedValue = parameter.DefaultValue; } } inputs.Add(paramPort); } } } }
///Derived type must implement way of registration. abstract public void RegisterPorts(FlowNode node, MethodInfo method, ReflectedMethodRegistrationOptions options);