#pragma once #include #include #include #include namespace easy2d { class Node; enum class SpatialStrategy { Auto, QuadTree, SpatialHash }; struct SpatialQueryResult { Node* node; Rect bounds; }; class ISpatialIndex { public: virtual ~ISpatialIndex() = default; virtual void insert(Node* node, const Rect& bounds) = 0; virtual void remove(Node* node) = 0; virtual void update(Node* node, const Rect& newBounds) = 0; virtual std::vector query(const Rect& area) const = 0; virtual std::vector query(const Vec2& point) const = 0; virtual std::vector> queryCollisions() const = 0; virtual void clear() = 0; virtual size_t size() const = 0; virtual bool empty() const = 0; virtual void rebuild() = 0; }; using SpatialIndexPtr = std::unique_ptr; }