public void OnConnectionDragging(Point currentDragPoint, ConnectionViewModel connection) { // If current drag point is close to an input connector, show its snapped position. ConnectorViewModel nearbyConnector = null; if (connectingTo) { nearbyConnector = FindNearbyInputConnector(connection, currentDragPoint); } else { nearbyConnector = FindNearbyOutputConnector(connection, currentDragPoint); } Point pnt = (nearbyConnector != null) ? nearbyConnector.Position : currentDragPoint; if (connectingTo) { connection.ToPosition = pnt; } else { connection.FromPosition = pnt; } }
public ConnectionViewModel OnConnectionDragStarted(ConnectorViewModel sourceConnector, Point currentDragPoint) { if (sourceConnector is OutputConnectorViewModel) { connectingTo = true; var connection = new ConnectionViewModel((OutputConnectorViewModel)sourceConnector) { ToPosition = currentDragPoint }; Connections.Add(connection); return(connection); } else if (sourceConnector is InputConnectorViewModel) { connectingTo = false; var connection = new ConnectionViewModel((InputConnectorViewModel)sourceConnector) { FromPosition = currentDragPoint }; Connections.Add(connection); return(connection); } return(null); }
private OutputConnectorViewModel FindNearbyOutputConnector(ConnectionViewModel connection, Point mousePosition) { return(Elements.SelectMany(x => x.OutputConnectors) .FirstOrDefault(x => AreClose(x.Position, mousePosition, 10))); }
public void OnConnectionDragCompleted(Point currentDragPoint, ConnectionViewModel newConnection, ConnectorViewModel sourceConnector) { var fromNewConnection = (QuestViewModel)(newConnection.From?.Element); var toNewConnection = (QuestViewModel)(newConnection.To?.Element); newConnection.Detach(); Connections.Remove(newConnection); CurrentDragPoint = currentDragPoint; if (connectingTo) { var nearbyConnector = FindNearbyInputConnector(newConnection, currentDragPoint); if (nearbyConnector == null) { var quest = picker.ChooseQuest(); if (quest == null) { return; } var q = new Quest(quest.Id, quest.Title); UseCurrentDragPoint = true; bool added = quests.AddQuest(q); UseCurrentDragPoint = false; if (added) { q.RequiredQuests.Add(fromNewConnection.quest); } return; } if (nearbyConnector == null || sourceConnector.Element == nearbyConnector.Element) { return; } var to = ((QuestViewModel)nearbyConnector.Element).quest; var from = fromNewConnection.quest; to.RequiredQuests.Add(from); } else { var nearbyConnector = FindNearbyOutputConnector(newConnection, currentDragPoint); if (nearbyConnector == null) { var quest = picker.ChooseQuest(); if (quest == null) { return; } var q = new Quest(quest.Id, quest.Title); UseCurrentDragPoint = true; bool added = quests.AddQuest(q); UseCurrentDragPoint = false; if (added) { toNewConnection.quest.RequiredQuests.Add(q); } return; } if (nearbyConnector == null || sourceConnector.Element == nearbyConnector.Element) { return; } var to = toNewConnection.quest; var from = ((QuestViewModel)nearbyConnector.Element).quest; to.RequiredQuests.Add(from); } }