Quadtree.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #pragma once
  2. #include <ltbl/quadtree/QuadtreeNode.h>
  3. #include <memory>
  4. #include <unordered_set>
  5. #include <list>
  6. #include <mutex>
  7. #include <thread>
  8. namespace ltbl {
  9. class QuadtreeOccupant;
  10. // Base class for dynamic and static Quadtree types
  11. class Quadtree {
  12. friend class QuadtreeOccupant;
  13. friend class QuadtreeNode;
  14. friend class SceneObject;
  15. protected:
  16. std::unordered_set<QuadtreeOccupant*> _outsideRoot;
  17. std::unique_ptr<QuadtreeNode> _pRootNode;
  18. // Called whenever something is removed, an action can be defined by derived classes
  19. // Defaults to doing nothing
  20. virtual void onRemoval() {}
  21. void setQuadtree(QuadtreeOccupant* oc);
  22. void recursiveCopy(QuadtreeNode* pThisNode, QuadtreeNode* pOtherNode, QuadtreeNode* pThisParent);
  23. public:
  24. size_t _minNumNodeOccupants;
  25. size_t _maxNumNodeOccupants;
  26. size_t _maxLevels;
  27. float _oversizeMultiplier;
  28. Quadtree();
  29. Quadtree(const Quadtree &other) {
  30. *this = other;
  31. }
  32. virtual ~Quadtree() {}
  33. void operator=(const Quadtree &other);
  34. virtual void add(QuadtreeOccupant* oc) = 0;
  35. void queryRegion(std::vector<QuadtreeOccupant*> &result, const sf::FloatRect &region);
  36. void queryPoint(std::vector<QuadtreeOccupant*> &result, const sf::Vector2f &p);
  37. void queryShape(std::vector<QuadtreeOccupant*> &result, const sf::ConvexShape &shape);
  38. };
  39. }