/// <summary> /// Connects all adjacent nodes. Adjacencies are defined by the injected IDirectionsInfoContainer /// which describes the directions in which the IGraphNodes can be connected, and the X and Y /// offsets that each human-friendly direction defines in terms of a grid. Grid/graph boundaries are /// determined by null adjacent IGraphNodes. /// </summary> private void ConnectAllNodes() { for (int x = 0; x <= _upperRightCoordinateBoundary.CoordinatesX; x++) { for (int y = 0; y <= _upperRightCoordinateBoundary.CoordinatesY; y++) { IGraphNode currentNode = _graphData[x.ToString() + y]; foreach (IDirectionsInformation directionsInformation in _directionsInfoContainer.DirectionsInformation.Values) { int xTotal = currentNode.XCoord + directionsInformation.XOffset; int yTotal = currentNode.YCoord + directionsInformation.YOffset; if (xTotal < 0 || xTotal > _upperRightCoordinateBoundary.CoordinatesX) { currentNode.PutAdjacentNode(_directionsInfoContainer.GetDirectionInteger(directionsInformation.Name), null); } else if (yTotal < 0 || yTotal > _upperRightCoordinateBoundary.CoordinatesY) { currentNode.PutAdjacentNode(_directionsInfoContainer.GetDirectionInteger(directionsInformation.Name), null); } else { currentNode.PutAdjacentNode( _directionsInfoContainer.GetDirectionInteger(directionsInformation.Name), _graphData[xTotal.ToString() + yTotal]); } } } } }