#ifndef HOLESOME_TRACKING_VIEW_H #define HOLESOME_TRACKING_VIEW_H #include "../game_object.h" #include "ITrackable.h" #include "../../primitives/circle_object.h" class CircleObject; class TrackingView : public GameObject { public: explicit TrackingView(float freeMoveRadius = 150, float dynamicFollowRadius = 300); ~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{}; float freeMoveRadius; float dynamicFollowRadius; std::vector trackables; CircleObject *marker; void initializeView(); void setSize(sf::Vector2u windowSize); void followTarget(); void moveCenter(sf::Vector2 delta); sf::Vector2f getCollectiveTrackingPoint() const; void processTrackableStates(); void setCenter(sf::Vector2 newCenter); }; #endif //HOLESOME_TRACKING_VIEW_H