OmniaFramework/Release/include/ostd/QuadTree.hpp
2023-12-28 01:33:40 +01:00

47 lines
1.1 KiB
C++

#ifndef __QUAD_TREE_HPP__
#define __QUAD_TREE_HPP__
#include <ostd/BaseObject.hpp>
#include <ostd/Geometry.hpp>
#include <ostd/Defines.hpp>
#include <vector>
#include <memory>
namespace ostd
{
class QuadTree : public BaseObject
{
public: struct tElement
{
Vec2 pos;
void* data;
tElement(void);
tElement(Vec2 position, void* userData);
};
public:
inline QuadTree(void) : m_points(nullptr), m_sw(nullptr), m_nw(nullptr),
m_se(nullptr),m_ne(nullptr), m_subdivided(false),
m_capacity(0), m_currentSize(0)
{ invalidate(); }
inline QuadTree(Rectangle bounds, uint16_t capacity) { create(bounds, capacity); }
inline ~QuadTree(void) { destroy(); }
void destroy(void);
void create(Rectangle bounds, uint16_t capacity);
void subdivide(void);
bool insert(Vec2 point, void* data = nullptr);
void query(Rectangle range, std::vector<tElement*>& list);
private:
tElement* m_points;
uint16_t m_currentSize;
uint16_t m_capacity;
Rectangle m_bounds;
bool m_subdivided;
un_ptr(QuadTree) m_nw;
un_ptr(QuadTree) m_sw;
un_ptr(QuadTree) m_ne;
un_ptr(QuadTree) m_se;
};
}
#endif