#pragma once class Player; class Camera { public: Camera(); Camera(const Vector2f& position, float scale = 1); ~Camera() = default; Camera(const Camera& other) = default; Camera& operator=(const Camera& other) = default; void SetPosition(const Vector2f& position) { m_Position = position; } void SetScale(const float scale) { m_Scale = scale; } const Vector2f& GetPosition() const { return m_Position; } float GetScale() const { return m_Scale; } void BeginRendering() const; void EndRendering() const; void SetTrackingPlayer(Player* player) { m_FollowingPlayer = player; } Vector2f TransformMouse(const Vector2f& mousePos) const; Vector2f TransformWorld(const Vector2f& worldPos) const; Rectf Viewport = Rectf { 0, 0, 846.f, 500.f }; //TODO: Remove this and make it some static private: Vector2f m_Position; float m_Scale; Player* m_FollowingPlayer { nullptr }; //TODO: Ask if the rule applies to the fact that the player is not managed by the camera };