holesome/src/game/camera/tracking_view.h

64 lines
1.2 KiB
C
Raw Normal View History

2023-05-23 23:38:37 +02:00
#ifndef HOLESOME_TRACKING_VIEW_H
#define HOLESOME_TRACKING_VIEW_H
2023-05-09 20:50:50 +02:00
#include "../game_object.h"
#include "ITrackable.h"
#include "../../primitives/circle_object.h"
#include "tracking_area.h"
#include "tracking_view_options.hpp"
2023-05-09 20:50:50 +02:00
2023-05-24 14:00:51 +02:00
class CircleObject;
2023-05-23 23:38:37 +02:00
class TrackingView : public GameObject
2023-05-09 20:50:50 +02:00
{
public:
explicit TrackingView(TrackingViewOptions options = TrackingViewOptions());
2023-05-09 20:50:50 +02:00
2023-05-23 23:38:37 +02:00
~TrackingView();
2023-05-09 20:50:50 +02:00
void draw(sf::RenderWindow *window) override;
2023-05-24 14:00:51 +02:00
void lateUpdate() override;
2023-05-09 20:50:50 +02:00
void addTrackable(ITrackable *trackable);
sf::Vector2f getSize() const;
2023-05-24 14:00:51 +02:00
sf::Vector2f getCenter() const;
2023-05-09 20:50:50 +02:00
private:
sf::View *view{};
bool hasViewChanged{};
TrackingViewOptions options;
std::vector<ITrackable *> trackables;
CircleObject *marker;
2023-05-10 11:03:14 +02:00
2023-05-24 14:00:51 +02:00
void initializeView();
void followTrackables();
void moveCenter(sf::Vector2<float> delta);
TrackingArea getTrackingArea() const;
void processTrackableStates();
2023-05-24 15:21:53 +02:00
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;
2023-05-09 20:50:50 +02:00
};
2023-05-23 23:38:37 +02:00
#endif //HOLESOME_TRACKING_VIEW_H