protected override void InitializeView() { base.InitializeView(); Nodes.NodeSwitch node = targetNode as Nodes.NodeSwitch; if (node.target == null || !node.target.isAssigned || node.target.type == null) { return; } while (node.values.Count != node.targetNodes.Count) { if (node.values.Count > node.targetNodes.Count) { node.values.RemoveAt(node.values.Count - 1); } else { node.values.Add(null); } } filter.SetType(node.target.type); for (int i = 0; i < node.values.Count; i++) { int x = i; var member = node.values[i]; Type type = typeof(object); if (member.isAssigned) { type = member.startType; } //var port = AddOutputFlowPort( new PortData() { portID = "values#" + x, getPortName = () => x.ToString(), getPortType = () => type, getPortValue = () => node.targetNodes[x], onValueChanged = (val) => { node.targetNodes[x] = val as MemberData; }, } ); ControlView controlType = new ControlView(); controlType.Add(new Label(x.ToString())); controlType.Add(new MemberControl( new ControlConfig() { owner = this, type = typeof(MemberData), value = member, onValueChanged = (obj) => { node.values[x] = obj as MemberData; }, filter = filter, }, true )); AddControl(Direction.Input, controlType); //port.SetControl(controlType); } ControlView control = new ControlView(); control.style.alignSelf = Align.Center; control.Add(new Button(() => { if (node.values.Count > 0) { RegisterUndo(); node.values.RemoveAt(node.values.Count - 1); node.targetNodes.RemoveAt(node.targetNodes.Count - 1); MarkRepaint(); } }) { text = "-" }); control.Add(new Button(() => { RegisterUndo(); node.values.Add(new MemberData(ReflectionUtils.CreateInstance(node.target.type))); node.targetNodes.Add(null); MarkRepaint(); }) { text = "+" }); AddControl(Direction.Input, control); { //Default var member = node.defaultTarget; Type type = typeof(object); if (member.isAssigned) { type = member.startType; } AddOutputFlowPort( new PortData() { portID = "default", getPortName = () => "Default", getPortType = () => type, getPortValue = () => node.defaultTarget, onValueChanged = (val) => { node.defaultTarget = val as MemberData; }, } ); } AddOutputFlowPort("onFinished", "Next"); }