#pragma once

#include "blitz/common/Vector.h"
#include "blitz/game/Player.h"
#include <cstdint>

namespace blitz {
namespace render {

class Camera {
  private:
	game::Player* m_Player;
	Mat4f m_PerspectiveMatrix;
	Vec2i m_LastWindowSize;

  public:
	Camera() : m_Player(nullptr) {}
	~Camera() {}

	void Update(float delta);

	void SetAttachedPlayer(game::Player* a_Player) {
		m_Player = a_Player;
	}

	const game::Player* GetAttachedPlayer() const {
		return m_Player;
	}

	Mat4f GetViewMatrix() const;

	const Mat4f& GetPerspectiveMatrix() const {
		return m_PerspectiveMatrix;
	}
};

}  // namespace render
}  // namespace blitz
