public static bool HandleNodeInput(DragNode node, Event e, GraphCamera camera) { bool inputProcessed = false; var mousePosition = e.mousePosition; var mousePositionWorld = camera.ScreenToWorld(mousePosition); int dragButton = 0; // If the pins didn't already handle the input, then let the node handle it if (!inputProcessed) { bool insideRect = node.Bounds.Contains(mousePositionWorld); if (e.type == EventType.MouseDown && insideRect && e.button == dragButton) { node.IsDragging = true; inputProcessed = true; } else if (e.type == EventType.MouseUp && insideRect && e.button == dragButton) { node.IsDragging = false; } } if (node.IsDragging && !node.Selected) { node.IsDragging = false; } if (node.IsDragging && e.type == EventType.MouseDrag) { inputProcessed = true; } return(inputProcessed); }
bool SetSelectedState(DragNode node, bool selected) { bool stateChanged = (node.Selected != selected); node.Selected = selected; return(stateChanged); }
protected virtual void BringToFront(DragNode node) { /// to do list }
void HandleDrag(Event e) { int dragButton = 0; int rightButton = 2; if (e.button == rightButton && e.type == EventType.Layout) { foreach (var node in DragNodes()) { node.MoveNode(e.delta); } } if (draggingNodes) { if (e.type == EventType.MouseUp && e.button == dragButton) { draggingNodes = false; } else if (e.type == EventType.MouseDrag && e.button == dragButton) { // Drag all the selected nodes foreach (var node in DragNodes()) { if (node.Selected) { node.MoveNode(e.delta); } } } } else { // Check if we have started to drag if (e.type == EventType.MouseDown && e.button == dragButton) { // Find the node that was clicked below the mouse DragNode mouseOverNode = HoverNode; if (mouseOverNode != null && mouseOverNode.Selected) { draggingNodes = true; } } } DragNode hoverNode = HoverNode; if (hoverNode != null) { var mouseNode = (hoverNode as BTNode.BTNode); var commen = mouseNode.BtState.Notes; if (!string.IsNullOrEmpty(commen)) { var pos = mousePosition; EditorGUI.LabelField(new Rect(pos, new Vector2(100, 30)), commen); } } }
void HandleSelect(Event e) { // Update the node selected flag var buttonId = 0; if (e.type == EventType.MouseDown && e.button == buttonId) { bool multiSelect = keyboardState.ShiftPressed; bool toggleSelect = keyboardState.ControlPressed; // sort the nodes front to back DragNode[] sortedNodes = DragNodes(); // System.Array.Sort(sortedNodes, new NodeReversedZIndexComparer()); DragNode mouseOverNode = HoverNode; foreach (var node in sortedNodes) { var mouseOver = (node.Equals(mouseOverNode)); if (mouseOverNode != null && mouseOverNode.Selected && !toggleSelect) { // multiSelect = true; // select multi-select so that we can drag multiple objects } if (multiSelect || toggleSelect) { if (mouseOver && multiSelect) { node.Selected = true; } else if (mouseOver && toggleSelect) { node.Selected = !node.Selected; } } else { node.Selected = mouseOver; if (mouseOverNode != null) { OnSelectNode(mouseOverNode); } } if (node.Selected) { BringToFront(node); } } if (mouseOverNode == null) { // No nodes were selected Selection.activeObject = null; } OnNodeSelectionChanged(); } }
protected virtual void OnSelectNode(DragNode node) { node.OnSelected(); }
public abstract void OnClickNode(DragNode targetNode);