コード例 #1
0
    void OnDrawGizmos()
    {
        if (!InPlaymode)
        {
            return;
        }
        Point[] points = new Point[2000];



        Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        QuadTree.Rectangle rect = new QuadTree.Rectangle(mousePosition, Vector2.one);
        QuadTree.Rectangle.Draw(rect);
        int amount = 0;

        quadTree.query(rect, ref points, ref amount);

        QuadTree.Draw(quadTree);
        Gizmos.color = Color.red;
        for (int i = 0; i < points.Length; i++)
        {
            Gizmos.DrawCube(points[i].position, Vector2.one * 0.1f);
        }
        print("quadtree points:   " + points.Length);
        points = new Point[2000];
        amount = 0;
        quadTree.query(quadTree.boundary, ref points, ref amount);

        print("mouse rect points" + points.Length);
    }
コード例 #2
0
 // Use this for initialization
 void Start()
 {
     rect = new QuadTree.Rectangle(-4, 0, 0.5f, 0.5f);
     GeneratePoints();
     QuadTree.Rectangle r = new QuadTree.Rectangle(0, 0, 5, 5);
     tree = new QuadTree(r, quadtreequality);
     for (int i = 0; i < points.Count; i++)
     {
         Point p = new Point(i, points[i]);
         tree.insert(p);
     }
 }
コード例 #3
0
    void Start()
    {
        InPlaymode = true;
        Camera  cam     = Camera.main;
        Vector2 camPos  = cam.transform.position;
        float   height  = cam.orthographicSize;
        float   width   = cam.aspect * height;
        Vector2 camSize = new Vector2(width, height);



        QuadTree.Rectangle rect = new QuadTree.Rectangle(Vector2.zero, camSize);
        quadTree = new QuadTree(rect, 1);
    }
コード例 #4
0
    public Vector2 GetVector(Vector2 point)
    {
        QuadTree.Rectangle rect = new QuadTree.Rectangle(point, new Vector2(distanceBetweenPointsX + 0.01f, distanceBetweenPointsY + 0.01f));
        amount = 0;
        Point[] nearest = quadTree.query(rect, ref amount);
        int     x       = -1;
        float   lowest  = 1000000;

        for (int i = 0; i < nearest.Length; i++)
        {
            float dist = Vector2.SqrMagnitude(nearest[i].position - point);
            if (dist < lowest)
            {
                lowest = dist;
                x      = i;
            }
        }
        Vector2Int vec = new Vector2Int(nearest[x].index % ySize, nearest[x].index / ySize);

        return(GenerateVector(nearest[x].index % ySize, nearest[x].index / ySize));
    }
コード例 #5
0
    void PackQuadTree()
    {
        QuadTree.Rectangle rect = new QuadTree.Rectangle(Vector2.zero + offSet, new Vector2(flowfieldSize.x / 2, flowfieldSize.x / 2));
        quadTree = new QuadTree(rect, 5);
        int rows = vectors.GetLength(1);

        collArr = new Collider2D[5];
        int amount = 0;

        for (int i = 0; i < vectors.GetLength(0); i++)
        {
            for (int j = 0; j < vectors.GetLength(1); j++)
            {
                // Collider2D col = Physics2D.OverlapPoint(vectors[i, j], wallLayer);
                // if (col != null)
                // {
                Point point = new Point(i + ySize * j, vectors[i, j]);
                quadTree.insert(point);
                // }
            }
        }
    }
コード例 #6
0
    // boids keep a distance to eachother
    void Rule2()
    {
        int   amount         = 0;
        float x              = 0;
        float y              = 0;
        float seperationRect = seperation * 2;

        for (int i = 0; i < amountOfUnits; i++)
        {
            amount = 0;
            x      = units[i].x;
            y      = units[i].y;
            QuadTree.Rectangle rect   = new QuadTree.Rectangle(x, y, seperationRect, seperationRect);
            Point[]            nearby = tree.query(rect, ref amount);
            for (int j = 0; j < amount; j++)
            {
                if (i != nearby[j].index)
                {
                    units[i].x -= Push(units[i].x, nearby[j].position.x, seperation);
                    units[i].y -= Push(units[i].y, nearby[j].position.y, seperation);
                }
            }
        }
    }