public override void OnMouseDown(Event e, Vector2 mouseWorldPos) { if (e.button == 2) { return; } if (!e.control) { selectNodes.Clear(); } for (int i = Graph.Nodes.Count - 1; i >= 0; --i) { var node = Graph.Nodes[i]; if (node.Bounds.Contains(mouseWorldPos)) { GraphNodeRef nodeRef = node; if (!e.control) { selectNodes.Add(nodeRef); break; } if (selectNodes.Contains(nodeRef)) { selectNodes.Remove(nodeRef); } else { selectNodes.Add(nodeRef); } } } }
protected bool BreakLinkToParent(GraphNodeRef node) { var link = Links.Find(obj => obj.To == node); if (link != null) { link.From.Node.ChildCount--; Links.Remove(link); return(true); } return(false); }
public virtual bool DeleteNode(GraphNodeRef node) { if (!node || node.Node.Graph != this || node.Node.IsRoot) { return(false); } Undo.RegisterCompleteObjectUndo(this, "delete node"); Nodes.RemoveAll(obj => obj.GUID == node.GUID); BreakLinkToParent(node); Links.RemoveAll(obj => obj.From == node); return(true); }
protected bool CheckNodeParentInList(GraphNodeRef node, List <GraphNodeRef> nodes) { var parent = Graph.GetParent(node.Node); if (!parent) { return(false); } if (nodes.Contains(parent)) { return(true); } return(CheckNodeParentInList(parent, nodes)); }
public void Reset() { Nodes.Clear(); Parent = GraphNodeRef.Empty; Index = -1; }