Beispiel #1
0
    // Find a path between two vertexes
    public void FindPath(Vertex <string> FromVertex, Vertex <string> ToVertext)
    {
        Debug.LogWarning("FromVertex Data: " + FromVertex.Data);
        Debug.LogWarning("ToVertex Data: " + ToVertext.Data);
        videoQueue.Clear();
        Graph <string> pathGraph = GraphAlgorithms.DijkstrasAlgorithm <string>(videoGraph, FromVertex);
        var            endVertex = pathGraph.GetVertex(ToVertext.Data);

        pathQueue.Clear();
        pathQueue.Enqueue(ToVertext.Data);
        string fromVertexID = FromVertex.Data;
        string nextVertexID = null;
        var    nextVertex   = endVertex;

        while (nextVertexID != fromVertexID)
        {
            nextVertexID = nextVertex.IncidentEdges[0].FromVertex.Data;
            if (nextVertexID == nextVertex.Data)
            {
                nextVertexID = nextVertex.IncidentEdges[1].FromVertex.Data;
            }
            pathQueue.Enqueue(nextVertexID);
            Debug.LogWarning("next vertex: " + nextVertexID);
            nextVertex = pathGraph.GetVertex(nextVertexID);
        }

        var pathQueueSize = pathQueue.Count;

        List <string>[] tmpList  = new List <string> [pathQueueSize];
        var             pathlist = pathQueue.ToList();

        for (int i = pathlist.Count - 1; i > 0; i--)
        {
            Debug.LogWarning("path list i: " + pathlist[i]);
            var list0 = databaseControl.GetVideoList(pathlist[i]);
            Debug.LogWarning("path list i-1: " + pathlist[i - 1]);
            var list1   = databaseControl.GetVideoList(pathlist[i - 1]);
            var commons = list0.Intersect(list1);
            Debug.LogWarning(commons.FirstOrDefault());
            Debug.LogWarning("videoQueue size: " + videoQueue.Count);
            string playInfo = databaseControl.GetPlayInfo(pathlist[i], pathlist[i - 1], commons.FirstOrDefault());
            videoQueue.Enqueue(playInfo);
        }


        reviewMode = false;
        StopAllCoroutines();
        currentFrameList.Clear();
        StartCoroutine(SetLoadFramesForNavigation(videoQueue));
        playNavigationMode = true;
    }