//called when data for any output pin is requested public void Evaluate(int SpreadMax) { FNameOutput.SliceCount = SpreadMax; FEntryOutput.SliceCount = SpreadMax; var anyEnumChanged = false; var inputEnums = FInput.ToSpread().ToList(); foreach (var changedEnum in FChangedEnums) { if (inputEnums.Any(e => e.Name == changedEnum)) { anyEnumChanged = true; break; } } if (FInput.IsChanged || anyEnumChanged) { FChangedEnums.Clear(); for (int i = 0; i < SpreadMax; i++) { var enumname = FInput[i].Name; FNameOutput[i] = enumname; var entries = new List <string>(); int enumcount = EnumManager.GetEnumEntryCount(enumname); for (int j = 0; j < enumcount; j++) { entries.Add(EnumManager.GetEnumEntry(enumname, j)); } FEntryOutput[i].AssignFrom(entries); } } }