public void Grow(Vector2 direction) { QuadTreeNode tempRoot = null; if (direction == new Vector2(1, 1)) { tempRoot = new QuadTreeNode(this, null, Root.AAR.Position + new Vector2(Root.AAR.Size.x / 2, Root.AAR.Size.y / 2), (Root.AAR.Size.x + Root.AAR.Size.y) / 2, Root.MinSize, 0); tempRoot.MeshObject.Children[0] = Root.MeshObject; } if (direction == new Vector2(-1, -1)) { tempRoot = new QuadTreeNode(this, null, Root.AAR.Position + new Vector2(-Root.AAR.Size.x / 2, -Root.AAR.Size.y / 2), (Root.AAR.Size.x + Root.AAR.Size.y) / 2, Root.MinSize, 0); tempRoot.MeshObject.Children[2] = Root.MeshObject; } if (direction == new Vector2(1, -1)) { tempRoot = new QuadTreeNode(this, null, Root.AAR.Position + new Vector2(Root.AAR.Size.x / 2, -Root.AAR.Size.y / 2), (Root.AAR.Size.x + Root.AAR.Size.y) / 2, Root.MinSize, 0); tempRoot.MeshObject.Children[1] = Root.MeshObject; } if (direction == new Vector2(-1, 1)) { tempRoot = new QuadTreeNode(this, null, Root.AAR.Position + new Vector2(-Root.AAR.Size.x / 2, Root.AAR.Size.y / 2), (Root.AAR.Size.x + Root.AAR.Size.y) / 2, Root.MinSize, 0); tempRoot.MeshObject.Children[3] = Root.MeshObject; } Root.DestroyGameObject(); Root = tempRoot; Root.ApplyValues(); }