#ifndef HOLESOME_TRACKING_VIEW_H #define HOLESOME_TRACKING_VIEW_H #include "../game_object.h" #include "ITrackable.h" #include "../../primitives/circle_object.h" #include "tracking_area.h" #include "tracking_view_options.hpp" class CircleObject; class TrackingView : public GameObject { public: explicit TrackingView(TrackingViewOptions options = TrackingViewOptions()); ~TrackingView(); void draw(sf::RenderWindow *window) const override; void lateUpdate() override; void addTrackable(ITrackable *trackable); sf::Vector2f getSize() const; sf::Vector2f getCenter() const; private: sf::View *view{}; bool hasViewChanged{}; TrackingViewOptions options; std::vector trackables; CircleObject *marker; void initializeView(); void followTrackables(); void moveCenter(sf::Vector2 delta); TrackingArea getTrackingArea() const; void processTrackableStates(); void adjustSizeToTrackables(); void setSize(sf::Vector2f newSize); sf::Vector2f applyPadding(sf::Vector2f viewSize) const; sf::Vector2f restrainToBounds(sf::Vector2f viewSize) const; float getRadius(float threshold) const; }; #endif //HOLESOME_TRACKING_VIEW_H