public QuadNode(Rectangle rect, List <ISelectableObject> objects, string id) { X = rect.X; Y = rect.Y; Width = rect.Width; Height = rect.Height; Id = id; var boudingRect = BoudingRect; Objects = new List <ISelectableObject>(); foreach (GameObject obj in objects) { if (!obj.Active) { continue; } var objRect = obj.BoudingRect; if (objRect.IntersectsWith(boudingRect)) { Objects.Add(obj); } } if (Width / 2 > MinimunSize && Objects.Count > 0) { var rtl = new Rectangle(X, Y, Width / 2, Height / 2); var rtr = new Rectangle(X + Width / 2, Y, Width / 2, Height / 2); var rbl = new Rectangle(X, Y + Height / 2, Width / 2, Height / 2); var rbr = new Rectangle(X + Width / 2, Y + Height / 2, Width / 2, Height / 2); TL = new QuadNode(rtl, Objects, id + "1"); TR = new QuadNode(rtr, Objects, id + "2"); BL = new QuadNode(rbl, Objects, id + "3"); BR = new QuadNode(rbr, Objects, id + "4"); Objects.Clear(); } }