Ejemplo n.º 1
0
    public List <TransportRouteElement> FindPath(TransportVehicleData transportVehicleData,
                                                 List <TransportRouteElement> transportRouteElements)
    {
        AbstractPathFindingAlgorithm _pathFinder = _pathFindingAlgorithms[transportVehicleData.PathType];

        foreach (TransportRouteElement transportRouteElement in transportRouteElements)
        {
            IPathNode pathNode = transportRouteElement.FromNode as IPathNode;
            Path      path;
            if (pathNode != null)
            {
                path = pathNode.PathTo(transportRouteElement.ToNode);
                if (path == null)
                {
                    path = _pathFinder.FindPath(transportRouteElement.FromNode, transportRouteElement.ToNode);
                    pathNode.AddPath(transportRouteElement.ToNode, path);
                }
            }
            else
            {
                path = _pathFinder.FindPath(transportRouteElement.FromNode, transportRouteElement.ToNode);
            }
            transportRouteElement.Path = path;
        }
        return(transportRouteElements);
    }