protected virtual void OnMenu() { if (ReadOnly) { return; } if (Selecteds.Count == 0) { var dropDown = new StateNodeCreatDropdown(this, StateNodeRef.Empty, false, false); dropDown.Show(new Rect(Canvas.MouseInView, new Vector2(250, 20))); return; } var menu = new GenericMenu(); int copyCount = Selecteds.Count(it => Graph.CheckCopy(it.Node)); AddMenuItem(menu, "复制", copyCount > 0, CopyNodes); AddMenuItem(menu, "粘贴", StateNodeClipboard.Clipboard.ContainsKey(Graph.GetType()), PasteFromClipboard); AddMenuItem(menu, "Duplicate", copyCount > 0, () => Duplicate()); menu.AddSeparator(""); AddMenuItem(menu, "删除", Graph.CheckDelete(Selecteds[0]), () => DeleteSelectedNode()); if (Selecteds.Count == 1) { menu.AddSeparator(""); var node = Selecteds[0]; AddMenuItem(menu, "替换", VaildTypes.Count(it => Graph.CheckReplace(node.Node.NodeType, it)) > 0, () => { var dropDown = new StateNodeReplaceDropdown(this, node); dropDown.Show(new Rect(Canvas.MouseInView, new Vector2(250, 0))); }); if (Graph.IsStack(node.Node)) { AddMenuItem(menu, "清空组", Graph.Links.Exists(it => it.IsChild && it.From == node), () => BreakChildLink(node)); } else { menu.AddSeparator(""); if (!node.Node.Parent) { menu.AddItem(new GUIContent("反转"), node.Node.Reversal, () => SetNodeReversal(node.Node, !node.Node.Reversal)); } } AddMenuItem(menu, "选中同类型节点", true, SelectSameType); } menu.ShowAsContext(); }
public void OnDragEnd(StateGraphView view, Vector2 ptInWorld) { var currNode = view.HitTest(ptInWorld); if (currNode == node) { if (!isChild) { return; } currNode = null; } if (currNode != null) { StateNode from; StateNode to; if (isOut) { from = node.Node; to = currNode; } else { to = node.Node; from = currNode; } view.CreateLink(from, to, isChild); view.SelectNode(currNode); } else { //此处弹出创建节点下拉窗口 StateNodeCreatDropdown dropDown = new StateNodeCreatDropdown(view, node, isOut, isChild); dropDown.Show(new Rect(view.Canvas.MouseInView, new Vector2(250, 0))); } }