public override void OnClick(Node source, Vector2 mousePosition) { MultipurposeNode node = source as MultipurposeNode; NodeEditorUtility.AddNewNode(graph.editorData, null, null, mousePositionOnCanvas, (ConditionNode n) => { n.Condition.AddBlockRange(BlockUtility.GetConditionBlockFromNode(source)); n.editorRect = node.editorRect; RefactorUtility.RetargetNode(node, n); }); NodeEditorUtility.RemoveNode(graph.editorData, node); graph.Refresh(); }
public override bool IsValidNode(Node source) { if (source is MultipurposeNode) { MultipurposeNode node = source as MultipurposeNode; if (node.CanGetValue() && node.ReturnType() == typeof(bool)) { if (node.IsFlowNode()) { var nodes = NodeEditorUtility.FindConnectedNodeToFlowNode(node); if (nodes.Count > 0) { return(false); } } return(true); } } return(false); }
protected override void InitializeView() { base.InitializeView(); MultipurposeNode node = targetNode as MultipurposeNode; if (UIElementGraph.richText && richTitle == null) { richTitle = new RichLabel { name = "title-label" }; titleContainer.Insert(titleContainer.IndexOf(titleIcon) + 1, richTitle); } if (richTitle != null) { titleContainer.AddToClassList("rich-title"); title = ""; richTitle.text = uNodeUtility.GetNicelyDisplayName(node.target.target, uNodeUtility.preferredDisplay, true); m_Title = uNodeEditorUtility.RemoveHTMLTag(richTitle.text); } isCompact = false; EnableInClassList("compact", false); EnableInClassList("compact-value", false); if (nodeFlowPort != null || outputControls.Count != 0) { if (uNodeUtility.preferredDisplay == DisplayKind.Partial) { ConstructCompactTitle(); } return; } if (inputControls.Count == 0) { int valueOutputCount = outputPorts.Count(x => x.orientation == Orientation.Horizontal); int valueInputCount = inputPorts.Count(x => x.orientation == Orientation.Horizontal); if (valueOutputCount == 1 && valueInputCount == 0) { isCompact = true; EnableInClassList("compact", true); if (nodeValuePort != null) { nodeValuePort.SetName(""); } } } else if (inputControls.Count > 0 && node.target.target.targetType == MemberData.TargetType.Values) { isCompact = true; ControlView control = inputControls.First(); if (control.control as MemberControl != null) { var config = control.control.config; if (config.filter != null) { config.filter.ValidTargetType = MemberData.TargetType.Values; } if (config.type == typeof(string)) { control.control.AddToClassList("multiline"); control.style.height = new StyleLength(StyleKeyword.Auto); control.style.flexGrow = 1; } (control.control as MemberControl).UpdateControl(); } if (inputControls.Count == 1) { EnableInClassList("compact-value", true); if (nodeValuePort != null) { nodeValuePort.SetName(""); } } } if (isCompact && nodeValuePort != null) { Color c = uNodePreference.GetColorForType(nodeValuePort.GetPortType()); c.a = 0.8f; elementTypeColor = c; if (UIElementUtility.Theme.coloredNodeBorder) { border.style.SetBorderColor(c); } } else if (uNodeUtility.preferredDisplay == DisplayKind.Partial) { ConstructCompactTitle(); if (nodeValuePort != null) { EnableInClassList("compact-title", true); Color c = uNodePreference.GetColorForType(nodeValuePort.GetPortType()); c.a = 0.8f; elementTypeColor = c; if (UIElementUtility.Theme.coloredNodeBorder) { border.style.SetBorderColor(c); } } } }
public override void OnClick(Node source, Vector2 mousePosition) { var rType = source.ReturnType(); FilterAttribute filter = new FilterAttribute { VoidType = true, MaxMethodParam = int.MaxValue, Public = true, Instance = true, Static = false, UnityReference = false, InvalidTargetType = MemberData.TargetType.Null | MemberData.TargetType.Values, // DisplayDefaultStaticType = false ValidateMember = (member) => { if (member is System.Reflection.MethodInfo) { var parameters = (member as System.Reflection.MethodInfo).GetParameters(); for (int i = 0; i < parameters.Length; i++) { if (rType.IsCastableTo(parameters[i].ParameterType)) { return(true); } } } return(false); }, }; List <ItemSelector.CustomItem> customItems = null; if (rType.IsCastableTo(typeof(IGraphSystem)) && source is MultipurposeNode) { MultipurposeNode multipurposeNode = source as MultipurposeNode; if (multipurposeNode.target != null && multipurposeNode.target.target != null && (multipurposeNode.target.target.targetType == MemberData.TargetType.SelfTarget || multipurposeNode.target.target.targetType == MemberData.TargetType.Values)) { var sTarget = multipurposeNode.target.target.startTarget; if (sTarget is IGraphSystem) { customItems = ItemSelector.MakeCustomItems(sTarget as Object); customItems.AddRange(ItemSelector.MakeCustomItems(typeof(uNodeRoot), sTarget, filter, "Inherit Member")); } } } bool flag = false; if (customItems == null) { if (rType is RuntimeType) { customItems = ItemSelector.MakeCustomItems((rType as RuntimeType).GetRuntimeMembers(), filter); if (rType.BaseType != null) { customItems.AddRange(ItemSelector.MakeCustomItems(rType.BaseType, filter, "Inherit Member")); } } else { customItems = ItemSelector.MakeCustomItems(rType, filter, " " + rType.PrettyName()); } var usedNamespaces = source.owner.GetNamespaces().ToHashSet(); if (usedNamespaces != null) { customItems.AddRange(ItemSelector.MakeExtensionItems(rType, usedNamespaces, filter, "Extensions")); flag = true; } var customInputItems = NodeEditorUtility.FindCustomInputPortItems(); if (customInputItems != null && customInputItems.Count > 0) { var mData = new MemberData(source, MemberData.TargetType.ValueNode); foreach (var c in customInputItems) { c.graph = graph; c.mousePositionOnCanvas = mousePositionOnCanvas; if (c.IsValidPort(rType, PortAccessibility.OnlyGet)) { var items = c.GetItems(source, mData, rType); if (items != null) { customItems.AddRange(items); } } } } } if (customItems != null) { filter.Static = false; customItems.Sort((x, y) => { if (x.category != y.category) { return(string.Compare(x.category, y.category)); } return(string.Compare(x.name, y.name)); }); ItemSelector w = ItemSelector.ShowWindow(source, MemberData.none, filter, delegate(MemberData value) { flag = flag && value.targetType == MemberData.TargetType.Method && !rType.IsCastableTo(value.startType); if (!flag && !value.isStatic) { value.instance = new MemberData(source, MemberData.TargetType.ValueNode); } NodeEditorUtility.AddNewNode(graph.editorData, null, null, mousePositionOnCanvas, delegate(MultipurposeNode n) { if (n.target == null) { n.target = new MultipurposeMember(); } n.target.target = value; MemberDataUtility.UpdateMultipurposeMember(n.target); if (flag) { var pTypes = value.ParameterTypes; if (pTypes != null) { int paramIndex = 0; MemberData param = null; for (int i = 0; i < pTypes.Length; i++) { var types = pTypes[i]; if (types != null) { for (int y = 0; y < types.Length; y++) { if (rType.IsCastableTo(types[y])) { param = new MemberData(source, MemberData.TargetType.ValueNode); break; } paramIndex++; } if (param != null) { break; } } } if (n.target.parameters.Length > paramIndex && param != null) { n.target.parameters[paramIndex] = param; } } } }); graph.Refresh(); }, customItems).ChangePosition(GUIUtility.GUIToScreenPoint(mousePosition)); w.displayRecentItem = false; w.displayNoneOption = false; } }