private void DrawGraphEdge(AbstractGraphEdge edge) { if (graphSceneComponents.HasEdgeComponent(edge)) { return; } EdgeComponent edgeComponent = new EdgeComponent(edge, graphScenePrefabs.InstantiateEdge()); graphSceneComponents.AddEdgeComponent(edgeComponent); NodeComponent startNode = graphSceneComponents.GetNodeComponent(edgeComponent.GetGraphEdge().GetStartGraphNode().GetId()); NodeComponent endNode = graphSceneComponents.GetNodeComponent(edgeComponent.GetGraphEdge().GetEndGraphNode().GetId()); if (endNode == null) { return; } SpringJoint spring = endNode.GetVisualComponent().GetComponent <SpringJoint> (); spring.connectedBody = startNode.GetVisualComponent().GetComponent <Rigidbody> (); // checking if there is any other edge connecting the same nodes long sameNodeConnections = 0; graphSceneComponents.AcceptEdge(existingEdgeComponent => { AbstractGraphEdge existingEdge = existingEdgeComponent.GetGraphEdge(); AbstractGraphNode existingStartNode = existingEdge.GetStartGraphNode(); AbstractGraphNode existingEndNode = existingEdge.GetEndGraphNode(); if ( existingStartNode.GetId() == startNode.GetGraphNode().GetId() && existingEndNode.GetId() == endNode.GetGraphNode().GetId() || existingStartNode.GetId() == endNode.GetGraphNode().GetId() && existingEndNode.GetId() == startNode.GetGraphNode().GetId() ) { sameNodeConnections = sameNodeConnections + 1; } }); if (sameNodeConnections > 1) { edgeComponent.MultiEdge = true; } }
public void AddEdgeComponent(EdgeComponent edgeComponent) { AbstractGraphEdge edge = edgeComponent.GetGraphEdge(); NodeComponent edgeStartNode = GetNodeComponent(edge.GetStartGraphNode().GetId()); if (edgeStartNode == null) { Debug.Log("Unable to find start node component."); return; } NodeComponent edgeEndNode = GetNodeComponent(edge.GetEndGraphNode().GetId()); if (edgeEndNode == null) { Debug.Log("Unable to find end node component."); return; } edgeComponents.Add(edgeComponent); edgeComponent.UpdateGeometry(edgeStartNode.GetVisualComponent().transform.position, edgeEndNode.GetVisualComponent().transform.position); }