holesome/src/game/camera/tracking_view.h

68 lines
1.4 KiB
C++

#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 update() override;
void draw(sf::RenderWindow *window) override;
void lateUpdate() override;
void addTrackable(const std::shared_ptr<ITrackable>& trackable);
void removeTrackable(const std::shared_ptr<ITrackable> &trackable);
sf::Vector2f getSize() const;
sf::Vector2f getCenter() const;
private:
sf::View *view{};
bool hasViewChanged{};
TrackingViewOptions options;
std::vector<std::shared_ptr<ITrackable>> trackables;
CircleObject *marker;
void initializeView();
void followTrackables();
void moveCenter(sf::Vector2<float> 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;
sf::Vector2f getWindowSize() const;
void addPlayersDynamically();
};
#endif //HOLESOME_TRACKING_VIEW_H