DynamicQuadtree.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #pragma once
  2. #include "Quadtree.h"
  3. namespace ltbl {
  4. class DynamicQuadtree : public Quadtree {
  5. private:
  6. void expand();
  7. void contract();
  8. public:
  9. size_t _minOutsideRoot;
  10. size_t _maxOutsideRoot;
  11. DynamicQuadtree()
  12. : _minOutsideRoot(1), _maxOutsideRoot(8)
  13. {}
  14. DynamicQuadtree(const sf::FloatRect &rootRegion)
  15. : _minOutsideRoot(1), _maxOutsideRoot(8)
  16. {
  17. _pRootNode = std::unique_ptr<QuadtreeNode>(new QuadtreeNode(rootRegion, 0, nullptr, this));
  18. }
  19. void create(const sf::FloatRect &rootRegion) {
  20. _pRootNode = std::unique_ptr<QuadtreeNode>(new QuadtreeNode(rootRegion, 0, nullptr, this));
  21. }
  22. // Inherited from Quadtree
  23. void add(QuadtreeOccupant* oc);
  24. void clear() {
  25. _pRootNode.reset();
  26. }
  27. // Resizes Quadtree
  28. void trim();
  29. bool created() const {
  30. return _pRootNode != nullptr;
  31. }
  32. const sf::FloatRect &getRootRegion() const {
  33. return _pRootNode->getRegion();
  34. }
  35. };
  36. }