| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | 
							- using System.Collections;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- using GraphProcessor;
 
- using System.Linq;
 
- [System.Serializable, NodeMenuItem("Custom/MultiPorts")]
 
- public class CustomPortsNode : BaseNode
 
- {
 
-     [Input]
 
- 	public List< float >       	inputs;
 
- 	[Output]
 
- 	public List< float >		outputs; // TODO: custom function for this one
 
- 	List< object >				values = new List< object >();
 
- 	public override string		name => "CustomPorts";
 
-     public override string      layoutStyle => "TestType";
 
-     // We keep the max port count so it doesn't cause binding issues
 
-     [SerializeField, HideInInspector]
 
- 	int							portCount = 1;
 
- 	protected override void Process()
 
- 	{
 
- 		// do things with values
 
- 	}
 
- 	[CustomPortBehavior(nameof(inputs))]
 
- 	IEnumerable< PortData > ListPortBehavior(List< SerializableEdge > edges)
 
- 	{
 
- 		portCount = Mathf.Max(portCount, edges.Count + 1);
 
- 		for (int i = 0; i < portCount; i++)
 
- 		{
 
- 			yield return new PortData {
 
- 				displayName = "In " + i,
 
- 				displayType = typeof(float),
 
- 				identifier = i.ToString(), // Must be unique
 
- 			};
 
- 		}
 
- 	}
 
- 	// This function will be called once per port created from the `inputs` custom port function
 
- 	// will in parameter the list of the edges connected to this port
 
- 	[CustomPortInput(nameof(inputs), typeof(float))]
 
- 	void PullInputs(List< SerializableEdge > inputEdges)
 
- 	{
 
- 		values.AddRange(inputEdges.Select(e => e.passThroughBuffer).ToList());
 
- 	}
 
- 	[CustomPortOutput(nameof(outputs), typeof(float))]
 
- 	void PushOutputs(List< SerializableEdge > connectedEdges)
 
- 	{
 
- 		// Values length is supposed to match connected edges length
 
- 		for (int i = 0; i < connectedEdges.Count; i++)
 
- 			connectedEdges[i].passThroughBuffer = values[Mathf.Min(i, values.Count - 1)];
 
- 			
 
- 		// once the outputs are pushed, we don't need the inputs data anymore
 
- 		values.Clear();
 
- 	}
 
- }
 
 
  |