public void traverse(ObjectDelegate del, List <QuadNode> queue, bool movementChange) { for (int a = 0; a < dict.Count; a++) { InPlay obj = dict.ElementAt(a); del(obj); if (movementChange && !AdditionalMath.contains(Area, obj.getRekt())) { if (parent != null) { dict.Remove(obj); parent.add(obj); } } for (int x = 0; x < 2; x++) { for (int y = 0; y < 2; y++) { if (movementChange && AdditionalMath.contains(innerQuads[x, y], obj.getRekt())) { if (children[x, y] == null) { children[x, y] = new QuadNode(this, innerQuads[x, y], minimum, quadLevel + 1); } children[x, y].add(obj); dict.Remove(obj); } } } } for (int x = 0; x < 2; x++) { for (int y = 0; y < 2; y++) { if (children[x, y] != null) { queue.Add(children[x, y]); } } } }
public QuadNode(QuadNode daddy, RectangleF area, double min, int nome) { quadLevel = nome; minimum = min; parent = daddy; innerQuads[0, 0] = (new RectangleF(0, area.Height, area.Width / 2, area.Height / 2)); innerQuads[0, 1] = (new RectangleF(area.Width / 2, area.Height, area.Width / 2, area.Height / 2)); innerQuads[1, 0] = (new RectangleF(0, area.Height / 2, area.Width / 2, area.Height / 2)); innerQuads[1, 1] = (new RectangleF(area.Width / 2, area.Height / 2, area.Width / 2, area.Height / 2)); /*if((area.Height/2) * (area.Width / 2) < min) * { * for (int x = 0; x < 2; x++) * { * for (int y = 0; y < 2; y++) * { * children[x, y] = new QuadNode(this, innerQuads[x, y], minimum); * } * } * }*/ Area = area; }
public QuadTree(RectangleF screen, int minimumDepth) { wholeArea = screen; rootNode = new QuadNode(null, wholeArea, minimumDepth, 1, "root"); }
public void quadCollisions(QuadNode node) { node.collisions(); }