public void AddBody(Circle *body) { if (body == null) { return; } if (_childA != null) { _bodyCount++; var child = GetQuadrant(body->pos); child->AddBody(body); } else { if (_bodies == null) { _bodies = QuadTreeFactory.AllocPtrBlock(_maxBodiesPerNode); } CheckDebugInfo($"AddBody{body->Id}"); fixed(QuadTree *thisPtr = &this) { body->ParentNode = thisPtr; body->_debugId = this._debugId; } //CheckDebugInfo(body); _bodies[_bodyCount++] = body; if (_bodyCount >= _maxBodiesPerNode && _curLevel < _maxLevel && _bounds.width > 2) { CheckDebugInfo($"Split{body->Id}"); Split(); } } }
public void Clear() { CheckDebugInfo("Clear"); _parent = null; _bodyCount = 0; FreeTree(ref _childA); FreeTree(ref _childB); FreeTree(ref _childC); FreeTree(ref _childD); if (_bodies != null) { QuadTreeFactory.FreePtrBlock(_bodies, _maxBodiesPerNode); _bodies = null; } }