Example #1
0
    QuadStruct structFromQuadTree(QuadTree2 quad)
    {
        QuadStruct st = new QuadStruct();

        st.level    = quad.level;
        st.maxx     = quad.maxx; st.minx = quad.minx;
        st.maxz     = quad.maxz; st.minz = quad.minz;
        st.NE       = -1; st.NW = -1; st.SE = -1; st.SW = -1;
        st.distance = -1;
        st.index    = -1;
        st.parent   = -1;
        return(st);
    }
Example #2
0
    void populateStructList(QuadTree2 root)
    {
        Queue <QuadTree2> structQueue = new Queue <QuadTree2>();

        structQueue.Enqueue(root);
        int count = 0;

        while (structQueue.Count > 0)
        {
            QuadTree2 quad = structQueue.Dequeue();
            count++;
            if (quad == root)
            {
                count = 0;
            }
            quad.st       = structFromQuadTree(quad);
            quad.st.index = currentIndex++;
            if (quad.parent != null)
            {
                quad.st.parent = quad.parent.st.index;
                if (count == 4)
                {
                    int        parentIndex  = quad.parent.st.index;
                    QuadStruct parentStruct = structList[parentIndex];
                    parentStruct.NE         = quad.parent.a.st.index;
                    parentStruct.NW         = quad.parent.b.st.index;
                    parentStruct.SE         = quad.parent.c.st.index;
                    parentStruct.SW         = quad.parent.d.st.index;
                    structList[parentIndex] = parentStruct;
                    count = 0;
                }
            }
            structList.Add(quad.st);
            if (quad.a != null)
            {
                List <QuadTree2> children = new List <QuadTree2>();
                children.Add(quad.a); children.Add(quad.b);
                children.Add(quad.c); children.Add(quad.d);
                foreach (QuadTree2 child in children)
                {
                    structQueue.Enqueue(child);
                }
            }
        }
    }
Example #3
0
 void Start()
 {
     structList = new List <QuadStruct>();
     Init();
     populateStructList(QuadTree2.refTree);
     QuadStruct[] structs    = structList.ToArray();
     QuadStruct[] structPath = new QuadStruct[20];
     if (GPU)
     {
         calculateDistances(structs, structList.Count, pointer.transform.position.x, pointer.transform.position.z);
         createPath(structs, structPath);
     }
     else
     {
         calculateCosts(QuadTree2.refTree);
         path = getPath();
     }
 }
Example #4
0
 private static extern void createPath(QuadStruct[] quadsIn, QuadStruct[] quadsOut);
Example #5
0
 private static extern void calculateDistances(QuadStruct[] quads, int numberOfQuads, float startx, float starty);
Example #6
0
 QuadStruct structFromQuadTree(QuadTree2 quad)
 {
     QuadStruct st = new QuadStruct();
     st.level = quad.level;
     st.maxx = quad.maxx; st.minx = quad.minx;
     st.maxz = quad.maxz; st.minz = quad.minz;
     st.NE = -1; st.NW = -1; st.SE = -1; st.SW = -1;
     st.distance = -1;
     st.index = -1;
     st.parent = -1;
     return st;
 }
Example #7
0
    void Start()
    {
        structList = new List<QuadStruct>();
        Init();
        populateStructList(QuadTree2.refTree);
        QuadStruct[] structs = structList.ToArray();
        QuadStruct[] structPath = new QuadStruct[20];
        if (GPU) {
            calculateDistances(structs, structList.Count, pointer.transform.position.x, pointer.transform.position.z);
            createPath(structs, structPath);

        } else {
            calculateCosts(QuadTree2.refTree);
            path = getPath();
        }
    }