コード例 #1
0
 private void SendToDatabase(NodeEntry data)
 {
     _actionsDatabase.Add(new ActionEntry(data.TemplateId, data.DisplayName, data.Category)
     {
         ProjectId = data is GraphNodeEntry gr ? gr.ProjectId : Guid.Empty,
         Keywords  = data.Keywords
     });
コード例 #2
0
        private void AddDataPins(NodeEntry plugin, MethodInfo method)
        {
            bool hasOutParams = false;

            foreach (var param in method.GetParameters())
            {
                var pin       = new PinData(param.Name.Beautify(), param.ParameterType);
                var pinsToAdd = new List <PinData>()
                {
                    pin
                };

                // TODO: Add pin factory button for "in/out params"
                if (param.IsDefined(typeof(ParamArrayAttribute)))
                {
                    if (param.IsDefined(typeof(GenerateArrayAttribute)))
                    {
                        var minCount = param.GetCustomAttribute <GenerateArrayAttribute>();
                        pinsToAdd = CreatePinsFromAttribute(minCount, param.ParameterType.GetElementType());
                        pinsToAdd[0].IsFactory = true;
                    }
                    else
                    {
                        pin = new PinData(string.Empty, param.ParameterType.GetElementType())
                        {
                            IsFactory = true
                        };
                    }
                }

                if (param.IsOut)
                {
                    plugin.Output.AddRange(pinsToAdd);
                    hasOutParams = true;
                }
                else
                {
                    plugin.Input.AddRange(pinsToAdd);
                }
            }

            if (method.ReturnType != typeof(void))
            {
                // TODO: Override return name
                plugin.Output.Add(new PinData(plugin.Output.Count == 0 ? string.Empty : hasOutParams ? "Return" : string.Empty, method.ReturnType));
            }
        }
コード例 #3
0
        public NodeEntry Create(Guid id, MethodInfo method)
        {
            NodeEntry plugin    = null;
            var       attribute = method.GetCustomAttribute <NodeAttribute>();

            if (attribute is PureNodeAttribute pure)
            {
                plugin = CreatePure(id, pure, method);
            }
            else if (attribute is ExecutableNodeAttribute exec)
            {
                plugin = CreateExecutable(id, exec, method);
                AddExecutionPins(plugin, method);
            }

            AddDataPins(plugin, method);

            plugin.Category = attribute.Category;
            plugin.Keywords = attribute.Keywords;

            return(plugin);
        }
コード例 #4
0
 private void AddExecutionPins(NodeEntry plugin, MethodInfo method)
 {
     plugin.Input.Add(new PinData());
     plugin.Output.Add(new PinData());
 }
コード例 #5
0
 public void Register(NodeEntry data)
 {
     _data.Add(data.TemplateId, data);
     SendToDatabase(data);
 }