// Taken from 'public static void DynamicPortList' in NodeEditorGUILayout public static DynamicPortInfo GetDynamicPortData(Node node, string baseFieldName) { DynamicPortInfo info = new DynamicPortInfo() { min = int.MaxValue, max = int.MinValue }; var indexedPorts = node.DynamicPorts.Select(x => { string[] split = x.fieldName.Split(' '); if (split != null && split.Length == 2 && split[0] == baseFieldName) { int i = -1; if (int.TryParse(split[1], out i)) { info.min = i < info.min ? i : info.min; info.max = i > info.max ? i : info.max; return(new { index = i, port = x }); } } return(new { index = -1, port = (XNode.NodePort)null }); }).Where(x => x.port != null); info.ports = indexedPorts.OrderBy(x => x.index).Select(x => x.port).ToList(); return(info); }
public void UpdateDynamicPorts() { if (dynamicPorts == null) { dynamicPorts = new List <TValue>(); } dynamicPorts.Clear(); DynamicPortInfo dynamicPortInfo = DynamicPortHelper.GetDynamicPortData(nodePortInfo.Node, nodePortInfo.Port.fieldName); for (int i = 0; i <= dynamicPortInfo.max; ++i) { dynamicPorts.Add(GenerateDefaultValue()); } }