public void Remove(QuadItem <T> item) { var quad = item.__root; quad.items.Remove(item); item.__root = null; quad.Merge(); }
public void Insert(QuadItem <T> item) { var quad = this; while (true) { if (!quad.hasSplit) { break; } var quadrant = quad.GetQuadrant(item.range); if (quadrant == -1) { break; } quad = quad.branches[quadrant]; } item.__root = quad; quad.items.Add(item); quad.Split(); }
public void Update(QuadItem <T> item) { var oldQuad = item.__root; var newQuad = item.__root; while (true) { if (newQuad.root == null) { break; } newQuad = newQuad.root; if (Misc.FullyIntersects(newQuad.range, item.range)) { break; } } while (true) { if (!newQuad.hasSplit) { break; } var quadrant = newQuad.GetQuadrant(item.range); if (quadrant == -1) { break; } newQuad = newQuad.branches[quadrant]; } if (oldQuad == newQuad) { return; } oldQuad.items.Remove(item); newQuad.items.Add(item); item.__root = newQuad; oldQuad.Merge(); newQuad.Split(); }