Search Unity

NGenerics and Unity graph data structure usage?

Discussion in 'Scripting' started by pretender, Jun 13, 2014.

  1. pretender

    pretender

    Joined:
    Mar 6, 2010
    Posts:
    865
    Hi! I am trying to use NGenerics and one of its data structure - Graphs

    Here is what i am trying (create a graph with Vertex<Transform> type and find the shortest path from the first node - it always returns 0,1,2…9 sequence):

    Code (CSharp):
    1. for (int i = 0; i < 10; i++)
    2.         {
    3.             pos.Add(i, new Vector3(UnityEngine.Random.Range(0f, 10f), UnityEngine.Random.Range(0f, 10f), UnityEngine.Random.Range(0f, 10f)));
    4.         }
    5.  
    6.         var graph = new Graph<Transform>(true);
    7.         foreach (KeyValuePair<int,Vector3> kvp in pos)
    8.         {
    9.             GameObject _g = GameObject.CreatePrimitive(PrimitiveType.Sphere);
    10.             _g.transform.position = kvp.Value;
    11.             _g.name = kvp.Key.ToString();
    12.             graph.AddVertex(_g.transform);
    13.         }
    14.  
    15.         Dictionary<int,Vertex<Transform>> verts = new Dictionary<int, Vertex<Transform>>();
    16.  
    17.         int index = 0;
    18.         foreach (Vertex<Transform> v in graph.Vertices)
    19.         {
    20.             verts.Add(index, v);
    21.             index++;
    22.         }
    23.  
    24.         graph.AddEdge(verts[0], verts[1],UnityEngine.Random.Range(0f,10f));
    25.         graph.AddEdge(verts[0], verts[9],UnityEngine.Random.Range(0f,10f));
    26.         graph.AddEdge(verts[1], verts[0],UnityEngine.Random.Range(0f,10f));
    27.         graph.AddEdge(verts[1], verts[2],UnityEngine.Random.Range(0f,10f));
    28.         graph.AddEdge(verts[1], verts[9],UnityEngine.Random.Range(0f,10f));
    29.         graph.AddEdge(verts[2], verts[3],UnityEngine.Random.Range(0f,10f));
    30.         graph.AddEdge(verts[3], verts[4],UnityEngine.Random.Range(0f,10f));
    31.         graph.AddEdge(verts[4], verts[1],UnityEngine.Random.Range(0f,10f));
    32.         graph.AddEdge(verts[4], verts[2],UnityEngine.Random.Range(0f,10f));
    33.         graph.AddEdge(verts[4], verts[9],UnityEngine.Random.Range(0f,10f));
    34.  
    35.         var g = GraphAlgorithms.DijkstrasAlgorithm(graph, verts[9]);
    36.  
    37.         foreach (Vertex<Transform> v in g.Vertices)
    38.         {
    39.             Debug.Log("path: " + v.Data.name + " count: " + g.Vertices.Count);
    40.         }
     
  2. Ben-BearFish

    Ben-BearFish

    Joined:
    Sep 6, 2011
    Posts:
    1,204
    Were you able to solve this problem? I seem to be having a similar issue. I find the NGenerics library to be very poorly documented.
     
  3. pretender

    pretender

    Joined:
    Mar 6, 2010
    Posts:
    865
    Unfortunately no! It seems that I am missing something clearly and there is nobody who can point me in the right direction!

    This library is good, you can find some info in unit tests on how to use some of the structures but beyond that nothing much.

    I would like to find a solution for this though, if you figure out something let me know, thanks!